docs(journal+daily-maintenance): bury legacy /data/journal.md, add 4 journal rules, fix broadcast accuracy#76
Merged
Conversation
Bury the legacy /data/journal.md path entirely — file is gone from GCS (moved to journal/2026-05-11.md) and every source mention is removed. Prose passes tighten phrasing toward README voice: short sentences, active verbs, no throat-clearing. Four new writing rules in capabilities/journal.md: - Name subagent dispatches in `What happened`. Today's 07:45 entry fired consult_opus but didn't say so, so grep across journals undercounts dispatches. - Cite counts; never guess. Skill-usage sections come from the audit log, not memory. No "typical" / "usual" / "approximately" — cross- references PR #67's identity-level honesty rule. - Front-matter empty lists: `issues: []` / `prs: []`. Never `None` or blank — grep predicates depend on one shape. `participants: None` reserved for cron firings. - End-of-day synthesis lives in yesterday's file. Pointer to daily-maintenance §4 so the amendment pattern is visible from journal.md alone. Files touched: - src/capabilities/journal.md rewrite, 4 rules added, fluff trimmed - src/capabilities/self-maintenance.md one-line cleanup of journal § - src/runtime/orchestration.md drops legacy-grep instruction - src/runtime/config.py delete unused LEGACY_JOURNAL_PATH - src/skills/daily-maintenance/skill.md drops dead read-fallback
Three corrections, one belt-and-suspenders: 1. `_is_journal_path` helper in src/runtime/session.py. Refactors the silent-exit-gate classifier's inline `"/data/journal/"` prefix to read JOURNAL_DIR from config (so SAM_HOME overrides work in tests) and gives the rule a named, greppable home. Behavior identical given the current SAM_HOME=/data — but if Sam ever drifts toward writing journal-shaped files outside JOURNAL_DIR, this is where the defense goes. 2. Drop the `(typical usage shape)` placeholder from the §4 Skill-usage sub-section. Today's broadcast wrote "(typical usage shape: ...)" exactly as the skill instructed — but that hedged-shorthand pattern is what `src/capabilities/journal.md` and `src/identity.md` (#67) forbid. Either cite real counts from /data/tool_calls/<date>.jsonl or skip the section. 3. Replace the stale "docker compose up -d --build" rule in §5 Bucket A. Live service auto-deploys via .github/workflows/ci-deploy.yml on push to main — runtime merges go live ~10 min after merge, not on manual restart. New phrasing names the CI deploy and the capability/skill no-deploy distinction. 4. Add a "What 'consequence-first' means in a bullet" subsection with a 6-row before/after table. Catches the engineering-internal-phrasing failure mode (the one this morning's 7am post drifted into on a few bullets like "structurally enforce a Slack reply"). Existing tight- post / tone-deaf examples retained.
Merged
3 tasks
dembrane-sam-bot
approved these changes
May 25, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Two distinct things went wrong this morning, plus one stale instruction the skill was carrying around:
The 10:12–10:16 triple-post. Sam answered Sameer's multi-channel question at 10:12, then appended a session entry to the legacy
/data/journal.mdfile. That path didn't match the silent-exit gate's/data/journal/prefix check (sibling, not child), so the write was misclassified as outward-facing → gate fired a retry → retry re-posted a duplicate apology → second retry produced "something's wrong with me — need your eyes." Three messages where one was warranted.The 07:45 broadcast wrote
(typical usage shape: ...)in the Skill-usage section. Sam was following the skill correctly — the skill itself instructed the placeholder. That hedged shorthand is exactly what PR docs(identity): forbid unsourced quantitative or factual claims #67 forbade at the identity level (no unsourced quantitative claims). The skill was steering Sam into the failure.The skill's
docker compose up -d --buildrule is stale. Live service auto-deploys via.github/workflows/ci-deploy.ymlon push to main. There's no "running daemon is older than source until manual restart" anymore — runtime PRs go live ~10 min after merge.What this PR does
Bury the legacy journal path
/data/journal.mdin GCS tojournal/2026-05-11.md(out-of-band before this PR). Per-day directory is now contiguous from 2026-05-11 through 2026-05-25./data/journal.md:src/capabilities/journal.md,src/capabilities/self-maintenance.md,src/runtime/orchestration.md,src/skills/daily-maintenance/skill.md:20-21.LEGACY_JOURNAL_PATHconstant fromsrc/runtime/config.py.Add 4 journal writing rules in
src/capabilities/journal.mdworker/parallel_workers/consult_opus/ask_operator) inWhat happened. Today's 07:45 entry firedconsult_opusbut didn't mention it — sogrep consult_opus data/journal/undercounts.issues: []/prs: [], neverNoneor blank — grep predicates depend on one shape.daily-maintenance§4 so the amendment pattern is visible from journal.md alone.Fluff pass on the touched .md files
Tighten phrasing toward README voice: short sentences, active verbs, no throat-clearing.
journal.mddrops 13 lines net.Broadcast-skill accuracy + reader-first examples
docker compose up -d --buildrule with the actual CI-deploy story.(typical usage shape)placeholder. Cite real counts or skip the section.### What \"consequence-first\" means in a bulletsubsection with a 6-row before/after table. Catches the engineering-internal-phrasing failure mode the 7am post drifted into on a few bullets ("structurally enforce a Slack reply on Slack-triggered sessions" etc.).Defense-in-depth on the silent-exit gate
Refactor
src/runtime/session.py:824from inline\"/data/journal/\"prefix to_is_journal_path()helper that readsJOURNAL_DIRfrom config. Behavior identical given currentSAM_HOME=/databut the rule now has a named, greppable home and honorsSAM_HOMEoverrides correctly.Test plan
pytest tests/— 170 passed(typical usage shape)or cite real counts, (b) phrase any merged runtime PR with the CI-deploy framing, (c) not contain any reference to/data/journal.md, (d) name anyconsult_opusdispatch by tool name inWhat happened./data/journal.mdagain after this lands, the silent-exit-gate defense will still misfire — by design, since the prose now forbids the write. The right signal in that case is the gate firing once, not silently swallowing the rule break.Out of scope