-
Notifications
You must be signed in to change notification settings - Fork 0
Releases: jasonhnd/life_OS
v1.9.3 — Start Session speed-up (write-time INDEX, focus-first) + briefing structure fix
Maintenance release — 上朝/retrospective speed-up + two briefing bug fixes. Pure spec/agent behavior; no vault-data migration. SOUL/DREAM full display retained (v1.7.2.3 principle).
Speed-up (上朝)
- Write-time Session INDEX:
meta/sessions/INDEX.mdwas rebuilt from scratch every boot (Glob + Read + parse every session file → O(N-sessions), the dominant Start Session cost on mature vaults). Moved to write-time —knowledge-extractorappends each session's line at adjourn; Start Session now reads + an O(1) drift check (Δ=0read,Δ≠0repair). Start Session no longer slows down linearly with session count. - Focus-first lead line (
⚡ 今日焦点速览) at the top of the briefing — immediate orientation without scrolling past full SOUL + DREAM. - AUDITOR patrol made explicitly non-blocking — briefing render is the user-unblock point; patrol runs after, async.
Bug fixes
- Briefing dual-representation: the Output Format banner template (🔮/💤/🗺️/⚡, no
## N) conflicted with the## 0–## 5Completeness Contract that AUDITOR Mode 3 greps for (and writes its pass line into## 5). A banner-only briefing would be flagged ClassCevery Start Session. Added a structure-authority note + explicit banner→## Nmapping. - INDEX drift tolerance tightened
|Δ|≤1→Δ=0(write-time keeps files:lines 1:1; self-healing repair).
Not changed
SOUL/DREAM full display is retained — the speed comes from the INDEX/structure changes, not from trimming reference content (user chose option K; v1.6.2/v1.7.2.3 principle).
Full notes: CHANGELOG.md
Assets 2
v1.9.2 — spec-drift cleanup (agent-spec / hippocampus / v1.9 RFC) (+ fix1: auditor Mode 7/8 order) (+ fix2: portable awk date-diff)
Maintenance release — promotes the post-1.9.1.2 spec-drift cleanup to a tagged release. Pure spec/docs correctness; no vault-data migration, no runtime behavior change.
Fixes
- agent-spec.md (EN/zh/ja): dropped the deleted
narrator-validatorfrom the per-agent table + the false "retained as template" claim; added the missing livememory-keeperrow so the body matches the frontmatter and on-disk reality. - Cortex hippocampus (agent + spec + i18n): FTS5/SQLite Wave-1 helper → plain Grep over
meta/sessions/INDEX.md; deletedtools/migrate.py→/rebuild-session-indexprompt. - v1.9 RFC: converged to a single GitHub backend (Google Drive + Notion removed in v1.9.1); voided the Stage-2 hooks-audit feature end-to-end (bash hook layer retired v1.8.5; repo has 0
.shfiles). - Smaller alignments:
/run-eval→ markdown scenario format;adapter-github→ navigation stub; AUDITOR 6→8 modes; RETROSPECTIVE / knowledge-extractor / install-agents / migrate-wiki-v2 / verify-release-and-watch / version-check corrections; GEMINI "all backends" → git pull; 3 hardcoded agent-count drifts removed.
Verification
0 active broken paths · 0 active count drift · 0 false retired-file claims · 0 .py/.sh files · trilingual parity.
Full notes: CHANGELOG.md
Assets 2
v1.9.1.2 — eval-docs /run-eval migration + dead Makefile removal
Maintenance release. Promotes the post-1.9.1.1 fixes to a tagged release at user request (a discrete 1.9.1.2 rather than a within-release 1.9.1.1 fix9). Pure docs + dead-infra correctness — no vault-data migration, no runtime behavior change.
Fixes
- docs/evals →
/run-eval: therunning-evals.md/overview.md/writing-new-scenarios.mdtrio still documented the retiredevals/run-eval.sh(chmod,./evals/run-eval.sh, a GitHub-Actions snippet) — contradictingevals/README.md, which migrated to the/run-evalslash command in v1.9.1. All three rewritten; the.shsurvives only as a "replaces the retired ..." lineage note. - eval scenarios:
adjourn-compliance.md+start-session-compliance.md## Notes for run-eval.shretargeted to/run-eval; the retiredlifeos-compliance-check.shTODO reframed as retired (compliance via/check-spec-drift+ AUDITOR Mode 3). - Removed the dead
Makefile: every target referenced resources deleted in the md-only pivot —tools/,tests/,tools/cli.py, ruff/pytest, the retired eval.sh, and a non-existent.github/workflows/test.yml. Verification is via slash commands (/check-spec-drift,/run-eval,/verify-release), whichmakecannot invoke.
Migration
No user action required. If you relied on make targets: an md-only repo has no build/test toolchain — run the slash commands in Claude Code instead.
Full notes: CHANGELOG.md · trilingual 中文 · 日本語
Assets 2
v1.9.1.1
Maintenance release for repository structure cleanup and final audit.
Changes:
- Bumped Life OS version metadata and README badges to
1.9.1.1. - Removed the legacy Pro source tree from active structure: host contracts moved to
hosts/, shared agents toagents/, compliance records tocompliance/. - Added the natural-language Doctor workflow prompt for repository self-check and cleanup.
- Slimmed the trilingual READMEs and moved old release narrative into changelog/history references.
- Archived retired legacy specs under
docs/history/specs/with thin compatibility stubs at the old reference paths. - Cleaned Markdown quality issues across active and mirrored docs.
Validation:
- stale primary
1.9.1version refs: 0 - legacy Pro path refs in Markdown: 0
- filtered local Markdown link errors: 0
- UTF-8 mojibake hits: 0
- unclosed frontmatter: 0
- odd code fences: 0
- trilingual section parity errors: 0 across 71 mirrored file pairs
- forbidden diff extensions: 0
- ignored files left: 0
Assets 2
v1.9.1 — Migration-debt cleanup (+ fix1..fix8)
Patch release. Finishes three migrations that v1.9.0 and earlier applied only to canonical files, not to their mirror layers.
What this fixes
- v1.8.6 audit-trail format (R12→R13): ~60 leftover
meta/runtime/<sid>/*.jsonreferences across all 16 agents'allowed_scope,SKILL.md,pro/CLAUDE.md, 8 maintenance prompts, the/notion-synccommand, and eval fixtures — all corrected to.md. Each would have made an agent write a forbidden file (F4 SCOPE_FAILURE). meta/queue/manifest.json→manifest.md(inbox-process system manifest)./regression-from-violationwas still generating forbiddenrc-*.ymlfixtures → nowrc-*.md.- v1.8.5 hook retirement: remaining references to retired bash hooks (
pre-notion-write.sh,session-start-inbox.sh,pre-prompt-guard.sh) reframed to inline LLM procedures;hooks-spec.md/compliance-spec.md/system-overview.md/roadmap.md/obsidian-spec.mdmarked LEGACY.
Upgrade
No action required — spec-correctness patch, no vault-data migration. v1.9.0 vaults are unaffected.
Root cause of the lingering bugs: mirror desync (3-platform CLAUDE/AGENTS/GEMINI, references↔i18n, spec↔prompt↔command↔agent). Verified: zero active forbidden-extension data paths under meta/ in any behavioral layer. Platform files (.claude/settings.json, .obsidian/*.json) untouched.
fix1 (2026年05月29日) — v1.9.0-origin drift, round 1
Post-publish corrections folded into the v1.9.1 tag:
- Shipped the v1.9 RFC —
_meta/rfc/v1.9-second-brain-structure-optimization.md, cited as spec authority by ~20 tracked files, was untracked under the.gitignore_meta/rule. Force-added (v1.8.7 RFC precedent). - Fixed impossible CHANGELOG dates — v1.8.5/v1.8.6 were dated 2026年07月15日/16 → corrected to 2026年05月23日 (authoritative tag/release date), across CHANGELOG + changelog-spec, EN/zh/ja.
- Finished references↔i18n mirror sync —
data-model.md(missing the entire Cortex Data Types section + v1.9 archive semantics, 177-line gap),concept-spec.md(Wikilink Convention),dream-spec.md(DREAM ×ばつ Cortex) zh/ja restored to##section-count parity.
fix2 (2026年05月29日) — line-by-line deep audit, round 2
A 5-agent parallel audit of every behavioral file fixed cross-file contradictions (most pre-v1.9):
- SOUL snapshot writer/reader path split — snapshots were written to
meta/soul-snapshots/<sid>.mdbut every reader usesmeta/snapshots/soul/{YYYY-MM-DD-HHMM}.md→ SOUL trend arrows silently broke. Fixed. - archiver Adjourn Report Phase 5 omission — H2 enumeration said "6 core H2", omitting Phase 5 (contract is 7) → AUDITOR would flag every adjourn. Fixed.
- AUDITOR ↔ retrospective briefing-heading mismatch — AUDITOR's expected headings no longer matched retrospective's actual output → false-flag on every compliant briefing. Realigned.
- pro/AGENTS.md + pro/GEMINI.md resynced to pro/CLAUDE.md — Step 10a config-driven (was hardcoded 4-page Notion), host-agnostic inline enforcement (was prompt-level-only), narrator-validator row removed.
- Retired-token / stale-path cleanup across archiver, auditor, monitor, data-model, dream-spec, lifecycle-gates, changelog-spec, install-agents, migrate-to-wikilinks, and active getting-started docs. references↔i18n parity preserved.
fix3 (2026年05月29日) — deep-audit cleanup, round 3 (remaining LOW items)
- De-hardcoded subagent counts —
agent-spec.md(23) andstatus-line-spec.md(22) disagreed (actual 24) and violated the no-hardcode-count rule; replaced with non-numeric phrasing (EN/zh/ja). The agent-spec subagent list also dropped the deletednarrator-validatorand addedmemory-keeper. - Fixed broken RFC scan-source paths —
memory-keeper.md,gotchas-spec.md,pro/gotchas.md, and the memory-keeper eval listed non-existentmeta/rfc/v1.8.4-*.md/v1.8.6-*.mdat the wrong path → existing_meta/rfc/RFCs (v1.8.5 / v1.8.7 / v1.9). - Misc —
retrospective.mdmojibake + "audit trail JSON" →.md;run-tool-eval.md/run-regressionmarked planned;migrate-wiki-v2.md/audit --mode 5given an inline fallback.
fix4 (2026年05月29日) — perfect-state closure
The 3 items fix3 had judged acceptable-to-leave, closed per a zero-drift request:
_meta/rfc/v1.8.7seed-source plan → existing_meta/rfc/RFCs (was non-existent v1.8.4/v1.8.6).changelog-spec.md(EN/zh/ja) worked example → dropped hardcoded "21 agent frontmatter"./exit-monitor+/audit→ reframed from bare slash syntax (no backing files) to the natural-language / inline triggers they actually are; leftover "cron activity" dashboard line → "recent maintenance runs".
Genuinely-frozen legacy files (status: legacy) left as-is by design.
fix5 (2026年05月29日) — consolidate legacy docs into docs/history/
Decluttered the active tree: genuinely-frozen v1.7-era docs moved (via git mv, history preserved) into docs/history/ (+ i18n/{zh,ja}/docs/history/ mirrors) — docs/architecture/ (13 snapshots), docs/user-guide/cortex/ (6 guides), v1.7-migration, v1.7-shipping-report. All inbound links in active docs/specs re-pointed; docs/index + user-guide/index rewritten to name pro/CLAUDE.md + pro/agents/ as the current authority. Frozen records (CHANGELOG/compliance/RFC) keep their original path refs (historical accuracy); load-bearing current feature specs (snapshot/concept/hippocampus/...) stay in references/. Added docs/history/README.md.
fix6 (2026年05月29日) — correct fix5's over-broad path substitution
fix5's link-update sed over-matched: it also rewrote devdocs/architecture/ → devdocs/history/architecture/ (gitignored internal dir, never moved) and redirected historical mentions of the deleted docs/architecture/hermes-local.md / prompt-cache-strategy.md. Both reverted. Also aligned narrator-spec.md status (draft → legacy) with its mirrors. Caught pre-ship by a full-repo broken-path + frontmatter + version sweep — now clean.
fix7 (2026年05月29日) — repo-wide link + count hygiene sweep
Full re-scan of all tracked .md (EN + zh/ja mirrors). Fixed:
- README
meta/rfc/→_meta/rfc/links (3 langs; the repo's own/check-spec-driftregex never catchesmeta/so it had gone undetected) - zh/ja README bare relative links (
pro/CLAUDE.md,outbound-pii-patterns.md,v1.7-migration.md) →../../ - docs/reference
faq.md+version-history.mdleading-slash](/...)links → relative - cortex breadcrumb regression from fix5:
../index.md→../README.md(18 docs); createdi18n/{zh,ja}/docs/history/README.md; repointed zh/ja Quickstart links - de-hardcoded stale agent counts (WHEN-NOT-TO-ADD ×ばつ3, install-agents, auditor ×ばつ3, e9/e10 scenarios); ja README "16エージェント" → "multiple agents" (EN/zh parity)
version-history.mdadded to/check-spec-driftexclusions (version log)
Post-fix scan: 0 real broken links, 0 unclosed frontmatter, 0 odd fences, 0 active-file count drift, full trilingual section parity.
fix8 (2026年05月31日) — remove Notion + Google Drive backends (GitHub-only storage)
Storage simplified to a single git backend (local working copy + GitHub remote; sync = git pull / git push at ARCHIVER Phase 4). Removed: GDrive + Notion adapters (+i18n/docs), the Notion outbound-PII gate, the /notion-sync(+watch) commands, and the multi-backend sync layer (12 files deleted). Rewrote data-model/data-layer, pro/{CLAUDE,AGENTS,GEMINI}, agents, SKILL, README x3, all docs + i18n. No version bump. Verified: 0 residual Notion/GDrive in active files, 0 broken links, 0 frontmatter/fence issues, trilingual parity.
Assets 2
v1.9.0 — Second-brain structure optimization
v1.9.0 — Second-brain structure optimization + transparency
Type: minor (breaking vault layout)
RFC: _meta/rfc/v1.9-second-brain-structure-optimization.md
Decisions locked: 24 across 29 DRs (DR-1.9.1 to DR-1.9.29)
8 optimizations
- Opt #1
_meta/→meta/+ transparency (no.system/hidden layer; all audit/runtime visible) — DR-1.9.1 - Opt #2
meta/inbox/→meta/queue/rename (avoid clash with vault-rootinbox/) - Opt #3 decisions consolidate to
meta/decisions/<YYYY-MM>/<id>.md(was 3 sources:_meta/decisions/,projects/*/decisions/,_meta/incidents/*.yml) - Opt #4
archive/→lifecycle_stage: archivedfrontmatter (no physical move; preserves wikilinks) — DR-1.9.4 - Opt #5 journal time-axis canonical at
meta/journal/<date>.md(drop dual-writeprojects/*/journal/) - Opt #6 areas softened to "recommended seeds" (FIRST-RUN no longer pre-creates 10 dirs)
- Opt #7
user-patterns.md→meta/user-patterns.md(compiled artifact alignment) - Opt #8 methods/decisions/journal frontmatter cross-references (
applied_methodslist,born_from_decisions,referenced_decisions,referenced_methods; reverse via Dataview)
Migration
Run /migrate-v1.9 on v1.8.x vaults. Pre-flight refuses if:
- git working dir not clean (DR-1.9.7, no escape hatch)
- vault < v1.8.0 (run prior migrations first; no auto-chain — DR-1.9.14)
archive/contains non-project content (clean manually first — DR-1.9.22)
Then run /verify-v1.9 for 8-check acceptance.
For v1.6/v1.7 vaults: see docs/guides/cross-version-migration.md.
Schema changes
decision.applied_method(string) →applied_methods(list) — DR-1.9.19decision.domainsclosed enum:[governance|execution|finance|infra|people|growth]— DR-1.9.25lifecycle_stage5 → 4 values (dropdormant, addpaused_untilfield) — DR-1.9.20archived_at_sourceenum:git-log | migrated-unknown | manual | auto— DR-1.9.26method.applied_in_decisionsREMOVED (use Dataview reverse query) — DR-1.9.24- decision ID format:
dec-<YYYY-MM-DD>-<NNN>per-day seq — DR-1.9.17 - decisions monthly subdir
<YYYY-MM>/— DR-1.9.18
Acceptance
4 eval scenarios written:
evals/scenarios/v1.9-migration-correctness.md(6 test cases)evals/scenarios/v1.9-wikilink-preservation.md(4 test cases)evals/scenarios/v1.9-decision-consolidation.md(5 test cases)evals/scenarios/v1.9-cross-reference-fields.md(5 test cases)
Cleanup (Phase J)
v1.8.5 retired the bash hook layer (scripts/hooks/*.sh deleted), but normative docs still referenced setup-hooks.sh / verify-release.sh / lifeos-pre-prompt-guard.sh. v1.9.0 cleaned all current-use references to slash commands (/install-agents, /uninstall-agents, /verify-release); historical "What's New" sections in README/i18n marked with v1.8.5+ obsolete notes; hook-compliance evals marked DEPRECATED.
Trilingual sync
README.md/i18n/zh/README.md/i18n/ja/README.mdversion badge → 1.9.0CHANGELOG.md×ばつ3 langs with full v1.9.0 entrydocs/second-brain.md×ばつ3 langs full rewrite (v1.9 directory tree + 5-class mental model + Recommended seed)SKILL.md::version→ 1.9.0
Breaking changes summary
All v1.8.x vault paths break. Run /migrate-v1.9 once. No automatic chain for older vaults.
See _meta/rfc/v1.9-release-handoff.md for full execution audit.
Assets 2
v1.8.7 · OpenHuman-inspired hardening + md-only ontological constraint
v1.8.7 · OpenHuman-inspired hardening + md-only ontological constraint
Released: 2026年05月25日 · Type: patch · Breaking changes: none
Summary
7 borrowed patterns from tinyhumansai/openhuman absorbed into lifeos, every one expressed in md-only. DR-10 elevates md-only from "policy" to lifeos's ontological constraint — the definitional property of being lifeos. 3 cargo-cult borrows cut per DR-08 to keep the product simple.
Product upgrades
Capability-changing (new things lifeos can do)
-
🧠 gotchas + memory-keeper (C6) —
pro/gotchas.mdis a single flat file of project-level technical gotchas, written exclusively by the newmemory-keeperagent. archiver wrap-up now has a Phase 5 that auto-extracts new gotchas at every adjourn. ROUTER can short-circuit known issues before major tasks. Adjourn report contract expanded from 6-H2 to 7-H2. -
🔄 Self-driven loops (B4) —
/verify-release-and-watchand/notion-sync-and-watchuse Claude Code'sScheduleWakeupto poll every 270s (cache-window-optimized interval) for up to 12 ticks (60-minute hard cap) until terminal state. Auto-fixes missing GitHub Release publish. Spec atreferences/self-driven-loops-spec.md. Claude Code only; other hosts gracefully degrade to manual reruns. -
📋 verify-release expanded to 11 checks
- Check 8 expanded to 9 forbidden extensions (added
.bash/.yml/.yaml/.json/.sql/.db/.sqlite) - Check 9 NEW: i18n diff parity (WARN level v1.8.7, BLOCK target v1.8.8) — catches EN/zh/ja drift class
- Check 10 NEW: diff-scoped forbidden extensions — catches files introduced since last tag
- Check 11 (was check 9): All regression fixtures FAIL — renumbered
- Check 8 expanded to 9 forbidden extensions (added
-
🛡️ AUDITOR Mode 7 added — 7 sub-checks (M7-1 through M7-7) verify v1.8.7 artifacts stay present + md-only constraint not bypassed even at design-proposal level. M7-7 scans for "introduce a JSON config" / "add a Python script" / "create a SQLite database" patterns in new specs.
Hardening (existing behavior made explicit/enforced)
-
📚 evals_scenarios required in planning docs (B5) —
pro/agents/planner.mdtemplate now requiresevals_scenarios:frontmatter field;pro/agents/dispatcher.mdrejects planning docs without it. lifeos's eval-first philosophy elevated from "should" to "must". Spec atreferences/feature-workflow-spec.md. -
🔢 concept-spec hotness thresholds explicit (A3) — promotion thresholds (≥3 sessions → confirmed, ≥10 sessions → canonical, 90-day dormancy → retirement candidate) were previously implicit in code; now documented in
references/concept-spec.mdwith rationale. Behavior unchanged. -
🚧 Five WHEN-NOT-TO-ADD.md boundaries (F12) —
pro/agents//references//_meta//themes//scripts/each get a "what does NOT belong here" doc plus three-language mirrors. 15 anti-pattern docs total. Inspired by OpenHuman.claude/rules/README.md"This directory is intentionally near-empty."
Spec-only proposal (frozen for v1.9/v2.0)
- 🌳 Memory tree cascade seal (A1, proposal) —
references/memory-tree-spec.mddefines L0 → L1 → L2 → L3 cascade seal architecture (status: proposal). archiver behavior UNCHANGED in v1.8.7. Implementation deferred to v1.9/v2.0 pending real-data validation in Jason's second-brain. Cost calibration TBD (300ドル-800ドル/year of LLM bills for sealing depending on activity).
Ontological constraint (DR-10)
SKILL.md HARD RULE upgraded from "No .py/.sh/.yml/.json" to "md-only is lifeos's ontological constraint, no escape hatch, permanent". Forbidden extensions: .py / .sh / .bash / .yml / .yaml / .json / .sql / .db / .sqlite. Audit gates: verify-release check 8 (full-repo) + check 10 (diff-scoped) + AUDITOR Mode 7 M7-7 (proposal-level).
md-only is the definitional property of lifeos. A "lifeos" that introduces SQL / JSON / sh / py is no longer lifeos — it's a different project. No escape hatch. Borrowing patterns from external projects = borrow the pattern, never the tech stack.
Cuts (cargo-cult avoidance, DR-08)
3 borrowed patterns from OpenHuman that would have added product complexity without solving real lifeos pain were cut:
| Cut | Why |
|---|---|
| A2 content_hash frontmatter | No documented dedup pain in violations.md or sessions history. Adding "just in case" is product rot starter |
| D8 three-layer compression rules | lifeos is single-user; three independent rule sources don't exist. Borrowing OpenHuman's JSON merge architecture would add abstraction for a non-existent need |
| C7 workpad directory | No user-layer purpose distinguishing workpad from sessions; would force "where to put this note" decision without value |
| Stage 7 aggressive/hash-only migration modes | A2/A1 cut eliminated need for these modes — zero-friction upgrade sufficient |
Decision standard (DR-09)
v1.8.7 audit trail records the decision standard shift: from "save working days" to "product quality". Every cut and every kept feature judged by "does this make lifeos better or just more complex?" Time was not a factor — "I don't fear taking time, I want to make the product good" (user, 2026年05月25日).
Upgrade path (v1.8.6 → v1.8.7, zero-friction)
1. cd <lifeos repo> && git pull origin main
2. /version-check
3. /install-agents --refresh
4. /verify-release v1.8.7
No migration command. archiver first wrap-up after upgrade auto-creates pro/gotchas.md and runs memory-keeper in seed mode to populate ≥10 seed entries from v1.8.4-1.8.6 RFC + violations history.
File changes summary
- Created: 35 new md files (specs trilingual, agent, commands, fixtures, WHEN-NOT-TO-ADD ×ばつ15, RFC, release-notes)
- Modified: 30 existing md files (SKILL/README/CHANGELOG/MIGRATION trilingual, 9 themes, archiver/planner/dispatcher/auditor agents, concept/wiki/session-index specs trilingual, verify-release command, hard-rules-index)
- Cut: 0 (no removals — additions only)
- Cut at proposal stage: 3 (A2/D8/C7 never reached implementation)
References
- Full RFC:
_meta/rfc/v1.8.7-openhuman-borrowed-patterns.md - 10 Decision Records: DR-01 through DR-10
- Pattern source:
tinyhumansai/openhuman@b7b8ba6 - Companion specs:
references/{gotchas,self-driven-loops,i18n-diff-parity,feature-workflow,memory-tree}-spec.md - AUDITOR Mode 7:
pro/agents/auditor.md
Assets 2
v1.8.6 — md-only enforcement
v1.8.6 — md-only enforcement
Ship date: 2026年07月16日
Type: patch (extends v1.8.5 "No .py/.sh" HARD RULE)
Trigger: User instruction "lifeos 不需要 md 之外的任何形式的文件"
What changed
v1.8.6 extends the "No .py/.sh" HARD RULE established in v1.8.5 Stage 2 to also forbid .yml, .yaml, and .json files in the lifeos repo. All structured data formats migrate to .md with YAML frontmatter (the frontmatter is YAML syntax, but the file is .md — passes the rule).
File-format migrations
| Before (v1.8.5) | After (v1.8.6) | Notes |
|---|---|---|
evals/regression-fixtures/rc-*.yml ×ばつ 14 |
rc-*.md ×ばつ 14 |
Original yaml preserved as yaml code block inside md |
_meta/runtime/<sid>/<subagent>-<step>.json |
.md (R12 → R13) |
YAML frontmatter holds machine-parseable fields; markdown body human-readable |
_meta/incidents/<id>.no-change.yml |
.md |
Same 7-field schema as frontmatter |
~/.claude/lifeos-memory/<key>.json |
<key>.md |
Key + value structure as frontmatter |
.github/workflows/test.yml |
DELETED | CI moves to user-side /run-eval |
Exception kept
.claude/settings.jsonand.claude/settings.local.json— Claude Code platform requirement, gitignored (not in repo).gitignore/.gitattributes— git infrastructure (not data format)
Verification
find . -type f \( -name '*.py' -o -name '*.sh' -o -name '*.yml' -o -name '*.yaml' -o -name '*.json' \) \ -not -path './.git/*' -not -path './backup/*' -not -path './.venv/*'
Expected output: empty (or only ./.claude/settings*.json which are gitignored platform-required exceptions).
/verify-release check #8 expanded to enforce.
Spec changes
audit-trail-spec.md R12 → R13
R13 trail file format:
- Path:
_meta/runtime/<sid>/<subagent>-<step>.md(was.json) - Structure: YAML frontmatter (all R12 fields preserved) + markdown body (narrative + tool calls + reasoning + value_invocations expanded)
- AUDITOR Mode 3 parses frontmatter same way; reads body for human review context
- Legacy R12
.jsonfiles remain readable; lazy migration via/migrate-trail-r13slash command
violations.md (no change)
Already .md format. F-Code mapping extended to include F4-forbidden-extension-trail for .json/.yml files in runtime dir.
Other specs
- SKILL.md: HARD RULE "No .py/.sh" upgraded to "No .py/.sh/.yml/.json" with platform-exception clause
- 3 CHANGELOG (EN/ZH/JA): v1.8.6 entry added per changelog-spec v1 schema
Migration
For users on v1.8.5:
-
Audit trails: existing
_meta/runtime/<sid>/*.jsonremain readable. New session trails written from v1.8.6+ install onwards will be.md. No action needed. -
Regression fixtures: already converted at the source repo. After updating lifeos plugin, your local clone has
.mdfixtures. -
GitHub Actions: if you forked the repo and used CI, you'll need to run
/run-evallocally before each release. CI was lightweight (single test.yml file calling claude CLI), so this is minor. -
Decision records: if you've written any
_meta/incidents/<id>.no-change.ymlmanually, rename to.mdand wrap content in---frontmatter delimiters. Optional — old yml still works if your AUDITOR reads it. -
Memory KV: same — old
.jsonfiles in~/.claude/lifeos-memory/still work; new memory writes from v1.8.6+ go to.md.
Statistics
- Files converted: 14 (regression fixtures)
- Files deleted: 1 (.github/workflows/test.yml)
- Specs updated: 2 (audit-trail-spec.md R12→R13, SKILL.md HARD RULE)
- CHANGELOG entries added: 3 (EN/ZH/JA)
- Lines added: ~150 (specs + CHANGELOG entries + release notes)
- Lines deleted: ~50 (workflow yml + brief cleanup)
- Net delta: +100 lines (mostly documentation)
Assets 2
v1.8.5 — Hook Retirement + EOU-Hardening
v1.8.5 — Hook Retirement + EOU-Hardening
Ship date: 2026年07月15日
Type: patch (contains breaking schema changes; legacy 12-month coexistence per D3)
RFC: _meta/rfc/v1.8.5-cleanup-and-hardening.md
Branch: v1.8.5-cleanup-hardening → main
Tag baseline: v1.8.4-pre-1.8.5 (a46fdac)
The largest single release in life_OS history
v1.8.5 ships in one shot what would normally be 5-7 minor versions. Two parallel tracks merged:
Track A · Hook Layer Retirement (Stage 2)
- 11 bash hooks deleted (
scripts/hooks/*.sh) - 38 .sh files removed (~8328 lines) — operations scripts, eval runners, wiki bootstrap, CI
- 9 new slash commands (
.claude/commands/*.md) —verify-release,check-spec-drift,notion-sync,migrate-soul-v2,migrate-wiki-v2,install-agents,uninstall-agents,run-eval,run-tool-eval,setup-secondbrain,version-check,regression-from-violation - GitHub Actions yml rewritten — single-line
claude --execute "/cmd"only; no inline bash - 5-layer defense → 4-layer — runtime hook layer (Layer 1) integrally retired per D1 ("accept any pass rate")
- 0 .py + 0 .sh achieved in lifeos repo (excluding backup/, .git/, .venv/)
Track B · 30 EOU-Hardening Borrowed Designs (Stages 3-9)
From xiaolai/eou-foundry @ e4b12ce — 6 agents ×ばつ 121K lines of source code reviewed; 30 design ideas borrowed with attribution.
Foundation reference docs (Stage 3, three-language)
references/failure-taxonomy.md— F1-F17 architecture failure taxonomyreferences/refactoring-patterns.md— 8+2 canonical refactor patterns + minimality rulereferences/risk-domains.md— 8 high-risk domains ×ばつ 5 escalation requirementsreferences/lifecycle-gates.md— 8 promotion transitions with evidence checklists
SOUL v2 schema (Stage 4)
Borrowed from eou-foundry dev-docs/06-values-over-rules.md + schemas/captured-workflow.schema.yml:
- Priority {1..N} total order — no ties, no gaps, higher wins conflict
- X-over-Y formulation — Y must NOT be strawman
- Inclusion test 6Q gate — Speed/elegance/output volume NOT valid constitutional values
- 3-8 dimension count cap
- Mandatory
outlierrole slot — anti-confirmation-bias defense /migrate-soul-v2interactive slash command + AUDITOR Mode 4 + 3 regression fixtures
wiki v2 schema (Stage 5)
Borrowed from eou-foundry schemas/eou.schema.yml + engine/eou-contract.md:
- 6 facets classification (function / target_object / automation_mode / authority_level / risk_level / lifecycle_stage)
operating_hypothesis(Given/can/within form, ≥30 chars)context_manifest3-layer (source_of_truth / supporting / forbidden)reference_set5 role slots — outlier mandatory for active+failure_modes三件套 (known / warning_signs / repair_actions)arguments_against— non-trivial, specific failure mode + observable counter-signal/migrate-wiki-v2+ AUDITOR Mode 5 + 2 fixtures
Agent v2 frontmatter for all 23 subagents (Stage 6)
- New
references/agent-spec.mdv2 (三语) - All 23
pro/agents/*.mdfiles gain: id, version, classification, operating_hypothesis, context_manifest, blast_radius, failure_modes - AUDITOR Mode 6 enforces compliance + 2 fixtures
- per-agent authority_level mapping (router: suggest_only | archiver: publish | reviewer: approve | etc.)
Process layer (Stage 7)
- Decision Records HARD RULE — REVIEWER
no_change_record7-field schema ("missing record = uninvestigated incident") - Minimality Rule HARD RULE — 6Q gate before creating new agent/spec/skill
- Risk Domains HARD RULE — 8 domains ×ばつ 5 escalation requirements (R1 finance / R2 health / R3 legal / etc.)
- R12 audit trail upgrade —
value_invocations[]5-field array on contested-case decisions - AUDITOR Mode 3 F14-F17 scenarios — silent judgment / value hierarchy / value drift / value hallucination detection
Schema infrastructure (Stage 8)
references/changelog-spec.mdv1 — CHANGELOG YAML frontmatter schema for v1.8.5+ (7 required fields incl. alternatives_considered + ordering_dependency + regression_cases_added)pro/compliance/violations.md— new format with F-Code column for v1.8.5+ rows + A-F → F-Code mapping reference- SKILL.md +3 new HARD RULES (No .py/.sh, F-Code required, CHANGELOG schema required)
Regression fixtures (Stage 9)
- 7 new fixtures: rc-f14 / rc-f15 / rc-f16 / rc-f17 / rc-forbidden-extension-sh / rc-court-start-001 / rc-confabulated-path
- Combined with Stages 4/5/6 fixtures = 14 regression fixtures protecting v1.8.5 surface
/regression-from-violationslash command for lazy conversion of remaining historical rows
Migration Guide
For existing users (v1.8.4 → v1.8.5)
Step 1 · Update plugin
# In Claude Code
/install-skill https://github.com/jasonhnd/life_OSStep 2 · Clear old hook configuration (one-time)
# In Claude Code (or Codex/Gemini) /uninstall-agents # removes old lifeos-* wrappers /install-agents # registers v2 agents
After this, ~/.claude/settings.json will have empty hooks: {} block — the bash hook layer is gone. Cleanup is automatic; no manual edit needed.
Step 3 · SOUL.md migration (optional, 12-month grace)
/migrate-soul-v2
Interactive — asks you per-dim to reformulate as "X over Y", assign priority, answer inclusion test. Skip-able dims marked legacy. Auto-deprecate 2027年05月23日.
Step 4 · wiki/ migration (optional, 12-month grace)
/migrate-wiki-v2
Interactive — asks per-entry for 6 facets, operating_hypothesis, outlier reference, arguments_against. Skip-able entries marked legacy. Auto-deprecate 2027年05月23日.
What changed in your daily workflow
- "上朝" / Start Session: same behavior; ROUTER launches retrospective subagent. Hook reminder no longer auto-injected — relies on SKILL.md HARD RULE + retrospective Subagent Self-Check.
- "退朝" / Adjourn: same 4-phase flow (archive → knowledge-extractor → DREAM → Notion sync). Phase 2 candidate gates now stricter (v2 schema). archiver Phase 4 auto-launches AUDITOR Mode 3-6 patrol.
- REVIEWER veto: now MUST populate
value_invocations[]in R12 trail with SOUL dim_id + rule_conflict + chosen_path + rejected_alternative. Empty array on contested case = F14 violation. - High-risk domain decisions (finance / health / legal / etc.): ROUTER auto-escalates to full deliberation; REVIEWER cannot give "approved" without 5 escalation requirements met.
- Notion sync:
/notion-syncslash command replacesnotion-sync.shaudit trail writing. ROUTER still calls Notion MCP directly at Step 10a. - Release process:
/verify-releasereplacesverify-release.sh— same 8 checks (6 git/gh + new no-py-sh + new regression-fixtures-fail).
What didn't change
- All 6 domains (people/finance/growth/execution/governance/infra) — same dispatch, same reports, just v2 frontmatter
- Theme system — 9 themes ×ばつ 3 languages unchanged
- DREAM cycle — same 3 stages (organize / consolidate / creative connections)
- Strategic Map — unchanged
- Workflow state machine — same legal transitions
Risk Posture Post-v1.8.5
| Risk | v1.8.4 | v1.8.5 | Mitigation |
|---|---|---|---|
| COURT-START class violation (skip retrospective subagent) | Layer 1 hook injects reminder | No hook — SKILL.md HARD RULE only | AUDITOR Mode 3 detects post-hoc; rc-court-start-001 regression fixture |
| Confabulated path / fabricated evidence | Layer 1 hook scans Read/Write | No hook — Cortex narrator citation discipline only | AUDITOR Mode 3 F17 + rc-confabulated-path |
| Outbound PII to Notion | Layer 1 pre-notion-write.sh scans content | No hook — /notion-sync slash command relies on LLM prompt-level check |
AUDITOR Mode 5 + outbound-pii-patterns.md still consulted |
| Silent judgment (REVIEWER veto without SOUL citation) | No defense (v1.8.4 didn't have R12 value_invocations) | AUDITOR Mode 3 F14 + rc-f14-silent-judgment | Required field in R12 trail |
| SOUL dim hallucination (cite non-existent dim) | No defense | AUDITOR Mode 3 F17 + rc-f17-value-hallucination | grep check against SOUL.md |
| Value drift over multiple sessions | No defense | AUDITOR Mode 3 F16 + rc-f16-value-drift | 30-day window aggregation |
D1 decision context: Day 21 hook-retired stress test was projected to validate the 5→4 layer trade. User accepted any pass rate ("接受") — no rollback even if regression rate increases. The bet is that v2 schema enforcement + AUDITOR Mode 3-6 + 14 regression fixtures compensate for runtime hook absence.
Acknowledgments
Original inspiration: xiaolai/eou-foundry @ e4b12ce (https://github.com/xiaolai/eou-foundry). The "EOU" (Executable Operating Unit) framework provided 30 design ideas borrowed across Stages 3-9. Every borrowed concept carries attribution in the relevant references/*.md spec.
Two systems independently converged to 5 governance attractors:
- Audit trail as filesystem evidence (life_OS R11/R12 ↔ eou
runs/) - Evidence-bound assertion (life_OS REVIEWER citations ↔ eou
activated_by) - Honest downgrade ("don't fake maturity") (life_OS lifecycle gates ↔ eou L0-L6)
- Generating ≠ Operating separation (life_OS authority_level ↔ eou
function:generateforbidden_outputs) - Self-approval paradox explicit (life_OS Rule of Conduct #7 ↔ eou ECP-0011 CI auto-merge exception)
That two independent agentic-governance systems reach the same 5 invariants is a strong signal these are real attractors of the design space — not coincidental.
Verify Release
After ship:
/verify-release v1.8.5
Must pass all 8 checks:
- HEAD == origin/main
- Tag v1.8.5 points to HEAD
- Tag on remote
- GitHub Release exists (not Draft)
- Marked as Latest
- No .py / .sh in repo (excluding backup/git/venv)
- All regression fixtures FAIL when run through validators
- CHANGELOG v1.8.5 entry conforms to schema (7 YAML fields)
Sta...
Assets 2
v1.8.4 — Anti-confabulation: DREAM + maintenance overdue
v1.8.4 — Anti-confabulation: DREAM stale-task validation + maintenance overdue source-of-truth
Two surgical fixes for briefing free-form-generation holes detected on 2026年05月16日. Both bugs are class B (LLM fabrication of evidence) — the subagent invented numeric/state claims instead of reading primary source. v1.8.4 lifts each source-of-truth into something the subagent must call and forces ROUTER to re-verify before showing the briefing.
Bug R-DREAM-STALE-TASK · DREAM trigger validity re-check
DREAM journals are async overnight snapshots. A HARD trigger written at N-1's adjourn can already be resolved by the user before N's session boot — but retrospective Step 16 promoted it to today's P0 anyway. The 2026年05月16日 briefing surfaced 8938 revenue-uplift task closure as a P0 follow-up even though that task had status: closed-superseded written the day before.
Fix:
pro/agents/retrospective.mdStep 16 gains TRIGGER VALIDITY RE-CHECK HARD RULE. Subagent MUSTReadreferenced task frontmatter and inspectstatus:BEFORE promotion. Closed/done/superseded → render as✅ auto-resolved, do NOT promote.- R11 audit trail gains
dream_triggers_validatedfield (one entry per HARD trigger). references/dream-spec.mdtriggered_actions schema gains optionaltask_ref: { task_path, task_slug, project }field (three-language lockstep).- 4-tier resolution:
task_pathdirect read →task_slug + projectfuzzy match → LLM-parsedetection.hard_signals→still-actionablefallback. Behavioral triggers (decision-fatigue, dormant-soul) skip validation entirely.
Bug R-MAINT-OVERDUE-HALLUCINATION · maintenance overdue single source of truth
The 2026年05月16日 briefing reported archiver-recovery 13d overdue while the same session's session-start-inbox.sh hook had emitted 3d. The subagent free-form-estimated instead of running the script.
Fix · two-layer defense:
- Subagent layer · Step 0.5 marker list gains
[Maintenance overdue: ...]literal marker. New HARD RULE forces subagent to runsession-start-inbox.shitself, strip<system-reminder>wrapper, paste verbatim. No copying transcript stale values, no re-estimating day count. - ROUTER layer ·
SKILL.mdfact-check rule 8 re-runs the same script and byte-equal compares. Mismatch → strike marker. Marker missing → refuse to show briefing. - Mode 2 (Review) inherits same contract · Data Sources step 7 added. Mode 2 reviews span longer time windows = more drift exposure, so the marker is mandatory there too.
<system-reminder>wrapper handling explicitly documented on both subagent and ROUTER sides.
Zero new infrastructure
v1.8.0 Zero-Python / Zero-new-script invariant preserved. No new SH/PY files. Reuses existing scripts/hooks/session-start-inbox.sh and scripts/verify-release.sh.
Files changed (11)
pro/agents/retrospective.md(Step 16 + Step 0.5 + Mode 2 step 7)SKILL.md(version + rule 8 + wrapper-strip note)references/dream-spec.md+i18n/zh/references/dream-spec.md+i18n/ja/references/dream-spec.md(task_ref schema)README.md+i18n/zh/README.md+i18n/ja/README.md(badge)CHANGELOG.md+i18n/zh/CHANGELOG.md+i18n/ja/CHANGELOG.md(entry)
See CHANGELOG.md for full details.