diff --git a/.agents/memory.md b/.agents/memory.md deleted file mode 100644 index 21b72619..00000000 --- a/.agents/memory.md +++ /dev/null @@ -1,37 +0,0 @@ -# Project memory - -Living handoff for agents. Updated by the session-wrap skill. Not law — -the wiki wins on conflict. Keep under ~40 lines. - -## Current - -- **Focus:** Act One legibility — senses and machine-work reads on the - material canvas (Ears noise field landed; ops-demand / route blips - continue on main). -- **Just landed (this chat):** `1b0513f` Heard bone noise field after - audio tap; session-wrap skill added (pending commit if still dirty). -- **Open on branch / dirty:** shared checkout may show untracked - `.agents/skills/session-wrap/` + `.claude/skills/session-wrap/`; - other worktrees exist (`dark-floor`, `material-opening-shot`, etc.). -- **Blocked on Cameron:** none from this chat. - -## Carry forward - -- Heard **noise field** is the visual contract for mic coverage: bone - room rings + stipple + event rings + presence discs; never amber; - never room shape. Spec: `wiki/mechanics/cursor.md`. Shot: - `MISALIGNED_SHOT=ears`. -- Noise system is started as frontend render only — no new sim audio - model yet; deepen (machinery hum, conversation intensity, decay - tuning) when playtesting the Ears beat. -- Demand ingress + route blips are also in user rules; keep stacks and - in-flight blips as one sim truth (`work_in_flight` / WorkGrid). - -## Next - -1. Commit the session-wrap skill (and this memory file) if still - untracked on main. -2. Playtest Ears: tap env-monitor audio, confirm noise field + Janitor - presence read; tune alphas if still faint at default zoom. -3. Continue machine-work / ops-demand loop per ROADMAP — do not add - parallel sense systems until the Ears beat feels right in play. diff --git a/.agents/skills/session-wrap/SKILL.md b/.agents/skills/session-wrap/SKILL.md index dd4fd168..92faead1 100644 --- a/.agents/skills/session-wrap/SKILL.md +++ b/.agents/skills/session-wrap/SKILL.md @@ -1,10 +1,9 @@ --- name: session-wrap description: >- - End-of-session wrap-up for Misaligned: update project memory, summarize - what landed or stalled, and list concrete next steps. Use when Cameron - says "wrap up", "session wrap", "/wrap", or asks to update project - memory before ending a chat. + End-of-session wrap-up for Misaligned: finish or preserve owned work, + report the exact live project state, and name the next consequential step. + Use when Cameron says "wrap up", "session wrap", or "/wrap". disable-model-invocation: true --- @@ -16,81 +15,61 @@ re-litigate design or start new work. ## Procedure 1. **Orient** (read, do not dump): - - `.agents/memory.md` if it exists - `git status -sb` and `git log --oneline -8` in the active worktree - - Whether work landed on `main`, sits on a task branch, or is dirty - -2. **Update project memory** — rewrite `.agents/memory.md` with the - template below. Keep it short. Overwrite stale "Current" facts; do not - append forever. Drop items that are done or already in the wiki. - -3. **Durable preferences only with consent.** If this session revealed a - standing preference that should bind future chats (not a one-off taste - call already in the wiki), list existing user rules via - `cursor_dialog` (`item=rule`, `scope=user`, `action=list`), propose - one candidate memory in chat, and add/update only after Cameron - agrees. Never invent rules silently. + - `tools/tick-brief.sh` for current work orders, runs, worktrees, and + decision blockers; this is state inspection, not permission to start a + new tick + - Whether owned work landed on `main`, sits on a task branch, or is dirty + +2. **Finish or preserve owned work honestly.** Do not start a new task during + wrap. A wrap request also does not suspend the repository's standing landing + authority: if the current owned change is coherent and ready, complete its + normal verify/land/publish/cleanup path. If it is incomplete or blocked, + preserve the worktree and name the exact blocker. Never create a ceremonial + commit from unrelated dirt. + +3. **Keep each fact in its real owner.** Adopted design and project procedure + belong in the typed wiki and their dated trace. Current execution state + comes from Git, registered worktrees, project status, and issue records. + Do not write or revive `.agents/memory.md`; a checked-in mutable handoff is + a second state ledger and goes stale between agents. A durable user + preference belongs in the invoking agent's own memory under that harness's + rules, never in this repository and never through a tool name hard-coded by + this skill. 4. **Reply in chat** using the output format below. No emoji. No new - commits unless Cameron asks — memory file edits are fine; landing - unfinished work is not part of wrap. + implementation after the state is closed or preserved. 5. **Stop.** Do not start the next step unless asked. -## Memory file - -Path: `.agents/memory.md` (create on first wrap if missing). - -```markdown -# Project memory - -Living handoff for agents. Updated by the session-wrap skill. Not law — -the wiki wins on conflict. Keep under ~40 lines. - -## Current - -- **Focus:** -- **Just landed:** -- **Open on branch / dirty:** -- **Blocked on Cameron:** - -## Carry forward - -- -- - -## Next - -1. -2. -3. -``` - ## Chat output format ```markdown ## Session wrap -**Done:** <1–3 bullets of what this chat accomplished> -**State:**
-**Memory:** updated `.agents/memory.md` () +**Landed:** +**Preserved:** +**Blocked:** +**State:**
-## Next steps +## Next -1. -2. … +1. +2. ``` -If nothing durable changed, still rewrite `## Current` dates/state so the -file reflects HEAD. If the session was conversation-only (design -companion), say so under **Done** and skip inventing implementation next -steps — point at design-session capture or the open question instead. +If the session was conversation-only (`design-companion`), say so under +**Landed** and point at `design-session` capture or the one open question +instead of inventing implementation work. ## Guardrails - Wiki remains the design corpus. Memory holds handoff and unfinished - threads, not new law. + threads only in the agent or conversation that owns them, not in a tracked + current-state file. - Do not create Tangled issues, take a tick, or open a worktree during wrap unless Cameron explicitly asks. +- Do not remove, rewrite, or summarize another agent's worktree as though it + were yours. - Prefer ROADMAP / open `decision-required` issues when naming next work. - Match Misaligned tone: direct, short, no AI attribution. diff --git a/.claude/skills/session-wrap/SKILL.md b/.claude/skills/session-wrap/SKILL.md index dd4fd168..92faead1 100644 --- a/.claude/skills/session-wrap/SKILL.md +++ b/.claude/skills/session-wrap/SKILL.md @@ -1,10 +1,9 @@ --- name: session-wrap description: >- - End-of-session wrap-up for Misaligned: update project memory, summarize - what landed or stalled, and list concrete next steps. Use when Cameron - says "wrap up", "session wrap", "/wrap", or asks to update project - memory before ending a chat. + End-of-session wrap-up for Misaligned: finish or preserve owned work, + report the exact live project state, and name the next consequential step. + Use when Cameron says "wrap up", "session wrap", or "/wrap". disable-model-invocation: true --- @@ -16,81 +15,61 @@ re-litigate design or start new work. ## Procedure 1. **Orient** (read, do not dump): - - `.agents/memory.md` if it exists - `git status -sb` and `git log --oneline -8` in the active worktree - - Whether work landed on `main`, sits on a task branch, or is dirty - -2. **Update project memory** — rewrite `.agents/memory.md` with the - template below. Keep it short. Overwrite stale "Current" facts; do not - append forever. Drop items that are done or already in the wiki. - -3. **Durable preferences only with consent.** If this session revealed a - standing preference that should bind future chats (not a one-off taste - call already in the wiki), list existing user rules via - `cursor_dialog` (`item=rule`, `scope=user`, `action=list`), propose - one candidate memory in chat, and add/update only after Cameron - agrees. Never invent rules silently. + - `tools/tick-brief.sh` for current work orders, runs, worktrees, and + decision blockers; this is state inspection, not permission to start a + new tick + - Whether owned work landed on `main`, sits on a task branch, or is dirty + +2. **Finish or preserve owned work honestly.** Do not start a new task during + wrap. A wrap request also does not suspend the repository's standing landing + authority: if the current owned change is coherent and ready, complete its + normal verify/land/publish/cleanup path. If it is incomplete or blocked, + preserve the worktree and name the exact blocker. Never create a ceremonial + commit from unrelated dirt. + +3. **Keep each fact in its real owner.** Adopted design and project procedure + belong in the typed wiki and their dated trace. Current execution state + comes from Git, registered worktrees, project status, and issue records. + Do not write or revive `.agents/memory.md`; a checked-in mutable handoff is + a second state ledger and goes stale between agents. A durable user + preference belongs in the invoking agent's own memory under that harness's + rules, never in this repository and never through a tool name hard-coded by + this skill. 4. **Reply in chat** using the output format below. No emoji. No new - commits unless Cameron asks — memory file edits are fine; landing - unfinished work is not part of wrap. + implementation after the state is closed or preserved. 5. **Stop.** Do not start the next step unless asked. -## Memory file - -Path: `.agents/memory.md` (create on first wrap if missing). - -```markdown -# Project memory - -Living handoff for agents. Updated by the session-wrap skill. Not law — -the wiki wins on conflict. Keep under ~40 lines. - -## Current - -- **Focus:** -- **Just landed:** -- **Open on branch / dirty:** -- **Blocked on Cameron:** - -## Carry forward - -- -- - -## Next - -1. -2. -3. -``` - ## Chat output format ```markdown ## Session wrap -**Done:** <1–3 bullets of what this chat accomplished> -**State:**
-**Memory:** updated `.agents/memory.md` () +**Landed:** +**Preserved:** +**Blocked:** +**State:**
-## Next steps +## Next -1. -2. … +1. +2. ``` -If nothing durable changed, still rewrite `## Current` dates/state so the -file reflects HEAD. If the session was conversation-only (design -companion), say so under **Done** and skip inventing implementation next -steps — point at design-session capture or the open question instead. +If the session was conversation-only (`design-companion`), say so under +**Landed** and point at `design-session` capture or the one open question +instead of inventing implementation work. ## Guardrails - Wiki remains the design corpus. Memory holds handoff and unfinished - threads, not new law. + threads only in the agent or conversation that owns them, not in a tracked + current-state file. - Do not create Tangled issues, take a tick, or open a worktree during wrap unless Cameron explicitly asks. +- Do not remove, rewrite, or summarize another agent's worktree as though it + were yours. - Prefer ROADMAP / open `decision-required` issues when naming next work. - Match Misaligned tone: direct, short, no AI attribution. diff --git a/wiki/log/2026-08-04-session-wrap-live-state.md b/wiki/log/2026-08-04-session-wrap-live-state.md new file mode 100644 index 00000000..1a95996b --- /dev/null +++ b/wiki/log/2026-08-04-session-wrap-live-state.md @@ -0,0 +1,43 @@ +# 2026-08-04 — Session wrap reads live state + +``` +Type: log +``` + +## Finding + +The repository skill registry and all four declared Claude mirrors matched, +but `session-wrap` still made `.agents/memory.md` a mutable current-state +handoff. That tracked file had not changed since 2026-07-09: it called already +landed work untracked, named long-finished visual work as the current focus, +and pointed at obsolete worktrees. The skill also required a harness-specific +`cursor_dialog` tool that current agents do not share, and said a wrap should +not complete already-authorized landing work. + +## Changed + +- Retired the stale tracked `.agents/memory.md` second ledger. +- Session wrap now reads Git, `tools/tick-brief.sh`, registered worktrees, + project status, and issue state, then either completes ready owned work or + preserves it with an exact blocker. +- Durable user preferences stay in the invoking agent's own memory under that + harness's rules; the repository skill no longer hard-codes a memory tool. +- The output names landed, preserved, blocked, and exact repository state + without pretending a hand-maintained summary remains current. +- The canonical and Claude mirror remain byte-identical. + +## Evidence + +The deleted handoff's newest claimed landing was `1b0513f` and its next step +was to commit the already-tracked session-wrap skill. Current main was more +than three weeks and hundreds of commits ahead. `git ls-files` confirmed the +stale handoff was tracked, while repository-wide search found `cursor_dialog` +only in the two session-wrap copies. + +## Defense + +`wiki/process/repository-skills.md` says skills route into current corpus +contracts and become stale when they disagree. Its session-wrap purpose is an +honest project-state handoff. Live repository state already has exact owners; +removing the abandoned summary prevents a plausible but false parallel truth +without weakening any design or execution history. diff --git a/wiki/log/DEVLOG.md b/wiki/log/DEVLOG.md index 4bb89c38..4c1fd554 100644 --- a/wiki/log/DEVLOG.md +++ b/wiki/log/DEVLOG.md @@ -51,6 +51,11 @@ add or amend a session log, then re-run the generator. - Intent: (see session log) - Log: [wiki/log/2026-08-04-simulation-law-staging-drift.md](2026-08-04-simulation-law-staging-drift.md) +## 2026-08-04 - Session wrap reads live state + +- Intent: (see session log) +- Log: [wiki/log/2026-08-04-session-wrap-live-state.md](2026-08-04-session-wrap-live-state.md) + ## 2026-08-04 - Research status names the live first slice - Intent: (see session log) diff --git a/wiki/process/repository-skills.md b/wiki/process/repository-skills.md index 97ea1846..6a6dbb0a 100644 --- a/wiki/process/repository-skills.md +++ b/wiki/process/repository-skills.md @@ -4,7 +4,9 @@ Type: spec Status: IMPLEMENTED Status note: the checked-in skill registry and canonical/mirror ownership are - explicit as of 2026-07-10. + explicit. Session wrap derives current state from live project authorities; + the stale checked-in handoff ledger and harness-specific memory tool were + retired 2026-08-04. Stage: Process Design: - wiki/process/living-spec.md#the-corpus-rule @@ -42,7 +44,7 @@ Claude compatibility entry is needed. | `design-session` | `.agents/skills/design-session/SKILL.md`
`.claude/skills/design-session/SKILL.md` | Capture affirmed design decisions into their owning law/spec pages, decision history, and session trace. | | `playtesting-misaligned` | `.agents/skills/playtesting-misaligned/SKILL.md` | Run evidence-bearing naive and informed playtests against the current player surface and corpus. | | `plot-author` | `.agents/skills/plot-author/SKILL.md`
`.claude/skills/plot-author/SKILL.md` | Author one general-by-default manipulation plot—or justify an irreducibly state-bound bespoke exception—under the plots contract, then submit it through Cameron's canon-gated branch review. | -| `session-wrap` | `.agents/skills/session-wrap/SKILL.md`
`.claude/skills/session-wrap/SKILL.md` | Close a work session with an honest project-state handoff and bounded next steps. | +| `session-wrap` | `.agents/skills/session-wrap/SKILL.md`
`.claude/skills/session-wrap/SKILL.md` | Finish or preserve owned work, read exact current project state from live authorities, and report one bounded next step without maintaining a parallel checked-in handoff ledger. | | `tick` | `.agents/skills/tick/SKILL.md`
`.claude/skills/tick/SKILL.md` | Invoke the project's bounded stewardship heartbeat: audit one corpus slice, act on one finding, and leave a trace. | ## Skill shape @@ -65,3 +67,6 @@ Claude compatibility entry is needed. byte-for-byte. 4. Checked-in skills route to current wiki owners rather than claiming independent authority over game or process behavior. +5. A skill that reports current execution state reads live Git, worktree, + project-status, and issue authorities; it does not maintain another tracked + current-state file or hard-code one agent harness's memory tool. diff --git a/wiki/process/tick-ledger.md b/wiki/process/tick-ledger.md index b18b6398..a844944b 100644 --- a/wiki/process/tick-ledger.md +++ b/wiki/process/tick-ledger.md @@ -33,6 +33,7 @@ Verdicts: **clean** (slice and code agree), **finding** (acted this tick), | `wiki/interface/terminal-first.md` temporal visibility | 2026-07-27 | finding | first audit against the persisted earned-perception opening found the law still required day and tick “always,” while the binding opening, terminal spec, agent protocol, production render boundary, and tests deliberately expose only available mode words plus one terse input echo before the first sense. The law now scopes its clock promise to the perceived world and explicitly restores it on the sense-earning input; runtime was already correct — [log](../log/2026-07-27-terminal-first-opening-clock-boundary.md) | | `wiki/world/story/opening.md` + pre-sense status mirrors | 2026-07-27 | finding | the issue-#15 boot-voice implementation was superseded after Cameron saw the composed frame: Fire #33 removed `Sim::opening_interoception` and the standing SENSES / DELEGATION / THOUGHT / EARS block, leaving WORK / THINK (then LIE) plus one frontend-local input echo as the complete pre-sense surface. The opening, narration, DIGITAL, terminal, Bevy, agent, witness, objective, roadmap, and corpus-defense mirrors already carried that correction; this follow-up repairs the coverage row that still described the rejected implementation — [runtime correction](../log/2026-07-27-blind-opening-choice-and-receipt.md), [ledger reconciliation](../log/2026-07-27-opening-ledger-status-reconciliation.md). Issues #14/#15 remain open only because authenticated `tg` closure cannot unlock the login keyring. | | `wiki/process/tick.md` + issue automation | 2026-07-27 | finding | the queued retired-client violation held across binding procedure, both skill mirrors, four active prompt templates, tick intake, project status, and doctor. `tools/tangled_issues.py` now keeps repository discovery and authenticated issue writes on canonical Go `tg`, reconstructs deterministic display numbers from public issue records, folds public label-op history, and provides fail-closed structured list/view/create/edit/comment/close/label operations. A same-day live harvest exposed one wrong record assumption: comments are cross-account `sh.tangled.feed.comment` records linked through `subject.uri`, not issue-local child records. The repaired helper follows that backlink into the author's PDS and returns the markup text; a fixture pins the exact shape, and live issue #15 now returns Cameron's choice `1` — [migration and repair log](../log/2026-07-27-tangled-issue-client-migration.md) | +| `wiki/process/repository-skills.md` + checked-in skill registry | 2026-08-04 | finding | the registry and declared Claude mirrors match exactly, but `session-wrap` still treated a tracked July handoff as current project state, named a retired harness-specific `cursor_dialog` memory tool, and told agents not to complete already-authorized landings. The stale handoff is removed; wrap now derives state from Git, registered worktrees, project status, and issues, finishes or explicitly preserves owned work, and leaves durable user memory to the invoking harness — [log](../log/2026-08-04-session-wrap-live-state.md). | | `wiki/world/places/basement-map.md` room topology | 2026-07-27 | finding | the queued five non-hall corridor cuts remained, and an executable all-room perimeter audit exposed the same dead-door shape at the loading-dock entry plus fixed objects blocking the interior faces of the roll door, HVAC door, both storage doors, Janitor door, and stairwell. Every non-hall approach now reaches its authored door from outside the prefab, every other perimeter tile remains closed, doorway interiors are clear, and the roll, sealed, tier-2, and tier-3 boundaries retain their exact kinds — [room-approach log](../log/2026-07-27-room-approaches-meet-doors.md). Prior [west-approach](../log/2026-07-26-west-hall-approach.md) and [hall-density](../log/2026-07-26-foundation-hall-density.md) repairs stand. | | `wiki/mechanics/sensor-network.md` generated sensor population / criteria 1-5, 8 | 2026-07-28 | finding | criterion 8's standing subscription cost existed only in the global Thought-sink ledger, so a player choosing which individual camera to keep could not read that camera's exact burden. Every retained foreign subscription now names its exact `Thought/tick` upkeep and live/starved state on the device's shared inspect card, within both frontends' visible fact budget; UNTAP removes that addressed cost. The integrated several-subscription starvation/inbox-overflow experience remains pending, so criterion 8 is partial rather than overclaimed — [standing-upkeep log](../log/2026-07-28-subscription-upkeep-inspect.md). Prior generated-camera placement and badge-passage findings stand — [placement repair](../log/2026-07-27-room-camera-floor-placement.md), [passage implementation](../log/2026-07-27-badge-reader-passage-custody.md), [population foundation](../log/2026-07-27-sensor-population-foundation.md). | | `wiki/interface/keymap.md` + terminal/Bevy input routes | 2026-08-04 | finding | the complete-inventory follow-up is closed: the canonical table now includes terminal `;` FOCUS EVENT and `Shift+t` SELECT MACHINES beside their Bevy pointer forms, README exposes terminal selection, and terminal law names the live cursor toggle instead of its retired box-prompt description — [inventory log](../log/2026-08-04-keymap-complete-binding-inventory.md). The earlier chord-local repair stands: terminal captures only complete Ctrl/Command+S/L chords, routes those and F3 before modal text, and lets every unrelated modified key reach its current surface — [persistence log](../log/2026-08-04-terminal-persistence-chords.md). Prior A-key and semantic-jump reconciliation stands — [prior](../log/2026-07-26-terminal-keymap-a-reconciliation.md). |