docs(TELOS): reconcile IDEAL_STATE/CURRENT_STATE READMEs with the code + document the scoring contract#1478
Conversation
…e, and document the scoring contract
The READMEs in USER/TELOS/{IDEAL_STATE,CURRENT_STATE}/ instruct users to create
files that UpdateLifeosState.ts and Pulse cannot read. On a case-sensitive
filesystem the dimension files are silently ignored and the rings stay dark
with no error.
Both READMEs say to create:
Health.md, Finances.md, Work.md, Relationships.md, Learning.md, Energy.md
Both the code and the shipped templates use:
HEALTH.md MONEY.md FREEDOM.md CREATIVE.md RELATIONSHIPS.md RHYTHMS.md INFRASTRUCTURE.md
Two independent failures:
1. Case — Health.md != HEALTH.md on Linux.
2. Taxonomy — Work/Learning/Energy do not exist in the code; the code's
Freedom/Creative/Rhythms/Infrastructure do not appear in the READMEs.
The IDEAL_STATE README also states the directory "ships empty except for this
README" while sitting alongside seven correctly-named templates.
Changes:
- Both READMEs now list the seven UPPERCASE filenames the code actually reads,
with an explicit note about case sensitivity.
- Document the scoring contract, which was previously undiscoverable without
reading the parser:
IDEAL_STATE: pct = 100 - (TBD count x 10) -> articulation
CURRENT_STATE: pct = (have + 0.5*partial)/total -> coverage, and it
OVERRIDES the IDEAL_STATE score
- Note the consequence: without a CURRENT_STATE file, a well-written ideal
scores high even when nothing is being lived. The override is what makes
the dashboard honest.
- Add the five missing CURRENT_STATE templates (MONEY, FREEDOM, CREATIVE,
RELATIONSHIPS, RHYTHMS) so both directories carry all seven dimensions.
Found while populating the dimensions end-to-end on a Linux install.
|
Thanks @christauff — this caught a real asymmetry, not just a docs gap. Ported into source. The public repo is generated at release, so I applied your changes to the private template source: the five new Before merging the doc intent I verified your scoring contract against the actual scorer (
So the README now documents what the code actually does. Closing since it's in the source; ships next release. Credited in the commit. |
Hi Daniel — first, thank you for LifeOS. I've been running it daily and the Current→Ideal framing is genuinely the best articulation of this idea I've seen. This PR comes out of actually populating the life dimensions end-to-end for the first time, which surfaced a small documentation/code drift. Happy to reshape any of it to your taste.
The issue
The READMEs in
USER/TELOS/IDEAL_STATE/andUSER/TELOS/CURRENT_STATE/tell users to create files thatUpdateLifeosState.tsand Pulse can't read.Both READMEs say:
But
LIFEOS/TOOLS/UpdateLifeosState.tsreads:Two independent failures stack:
Health.md≠HEALTH.mdon a case-sensitive filesystem, which is every Linux install.Work,Learning, andEnergydon't exist in the code. The code'sFreedom,Creative,Rhythms, andInfrastructuredon't appear in the READMEs. The two describe different models of a life.A Linux user who follows the docs exactly gets zero dimensions scored, silently, with no error. Pulse keeps rendering "No life-area dimensions populated yet" while their files sit right there in the directory.
The good news is the shipped templates are already correct —
IDEAL_STATE/containsHEALTH.md,MONEY.md,FREEDOM.mdand friends. Only the READMEs are stale, and they appear to predate the seven-dimension model. (TheIDEAL_STATEREADME also says the directory "ships empty except for this README" while sitting next to those seven templates.)The undocumented part
The scoring contract isn't written down anywhere, so "drop files into IDEAL_STATE/" is currently an instruction to guess at a format. From the parser:
IDEAL_STATE/<DIM>.md→pct = 100 − (TBD count × 10). Scores articulation: how completely you've said what "good" looks like.CURRENT_STATE/<DIM>.md→pct = (have + 0.5 × partial) / total, from literalstatus: have|partial|missingrows. Scores coverage, and overrides the ideal-state score.That override is the subtle and important bit, and it bit me in a way I think is worth surfacing: I wrote a thorough
CREATIVE.mdideal and it scored 90%, which pushed the ring to 70% — while I was in fact doing almost none of it. A well-written ideal you aren't living still scores high. Writing theCURRENT_STATEfile is what makes the dashboard honest (mine dropped to 30%, which was the true number). That behavior is correct and rather elegant, it just isn't discoverable without reading the parser.Changes
status:row syntax and the override semantics.CURRENT_STATEtemplates (MONEY,FREEDOM,CREATIVE,RELATIONSHIPS,RHYTHMS) so both directories carry all seven dimensions.CURRENT_STATE/previously shipped onlyHEALTHandINFRASTRUCTURE.Docs and templates only. No code, no behavior change.
One thing I left alone
Both READMEs, and Pulse's empty state, point users at
/interview— "run/interviewand pick the Ideal State phase." TheInterviewskill's workflows areContextCheckin,Phase0Setup, andTelosCheckin; there's no ideal-state or current-state phase, so that instruction currently dead-ends.I didn't touch it, since how that flow should work is a design call that's yours to make. If it'd be useful, I'm glad to follow up with a PR adding those workflows — just say the word and I'll build it to whatever shape you prefer.
Thanks again. Happy to revise anything here.