mercury-agent 0.23.2 → 0.24.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/container/Dockerfile +1 -1
- package/container/Dockerfile.base +1 -1
- package/container/agent-package.json +1 -1
- package/docs/configuration.md +60 -0
- package/docs/container-lifecycle.md +27 -15
- package/docs/extensions.md +36 -0
- package/docs/goals/rehearsal-bench/roadmap.md +1 -1
- package/docs/goals/release-gate/roadmap.md +8 -8
- package/docs/goals/whatsapp-bot-hardening/open-threads.md +18 -0
- package/docs/goals/whatsapp-bot-hardening/roadmap.md +1 -1
- package/docs/graceful-shutdown.md +21 -5
- package/docs/pending-verification.md +195 -4
- package/docs/plans/{bugs-0915 → archive/2026-09-15-bugs-0915}/decisions.md +1 -0
- package/docs/plans/{bugs-0915 → archive/2026-09-15-bugs-0915}/plan.md +2 -2
- package/docs/plans/archive/2026-09-15-bugs-0915/sessions/S1.md +56 -0
- package/docs/plans/archive/2026-09-15-bugs-0915/sessions/S2.md +51 -0
- package/docs/plans/archive/2026-09-15-bugs-0915/sessions/S3.md +60 -0
- package/docs/plans/archive/2026-09-15-bugs-0915/sessions/S4.md +46 -0
- package/docs/plans/archive/2026-09-22-p0-bugs-0922/briefs/S1.md +60 -0
- package/docs/plans/archive/2026-09-22-p0-bugs-0922/briefs/S2.md +60 -0
- package/docs/plans/archive/2026-09-22-p0-bugs-0922/briefs/S3.md +58 -0
- package/docs/plans/archive/2026-09-22-p0-bugs-0922/briefs/S4.md +58 -0
- package/docs/plans/archive/2026-09-22-p0-bugs-0922/decisions.md +8 -0
- package/docs/plans/archive/2026-09-22-p0-bugs-0922/plan.md +102 -0
- package/docs/plans/archive/2026-09-22-p0-bugs-0922/sessions/S1.md +29 -0
- package/docs/plans/archive/2026-09-22-p0-bugs-0922/sessions/S2.md +29 -0
- package/docs/plans/archive/2026-09-22-p0-bugs-0922/sessions/S3.md +30 -0
- package/docs/plans/archive/2026-09-22-p0-bugs-0922/sessions/S4.md +32 -0
- package/docs/plans/bench-patterns-0915/briefs/S10.md +72 -0
- package/docs/plans/bench-patterns-0915/briefs/S11.md +95 -0
- package/docs/plans/bench-patterns-0915/briefs/S12.md +87 -0
- package/docs/plans/bench-patterns-0915/briefs/S9.md +81 -0
- package/docs/plans/bench-patterns-0915/decisions.md +7 -1
- package/docs/plans/bench-patterns-0915/plan.md +92 -8
- package/docs/plans/bench-patterns-0915/sessions/S10.md +40 -0
- package/docs/plans/bench-patterns-0915/sessions/S11.md +53 -0
- package/docs/plans/bench-patterns-0915/sessions/S12.md +44 -0
- package/docs/plans/bench-patterns-0915/sessions/S4.md +29 -0
- package/docs/plans/bench-patterns-0915/sessions/S5.md +30 -0
- package/docs/plans/bench-patterns-0915/sessions/S6.md +46 -0
- package/docs/plans/bench-patterns-0915/sessions/S7.md +30 -0
- package/docs/plans/bench-patterns-0915/sessions/S8.md +30 -0
- package/docs/plans/bench-patterns-0915/sessions/S9.md +2 -0
- package/docs/plans/flat-0916/briefs/S1.md +55 -0
- package/docs/plans/flat-0916/briefs/S2.md +55 -0
- package/docs/plans/flat-0916/decisions.md +8 -0
- package/docs/plans/flat-0916/plan.md +88 -0
- package/docs/plans/p0-plan-0922/briefs/S1.md +60 -0
- package/docs/plans/p0-plan-0922/briefs/S2.md +54 -0
- package/docs/plans/p0-plan-0922/briefs/S3.md +58 -0
- package/docs/plans/p0-plan-0922/briefs/S4.md +54 -0
- package/docs/plans/p0-plan-0922/briefs/S5.md +79 -0
- package/docs/plans/p0-plan-0922/briefs/S6.md +77 -0
- package/docs/plans/p0-plan-0922/briefs/S7.md +79 -0
- package/docs/plans/p0-plan-0922/briefs/S8.md +69 -0
- package/docs/plans/p0-plan-0922/decisions.md +9 -0
- package/docs/plans/p0-plan-0922/plan.md +215 -0
- package/docs/plans/p0-plan-0922/sessions/S1.md +22 -0
- package/docs/plans/p0-plan-0922/sessions/S2.md +22 -0
- package/docs/plans/p0-plan-0922/sessions/S3.md +22 -0
- package/docs/plans/p0-plan-0922/sessions/S4.md +22 -0
- package/docs/plans/p0-plan-0922/sessions/S5.md +44 -0
- package/docs/plans/p0-plan-0922/sessions/S6.md +60 -0
- package/docs/plans/p0-plan-0922/sessions/S7.md +69 -0
- package/docs/plans/sensitive-bugs-0922/briefs/S1.md +63 -0
- package/docs/plans/sensitive-bugs-0922/briefs/S2.md +62 -0
- package/docs/plans/sensitive-bugs-0922/briefs/S3.md +61 -0
- package/docs/plans/sensitive-bugs-0922/briefs/S4.md +61 -0
- package/docs/plans/sensitive-bugs-0922/briefs/S5.md +62 -0
- package/docs/plans/sensitive-bugs-0922/decisions.md +9 -0
- package/docs/plans/sensitive-bugs-0922/plan.md +147 -0
- package/docs/release-gate.md +1 -1
- package/docs/smoke-fixtures.md +9 -0
- package/examples/extensions/feed-watch/fixtures.ts +210 -0
- package/examples/extensions/feed-watch/index.ts +140 -9
- package/examples/extensions/office-365-mail/README.md +132 -0
- package/examples/extensions/office-365-mail/index.ts +170 -0
- package/examples/extensions/office-365-mail/lib/graph.ts +1031 -0
- package/examples/extensions/office-365-mail/scripts/login.ts +252 -0
- package/examples/extensions/office-365-mail/skill/SKILL.md +94 -0
- package/examples/profiles/football-reporter/AGENTS.md +15 -2
- package/examples/profiles/football-reporter/config.yaml +5 -1
- package/examples/profiles/tel-aviv-flat-search/AGENTS.md +5 -1
- package/package.json +16 -12
- package/resources/pi-extensions/subagent/index.ts +38 -42
- package/resources/pi-extensions/subagent/outcome.ts +28 -0
- package/src/adapters/whatsapp-thread.ts +12 -0
- package/src/agent/container-entry.ts +40 -7
- package/src/agent/container-env.ts +26 -0
- package/src/agent/container-error.ts +28 -0
- package/src/agent/container-runner.ts +50 -14
- package/src/audit/ledger-queries.ts +35 -3
- package/src/bridges/slack.ts +4 -1
- package/src/bridges/teams.ts +55 -15
- package/src/bridges/telegram.ts +3 -1
- package/src/cli/mercury.ts +46 -0
- package/src/cli/mrctl-http.ts +25 -0
- package/src/cli/mrctl.ts +13 -14
- package/src/config.ts +70 -34
- package/src/core/api.ts +51 -29
- package/src/core/boot-reconcile.ts +168 -0
- package/src/core/chat-run-journal.ts +383 -0
- package/src/core/debounce.ts +97 -1
- package/src/core/handler.ts +292 -44
- package/src/core/instance-lock.ts +159 -0
- package/src/core/operator-alerts.ts +80 -10
- package/src/core/pending-ingress.ts +298 -0
- package/src/core/routes/dashboard.ts +28 -6
- package/src/core/routes/media.ts +22 -0
- package/src/core/routes/shadow.ts +28 -3
- package/src/core/runtime.ts +139 -4
- package/src/core/simulate-ingress.ts +5 -2
- package/src/core/space-queue.ts +38 -9
- package/src/core/storage-cleanup.ts +16 -8
- package/src/core/system-messages.ts +50 -0
- package/src/core/task-scheduler.ts +150 -14
- package/src/dashboard/index.html +2 -0
- package/src/main.ts +121 -2
- package/src/ops/shadow-service.ts +113 -1
- package/src/ops/shadow-snapshot.ts +126 -0
- package/src/preflight/checks/roundtrip.ts +50 -39
- package/src/smoke/cli.ts +24 -4
- package/src/storage/db.ts +621 -90
- package/src/types.ts +20 -3
- /package/docs/plans/{bugs-0915 → archive/2026-09-15-bugs-0915}/briefs/S1.md +0 -0
- /package/docs/plans/{bugs-0915 → archive/2026-09-15-bugs-0915}/briefs/S2.md +0 -0
- /package/docs/plans/{bugs-0915 → archive/2026-09-15-bugs-0915}/briefs/S3.md +0 -0
- /package/docs/plans/{bugs-0915 → archive/2026-09-15-bugs-0915}/briefs/S4.md +0 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Brief S2 — the system prompt advertises a URL-capable read the image lacks
|
|
2
|
+
|
|
3
|
+
**Plan**: docs/plans/p0-bugs-0922/plan.md **Session**: S2 **Round**: 1 **Kind**: bug
|
|
4
|
+
**Item slug**: system-prompt-advertises-url-capable-read-the-image-lacks
|
|
5
|
+
|
|
6
|
+
> The only file this session reads from the plan. Self-contained: it never points at a sibling's brief. The `**Item slug**:` line is the key the execution commands grep for to detect that a brief is active — keep it exactly in that shape.
|
|
7
|
+
|
|
8
|
+
## Launch
|
|
9
|
+
|
|
10
|
+
/f-ops-plan work p0-bugs-0922 S2
|
|
11
|
+
|
|
12
|
+
## Run
|
|
13
|
+
|
|
14
|
+
/f-bug-fix system-prompt-advertises-url-capable-read-the-image-lacks
|
|
15
|
+
|
|
16
|
+
## Scope notes
|
|
17
|
+
|
|
18
|
+
Cheapest correct fix: make the `read` line in `buildSystemPrompt`'s tools list say files only, and name the real way to fetch URLs (`curl` via bash, or pinchtab). **The bug's durable half is a test** that compares the snippet against the `description` of the `read` tool actually installed from the pinned `@earendil-works/pi-coding-agent`. Without it the snippet drifts again. Remember the whole-prompt-ownership gotcha (`--system-prompt`, never `--append-system-prompt`): edit the snippet text, not how the prompt is assembled. **Deploy needs: rebuild.** `container-entry.ts` is baked (`container/build.sh`, then restart; verify by grepping the image, never the repo). S3 in this plan also needs a rebuild, so one rebuild covers both.
|
|
19
|
+
|
|
20
|
+
## Owned surfaces (predicted)
|
|
21
|
+
|
|
22
|
+
- src/agent/container-entry.ts
|
|
23
|
+
- container/agent-package.json
|
|
24
|
+
|
|
25
|
+
## Do not touch
|
|
26
|
+
|
|
27
|
+
- src/core/storage-cleanup.ts, src/storage/db.ts, src/core/reply-context.ts (owned by S1 this plan)
|
|
28
|
+
- resources/pi-extensions/subagent/index.ts (owned by S3 this plan)
|
|
29
|
+
- src/config.ts (owned by S4 this plan)
|
|
30
|
+
- Not ours (avishai tsabari / Avishai-Tsabari, last 14 d): `src/agent/container-entry.ts`, `src/config.ts`, `src/storage/db.ts`, `container/agent-package.json` — see plan.md "Not ours"; lane cleared only by the Q1/Q2 answers. Re-check with `/f-ops-plan next p0-bugs-0922`.
|
|
31
|
+
|
|
32
|
+
## Edges
|
|
33
|
+
|
|
34
|
+
- start-after: none (satisfied — `next` launched you)
|
|
35
|
+
- merge-after: none
|
|
36
|
+
|
|
37
|
+
## Overlap verdicts
|
|
38
|
+
|
|
39
|
+
none
|
|
40
|
+
|
|
41
|
+
> The command's preflight overlap check treats a hit whose branch AND every shared file match a verdict line as answered (c), prints one `PLAN-PASSED(overlap): …` line, and carries it into the final report. Any other hit prompts as usual. The merge-time check is never waived.
|
|
42
|
+
|
|
43
|
+
## Decisions answered
|
|
44
|
+
|
|
45
|
+
- Q1: ours (owner, 2026-09-22) — `src/agent/container-entry.ts`, `src/config.ts`, `src/storage/db.ts` are this plan's lane.
|
|
46
|
+
- Q2: ours (owner, 2026-09-22) — `container/agent-package.json` may be edited if the fix needs it.
|
|
47
|
+
|
|
48
|
+
## Ledger rules
|
|
49
|
+
|
|
50
|
+
- `docs/ROADMAP.md`: never edit. Your command writes `docs/pending-updates/system-prompt-advertises-url-capable-read-the-image-lacks.md` as usual.
|
|
51
|
+
- `docs/pending-verification.md`: append only under `## Plan p0-bugs-0922 / S2`.
|
|
52
|
+
- Any goal's `decisions.md`: never edit; put decisions in your log's "Siblings must know".
|
|
53
|
+
|
|
54
|
+
## Environment
|
|
55
|
+
|
|
56
|
+
- Read `CLAUDE.md` → Worktree Setup and Gotchas before opening the worktree. Nothing from them is copied here. `bun install` once in the fresh worktree; the check gate is `bun run check` (every link runs to completion — read every line).
|
|
57
|
+
|
|
58
|
+
## Report
|
|
59
|
+
|
|
60
|
+
Your command's final report is appended to `docs/plans/p0-bugs-0922/sessions/S2.md` by its report step (path resolved through `.claude/scripts/resolve-docs-root.sh docs/plans/probe.md`). `work` verifies the append.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Brief S3 — subagent parallel mode reports API errors as completed
|
|
2
|
+
|
|
3
|
+
**Plan**: docs/plans/p0-bugs-0922/plan.md **Session**: S3 **Round**: 1 **Kind**: bug
|
|
4
|
+
**Item slug**: subagent-parallel-mode-reports-api-errors-as-completed
|
|
5
|
+
|
|
6
|
+
> The only file this session reads from the plan. Self-contained: it never points at a sibling's brief. The `**Item slug**:` line is the key the execution commands grep for to detect that a brief is active — keep it exactly in that shape.
|
|
7
|
+
|
|
8
|
+
## Launch
|
|
9
|
+
|
|
10
|
+
/f-ops-plan work p0-bugs-0922 S3
|
|
11
|
+
|
|
12
|
+
## Run
|
|
13
|
+
|
|
14
|
+
/f-bug-fix subagent-parallel-mode-reports-api-errors-as-completed
|
|
15
|
+
|
|
16
|
+
## Scope notes
|
|
17
|
+
|
|
18
|
+
One shared `isSubagentError(result)` predicate (`exitCode !== 0 || stopReason === "error" || stopReason === "aborted"`), used by chain, single and parallel, for both the behaviour (`successCount`, the `completed`/`failed` label) and the display (collapsed counters, ✓/✗ icon). **Re-read the line numbers.** The doc's references date from 2026-09-07 at `c7d0f30`. The checklist item "`resources/` inside typecheck + lint" may already be done (`gates-do-not-cover-resources-pi-extensions` was implemented 2026-09-07). Verify that it is and tick it; do not redo it. Test: `exitCode: 0, stopReason: "error"` counts as a failure in all three modes. Negative-test by reverting one call site and confirming that mode goes red. **Deploy needs: rebuild.** `resources/` is baked into the image. Verify inside the image, never the repo.
|
|
19
|
+
|
|
20
|
+
## Owned surfaces (predicted)
|
|
21
|
+
|
|
22
|
+
- resources/pi-extensions/subagent/index.ts
|
|
23
|
+
|
|
24
|
+
## Do not touch
|
|
25
|
+
|
|
26
|
+
- src/core/storage-cleanup.ts, src/storage/db.ts, src/core/reply-context.ts (owned by S1 this plan)
|
|
27
|
+
- src/agent/container-entry.ts, container/agent-package.json (owned by S2 this plan)
|
|
28
|
+
- src/config.ts (owned by S4 this plan)
|
|
29
|
+
- Not ours (avishai tsabari / Avishai-Tsabari, last 14 d): `src/agent/container-entry.ts`, `src/config.ts`, `src/storage/db.ts`, `container/agent-package.json` — see plan.md "Not ours"; lane cleared only by the Q1/Q2 answers. Re-check with `/f-ops-plan next p0-bugs-0922`.
|
|
30
|
+
|
|
31
|
+
## Edges
|
|
32
|
+
|
|
33
|
+
- start-after: none (satisfied — `next` launched you)
|
|
34
|
+
- merge-after: none
|
|
35
|
+
|
|
36
|
+
## Overlap verdicts
|
|
37
|
+
|
|
38
|
+
none
|
|
39
|
+
|
|
40
|
+
> The command's preflight overlap check treats a hit whose branch AND every shared file match a verdict line as answered (c), prints one `PLAN-PASSED(overlap): …` line, and carries it into the final report. Any other hit prompts as usual. The merge-time check is never waived.
|
|
41
|
+
|
|
42
|
+
## Decisions answered
|
|
43
|
+
|
|
44
|
+
- none
|
|
45
|
+
|
|
46
|
+
## Ledger rules
|
|
47
|
+
|
|
48
|
+
- `docs/ROADMAP.md`: never edit. Your command writes `docs/pending-updates/subagent-parallel-mode-reports-api-errors-as-completed.md` as usual.
|
|
49
|
+
- `docs/pending-verification.md`: append only under `## Plan p0-bugs-0922 / S3`.
|
|
50
|
+
- Any goal's `decisions.md`: never edit; put decisions in your log's "Siblings must know".
|
|
51
|
+
|
|
52
|
+
## Environment
|
|
53
|
+
|
|
54
|
+
- Read `CLAUDE.md` → Worktree Setup and Gotchas before opening the worktree. Nothing from them is copied here. `bun install` once in the fresh worktree; the check gate is `bun run check` (every link runs to completion — read every line).
|
|
55
|
+
|
|
56
|
+
## Report
|
|
57
|
+
|
|
58
|
+
Your command's final report is appended to `docs/plans/p0-bugs-0922/sessions/S3.md` by its report step (path resolved through `.claude/scripts/resolve-docs-root.sh docs/plans/probe.md`). `work` verifies the append.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Brief S4 — four boolean env keys turn off on a blank line
|
|
2
|
+
|
|
3
|
+
**Plan**: docs/plans/p0-bugs-0922/plan.md **Session**: S4 **Round**: 1 **Kind**: bug
|
|
4
|
+
**Item slug**: four-boolean-env-keys-turn-off-on-a-blank-line
|
|
5
|
+
|
|
6
|
+
> The only file this session reads from the plan. Self-contained: it never points at a sibling's brief. The `**Item slug**:` line is the key the execution commands grep for to detect that a brief is active — keep it exactly in that shape.
|
|
7
|
+
|
|
8
|
+
## Launch
|
|
9
|
+
|
|
10
|
+
/f-ops-plan work p0-bugs-0922 S4
|
|
11
|
+
|
|
12
|
+
## Run
|
|
13
|
+
|
|
14
|
+
/f-bug-fix four-boolean-env-keys-turn-off-on-a-blank-line
|
|
15
|
+
|
|
16
|
+
## Scope notes
|
|
17
|
+
|
|
18
|
+
The four keys: `telegramFormatEnabled`, `mediaEnabled`, `taskNotifyOnFailure` and `alertsEnabled`, all `booleanFromEnv.default(true)`. Reuse the strict parser `b6ecf07` added for `override_pi_system_prompt`: blank means unset, so YAML or the default applies; `true`/`false`/`1`/`0` (case-insensitive) is the value; anything else is a named startup error. Do **not** change the shared `booleanFromEnv` for its `default(false)` users; that is out of scope. Tests go in `tests/config.test.ts`: one table over 4 keys × {absent, blank, true, false, typo}. Negative-test by reverting one key to the lenient parser and confirming its row goes red. **Before landing**, check that no live `.env` on the box holds a typo'd value for these keys (key names only, never read values). The startup error would stop the service. **Deploy needs:** restart only.
|
|
19
|
+
|
|
20
|
+
## Owned surfaces (predicted)
|
|
21
|
+
|
|
22
|
+
- src/config.ts (user-supplied, 2026-09-22)
|
|
23
|
+
|
|
24
|
+
## Do not touch
|
|
25
|
+
|
|
26
|
+
- src/core/storage-cleanup.ts, src/storage/db.ts, src/core/reply-context.ts (owned by S1 this plan)
|
|
27
|
+
- src/agent/container-entry.ts, container/agent-package.json (owned by S2 this plan)
|
|
28
|
+
- resources/pi-extensions/subagent/index.ts (owned by S3 this plan)
|
|
29
|
+
- Not ours (avishai tsabari / Avishai-Tsabari, last 14 d): `src/agent/container-entry.ts`, `src/config.ts`, `src/storage/db.ts`, `container/agent-package.json` — see plan.md "Not ours"; lane cleared only by the Q1/Q2 answers. Re-check with `/f-ops-plan next p0-bugs-0922`.
|
|
30
|
+
|
|
31
|
+
## Edges
|
|
32
|
+
|
|
33
|
+
- start-after: none (satisfied — `next` launched you)
|
|
34
|
+
- merge-after: none
|
|
35
|
+
|
|
36
|
+
## Overlap verdicts
|
|
37
|
+
|
|
38
|
+
none
|
|
39
|
+
|
|
40
|
+
> The command's preflight overlap check treats a hit whose branch AND every shared file match a verdict line as answered (c), prints one `PLAN-PASSED(overlap): …` line, and carries it into the final report. Any other hit prompts as usual. The merge-time check is never waived.
|
|
41
|
+
|
|
42
|
+
## Decisions answered
|
|
43
|
+
|
|
44
|
+
- Q1: ours (owner, 2026-09-22) — `src/agent/container-entry.ts`, `src/config.ts`, `src/storage/db.ts` are this plan's lane.
|
|
45
|
+
|
|
46
|
+
## Ledger rules
|
|
47
|
+
|
|
48
|
+
- `docs/ROADMAP.md`: never edit. Your command writes `docs/pending-updates/four-boolean-env-keys-turn-off-on-a-blank-line.md` as usual.
|
|
49
|
+
- `docs/pending-verification.md`: append only under `## Plan p0-bugs-0922 / S4`.
|
|
50
|
+
- Any goal's `decisions.md`: never edit; put decisions in your log's "Siblings must know".
|
|
51
|
+
|
|
52
|
+
## Environment
|
|
53
|
+
|
|
54
|
+
- Read `CLAUDE.md` → Worktree Setup and Gotchas before opening the worktree. Nothing from them is copied here. `bun install` once in the fresh worktree; the check gate is `bun run check` (every link runs to completion — read every line).
|
|
55
|
+
|
|
56
|
+
## Report
|
|
57
|
+
|
|
58
|
+
Your command's final report is appended to `docs/plans/p0-bugs-0922/sessions/S4.md` by its report step (path resolved through `.claude/scripts/resolve-docs-root.sh docs/plans/probe.md`). `work` verifies the append.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Decisions — plan p0-bugs-0922
|
|
2
|
+
|
|
3
|
+
> Answer in the `Answer` column. Everything blocked on a question stays blocked until this column is non-empty for it. `build` and `next` add rows; only you write answers. Delete nothing — an answered row is the audit trail.
|
|
4
|
+
|
|
5
|
+
| ID | Blocks | Question | Options | Answer | Answered |
|
|
6
|
+
|----|--------|----------|---------|--------|----------|
|
|
7
|
+
| Q1 | S1, S2, S4 | Lane: does avishai tsabari own `src/` (3 files in 14d: `src/agent/container-entry.ts`, `src/config.ts`, `src/storage/db.ts`; last touch 2026-09-13)? | ours / theirs / split: … | ours — owner, relayed in session | 2026-09-22 |
|
|
8
|
+
| Q2 | S2 | Lane: does Avishai-Tsabari own `container/agent-package.json` (1 file in 14d: PR #100, pi 0.85.1 bump, 2026-09-13)? S2's cheap fix edits only the prompt snippet. It touches this file only if it switches to a pi build whose `read` handles URLs. | ours / theirs / split: … | ours — owner, relayed in session | 2026-09-22 |
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Plan: p0-bugs-0922
|
|
2
|
+
|
|
3
|
+
**Status**: Archived
|
|
4
|
+
**Created**: 2026-09-22 **Last updated**: 2026-09-22
|
|
5
|
+
**Landing mode**: pr
|
|
6
|
+
**Max width**: 4
|
|
7
|
+
**Inputs**: p0-bugs-0922 storage-cleanup-nulls-every-attachment-row-in-the-space system-prompt-advertises-url-capable-read-the-image-lacks subagent-parallel-mode-reports-api-errors-as-completed four-boolean-env-keys-turn-off-on-a-blank-line (from docs/notes/2026-09-22-open-items-priority-scan.md P0 #1, #3, #7)
|
|
8
|
+
**Me**: saharw01, Saharw01@gmail.com (also 92163791+saharw01@users.noreply.github.com, avishailevi2@gmail.com)
|
|
9
|
+
|
|
10
|
+
> Written by `/f-ops-plan` build (and `--rebuild`) and `archive` only. Nothing perishable lives here — no base sha, no other author's file list, no story counts; `next` measures those every time it runs. `plan-state.sh` parses the tables below by their header row, so keep the column order.
|
|
11
|
+
|
|
12
|
+
> **Why this batch.** The bug half of the 2026-09-22 open-items scan's suggested round (P0 #1–3, #5–7). The ideas in that set (#2, #6, and #5's opt-out) are the sibling plan `p0-plan-0922`: this plan was split out on the owner's call (2026-09-22) so that four small fixes do not wait for their Round 0 planning sessions, the same split `bench-patterns-0915` / `bugs-0915` made. **Deploy:** S2 and S3 change baked files (`src/agent/container-entry.ts`, `resources/`), so the image needs one rebuild for both. S1 and S4 need only a restart.
|
|
13
|
+
|
|
14
|
+
## Items
|
|
15
|
+
|
|
16
|
+
| ID | Kind | Slug | Doc | Command | Round | Needs |
|
|
17
|
+
|----|------|------|-----|---------|-------|-------|
|
|
18
|
+
| S1 | bug | storage-cleanup-nulls-every-attachment-row-in-the-space | docs/bugs/storage-cleanup-nulls-every-attachment-row-in-the-space.md | /f-bug-fix storage-cleanup-nulls-every-attachment-row-in-the-space | 1 | Q1 |
|
|
19
|
+
| S2 | bug | system-prompt-advertises-url-capable-read-the-image-lacks | docs/bugs/system-prompt-advertises-url-capable-read-the-image-lacks.md | /f-bug-fix system-prompt-advertises-url-capable-read-the-image-lacks | 1 | Q1, Q2 |
|
|
20
|
+
| S3 | bug | subagent-parallel-mode-reports-api-errors-as-completed | docs/bugs/subagent-parallel-mode-reports-api-errors-as-completed.md | /f-bug-fix subagent-parallel-mode-reports-api-errors-as-completed | 1 | — |
|
|
21
|
+
| S4 | bug | four-boolean-env-keys-turn-off-on-a-blank-line | docs/bugs/four-boolean-env-keys-turn-off-on-a-blank-line.md | /f-bug-fix four-boolean-env-keys-turn-off-on-a-blank-line | 1 | Q1 |
|
|
22
|
+
|
|
23
|
+
> Kind ∈ `feature` | `bug` | `refactor` | `plan` (a Round 0 planning session) | `story` (from `--goal`; runs `/f-feature-dev`).
|
|
24
|
+
> Needs = decision IDs from `decisions.md` that must be answered before this session may launch, or `—`.
|
|
25
|
+
> IDs are never renumbered; `--drop` moves a row to Deferred, `--add` takes the next unused ID.
|
|
26
|
+
|
|
27
|
+
## Edges
|
|
28
|
+
|
|
29
|
+
| From | To | Kind | Basis |
|
|
30
|
+
|------|----|------|-------|
|
|
31
|
+
|
|
32
|
+
> None. No file is predicted by two sessions, the owner named no semantic dependency among these four (2026-09-22), and no other active plan's unlanded session predicts any of these files. The other active plans (`bench-patterns-0915`, `flat-0916`, `p0-plan-0922`) hold only planning sessions, and those have no surfaces.
|
|
33
|
+
|
|
34
|
+
## Rounds
|
|
35
|
+
|
|
36
|
+
### Round 0 — unblock
|
|
37
|
+
|
|
38
|
+
| Session | Action | Clears |
|
|
39
|
+
|---------|--------|--------|
|
|
40
|
+
| — | owner answers decisions.md Q1–Q2 (lane questions) | S1, S2, S4 |
|
|
41
|
+
|
|
42
|
+
### Round 1
|
|
43
|
+
|
|
44
|
+
| Session | Item | Predicted surfaces (count) |
|
|
45
|
+
|---------|------|----------------------------|
|
|
46
|
+
| S1 | storage-cleanup-nulls-every-attachment-row-in-the-space | 3 |
|
|
47
|
+
| S2 | system-prompt-advertises-url-capable-read-the-image-lacks | 2 |
|
|
48
|
+
| S3 | subagent-parallel-mode-reports-api-errors-as-completed | 1 |
|
|
49
|
+
| S4 | four-boolean-env-keys-turn-off-on-a-blank-line | 1 (user-supplied) |
|
|
50
|
+
|
|
51
|
+
## Collision map
|
|
52
|
+
|
|
53
|
+
> Whole files, predicted; `docs/` and infrastructure paths are excluded exactly as `overlap-check.sh` excludes them (1 such path ignored: `docs/ideas/gates-do-not-cover-resources-pi-extensions.md`, from S3).
|
|
54
|
+
|
|
55
|
+
| File | Sessions |
|
|
56
|
+
|------|----------|
|
|
57
|
+
|
|
58
|
+
## Predicted surfaces
|
|
59
|
+
|
|
60
|
+
### S1
|
|
61
|
+
|
|
62
|
+
- src/core/storage-cleanup.ts
|
|
63
|
+
- src/storage/db.ts
|
|
64
|
+
- src/core/reply-context.ts
|
|
65
|
+
|
|
66
|
+
### S2
|
|
67
|
+
|
|
68
|
+
- src/agent/container-entry.ts
|
|
69
|
+
- container/agent-package.json
|
|
70
|
+
|
|
71
|
+
### S3
|
|
72
|
+
|
|
73
|
+
- resources/pi-extensions/subagent/index.ts
|
|
74
|
+
|
|
75
|
+
### S4
|
|
76
|
+
|
|
77
|
+
- src/config.ts (user-supplied, 2026-09-22)
|
|
78
|
+
|
|
79
|
+
## Adjudicated overlaps
|
|
80
|
+
|
|
81
|
+
> Pre-answers for the execution commands' preflight overlap prompt. Scoped to exact branch + file pairs on branches that belong to NO active plan (a hand-opened worktree, another contributor). A branch of a sibling plan's session is never listed here — it becomes a cross-plan edge instead.
|
|
82
|
+
|
|
83
|
+
| Session | Branch (not in this plan) | Files | Verdict | Decided |
|
|
84
|
+
|---------|---------------------------|-------|---------|---------|
|
|
85
|
+
|
|
86
|
+
> The preflight for all four sessions came back clear on 2026-09-22 (no live worktrees besides the primary checkout).
|
|
87
|
+
|
|
88
|
+
## Not ours
|
|
89
|
+
|
|
90
|
+
> Last measurement (`git log --since=14.days`, authors not in `Me`). Re-measured on every `next`; this table is the snapshot the briefs were written from.
|
|
91
|
+
|
|
92
|
+
| File / area | Author | Basis |
|
|
93
|
+
|-------------|--------|-------|
|
|
94
|
+
| src/agent/container-entry.ts | avishai tsabari | 0c5b980, 71f0073 (2026-09-11, bash-call bound, /dev/shm sizing) |
|
|
95
|
+
| src/config.ts | avishai tsabari | eaf58ba (2026-09-13, /spaces conversations + link) |
|
|
96
|
+
| src/storage/db.ts | avishai tsabari | eaf58ba (2026-09-13) |
|
|
97
|
+
| container/agent-package.json | Avishai-Tsabari | cb94bba (2026-09-13, PR #100 pi 0.85.1 bump) |
|
|
98
|
+
|
|
99
|
+
## Deferred
|
|
100
|
+
|
|
101
|
+
| Item | Reason | Home |
|
|
102
|
+
|------|--------|------|
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
## Launched — 2026-09-22T10:42Z
|
|
2
|
+
Branch: worktree-fix-storage-cleanup-nulls-every-attachment-row-in-the-space
|
|
3
|
+
|
|
4
|
+
## Report — 2026-09-22T10:55Z
|
|
5
|
+
Outcome: blocked
|
|
6
|
+
Delivered: —
|
|
7
|
+
Blocked-on: owner approval to push dev (local-only rule, CLAUDE.local.md)
|
|
8
|
+
Deploy needs: restart
|
|
9
|
+
Files changed:
|
|
10
|
+
- docs/debug/moderate/2026-09-22-storage-cleanup-nulls-every-attachment-row-in-the-space.md
|
|
11
|
+
- docs/debug/storage-cleanup-nulls-every-attachment-row-in-the-space.md
|
|
12
|
+
- docs/pending-verification.md
|
|
13
|
+
- src/core/storage-cleanup.ts
|
|
14
|
+
- src/storage/db.ts
|
|
15
|
+
- tests/db.test.ts
|
|
16
|
+
- tests/storage-cleanup.test.ts
|
|
17
|
+
Siblings must know:
|
|
18
|
+
- db.clearSpaceAttachments is gone; the replacement is db.clearAttachmentRefs(spaceId, inboxFileNames) -> { refsRemoved, rowsChanged, unparseable }. src/storage/db.ts is S1-edited; rebase before touching it.
|
|
19
|
+
--- final report (verbatim) ---
|
|
20
|
+
~~~
|
|
21
|
+
S1 storage-cleanup-nulls-every-attachment-row-in-the-space — fixed, squash-merged to LOCAL dev as dd26ccf (not pushed; owner said "go" = local only).
|
|
22
|
+
- src/core/storage-cleanup.ts: cleanDir returns deletedNames; sweep calls db.clearAttachmentRefs(spaceId, names) instead of the space-wide clear.
|
|
23
|
+
- src/storage/db.ts: clearSpaceAttachments -> clearAttachmentRefs (per ref, basename + parent `inbox`, one transaction, unparseable rows kept + counted).
|
|
24
|
+
- tests: real-Db regression (old + fresh file, mixed row) + db unit tests; negative-tested (space-wide predicate -> 2 red).
|
|
25
|
+
- Gate: 11/12 PASS; `test` red only on feed-watch-scorecard, identical on dev, filed as docs/bugs/feed-watch-scorecard-cli-test-pins-now-but-the-script-reads-the-real-clock.md.
|
|
26
|
+
- Post-mortem: docs/debug/moderate/2026-09-22-storage-cleanup-nulls-every-attachment-row-in-the-space.md
|
|
27
|
+
- MANUAL-VERIFY under "## Plan p0-bugs-0922 / S1" in docs/pending-verification.md.
|
|
28
|
+
- Deploy: restart only. Residuals: no backfill of already-nulled rows; /media/purge leaves refs (consistent, noted).
|
|
29
|
+
~~~
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
## Launched — 2026-09-22T10:43Z
|
|
2
|
+
Branch: worktree-fix-system-prompt-advertises-url-capable-read-the-image-lacks
|
|
3
|
+
|
|
4
|
+
## Report — 2026-09-22T11:02Z
|
|
5
|
+
Outcome: delivered
|
|
6
|
+
Delivered: —
|
|
7
|
+
Blocked-on: —
|
|
8
|
+
Deploy needs: rebuild
|
|
9
|
+
Files changed:
|
|
10
|
+
- docs/debug/moderate/2026-09-22-system-prompt-advertises-url-capable-read-the-image-lacks.md
|
|
11
|
+
- docs/pending-verification.md
|
|
12
|
+
- src/agent/container-entry.ts
|
|
13
|
+
- tests/core-tool-snippets.test.ts
|
|
14
|
+
- tests/fixtures/release-gate/regression-map.json
|
|
15
|
+
Siblings must know:
|
|
16
|
+
- A post-mortem archived under docs/debug/** now needs a `Gate check:` line or an entry in tests/fixtures/release-gate/regression-map.json, or tests/release-gate-map.test.ts goes red. S1's post-mortem (moderate/2026-09-22-storage-cleanup-nulls-every-attachment-row-in-the-space.md) has neither and is red on local dev.
|
|
17
|
+
- tests/feed-watch-scorecard.test.ts is red on dev regardless of change (fixed NOW vs the script's real clock); filed as docs/bugs/feed-watch-scorecard-cli-test-pins-now-but-the-script-reads-the-real-clock.md (uncommitted).
|
|
18
|
+
- src/agent/container-entry.ts exports CORE_TOOL_SNIPPETS.
|
|
19
|
+
--- final report (verbatim) ---
|
|
20
|
+
~~~
|
|
21
|
+
Fixed: the override-mode system prompt listed `read` as "a file or URL" with web-page conversion, copied from an upstream pi; the pinned @earendil-works/pi-coding-agent 0.85.1 read opens local paths only.
|
|
22
|
+
- src/agent/container-entry.ts: tool list is now exported CORE_TOOL_SNIPPETS; read = installed description's opening + "Local paths only — it cannot open a URL; fetch web pages with `curl` via bash."
|
|
23
|
+
- tests/core-tool-snippets.test.ts: each summary must be a prefix of the installed tool's description; image pin == root pin and installed version satisfies it. Negative-tested (old text -> 2 red).
|
|
24
|
+
- Post-mortem: docs/debug/moderate/2026-09-22-system-prompt-advertises-url-capable-read-the-image-lacks.md (+ regression-map entry, category code).
|
|
25
|
+
- Landed as e73faa3 on LOCAL dev, squash; NOT pushed (CLAUDE.local.md push gate; owner chose local squash). Promotion commit de5fb69 also unpushed.
|
|
26
|
+
- Gate after rebase: 11/12 links pass; test 5735 pass / 9 skip / 3 fail before the map entry -> remaining 2 fails are not S2's (S1's post-mortem missing from regression-map; pre-existing feed-watch-scorecard date bug).
|
|
27
|
+
- Deploy: rebuild (container-entry.ts is baked) — container/build.sh then restart in a gap; verify by grepping the image (pending-verification, Plan p0-bugs-0922 / S2). One rebuild covers S3 too.
|
|
28
|
+
- ARCHITECTURE.md: no change needed.
|
|
29
|
+
~~~
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
## Launched — 2026-09-22T10:43Z
|
|
2
|
+
Branch: worktree-fix-subagent-parallel-mode-reports-api-errors-as-completed
|
|
3
|
+
|
|
4
|
+
## Report — 2026-09-22T13:05Z
|
|
5
|
+
Outcome: delivered
|
|
6
|
+
Delivered: —
|
|
7
|
+
Blocked-on: —
|
|
8
|
+
Deploy needs: rebuild
|
|
9
|
+
Files changed:
|
|
10
|
+
- docs/debug/minor/2026-09-22-subagent-parallel-mode-reports-api-errors-as-completed.md
|
|
11
|
+
- docs/debug/subagent-parallel-mode-reports-api-errors-as-completed.md
|
|
12
|
+
- docs/pending-verification.md
|
|
13
|
+
- resources/pi-extensions/subagent/index.ts
|
|
14
|
+
- resources/pi-extensions/subagent/outcome.ts
|
|
15
|
+
- tests/subagent-outcome.test.ts
|
|
16
|
+
Siblings must know:
|
|
17
|
+
- none (resources/pi-extensions/subagent/ only; new module outcome.ts exports isSubagentError + RUNNING_EXIT_CODE)
|
|
18
|
+
--- final report (verbatim) ---
|
|
19
|
+
~~~
|
|
20
|
+
S3 — subagent-parallel-mode-reports-api-errors-as-completed: fixed, squashed onto LOCAL dev as 78bfe74 (not pushed — owner chose "squash onto local dev"; push needs approval per CLAUDE.local.md).
|
|
21
|
+
|
|
22
|
+
Fix: resources/pi-extensions/subagent/outcome.ts adds isSubagentError (exitCode !== 0 || stopReason error/aborted); all eleven verdict sites in index.ts use it — parallel successCount + completed/failed label, chain/single behaviour, and every ✓/✗ counter and icon (the chain display was also exit-code-only, beyond the report's four sites). A failed parallel leg now previews its error text instead of "(no output)".
|
|
23
|
+
Test: tests/subagent-outcome.test.ts — predicate units + end-to-end execute/renderResult for single, chain and parallel against a fake pi on PATH that exits 0 with stopReason "error". Negative-tested: each of the 11 sites reverted alone turns the suite red.
|
|
24
|
+
Checklist item "resources/ inside typecheck + lint": already done (typecheck:resources + lint both cover resources/) — verified and ticked, not redone.
|
|
25
|
+
Gate (bun run check, WSL worktree): 11/12 links PASS; test 5737 pass / 9 skip / 1 fail — the failure is feed-watch-scorecard "prints the table…", identical on untouched dev, already filed (docs/bugs/feed-watch-scorecard-cli-test-pins-now-but-the-script-reads-the-real-clock.md).
|
|
26
|
+
Rebase: pending-verification.md conflicted with S1/S2's appended sections; resolved keeping all three.
|
|
27
|
+
Post-mortem: docs/debug/minor/2026-09-22-subagent-parallel-mode-reports-api-errors-as-completed.md (residuals: streaming parallel view counts a running task as done; parallel never sets isError even when all legs fail).
|
|
28
|
+
Deploy needs: image rebuild — resources/ is baked. Verification lines under "## Plan p0-bugs-0922 / S3" in docs/pending-verification.md.
|
|
29
|
+
ARCHITECTURE.md: no update needed.
|
|
30
|
+
~~~
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
## Launched — 2026-09-22T10:44Z
|
|
2
|
+
Branch: worktree-fix-four-boolean-env-keys-turn-off-on-a-blank-line
|
|
3
|
+
|
|
4
|
+
## Report — 2026-09-22T13:10Z
|
|
5
|
+
Outcome: blocked
|
|
6
|
+
Delivered: —
|
|
7
|
+
Blocked-on: owner approval to push dev (local-only rule, CLAUDE.local.md)
|
|
8
|
+
Deploy needs: restart
|
|
9
|
+
Files changed:
|
|
10
|
+
- docs/debug/four-boolean-env-keys-turn-off-on-a-blank-line.md
|
|
11
|
+
- docs/debug/minor/2026-09-22-four-boolean-env-keys-turn-off-on-a-blank-line.md
|
|
12
|
+
- docs/pending-verification.md
|
|
13
|
+
- src/config.ts
|
|
14
|
+
- tests/config.test.ts
|
|
15
|
+
- tests/fixtures/release-gate/regression-map.json
|
|
16
|
+
Siblings must know:
|
|
17
|
+
- src/config.ts now exports nothing new; strictBooleanFromEnv(configKey, yamlKey, default) is module-private and derives the env name from configKeyEnvNames().
|
|
18
|
+
- tests/release-gate-map.test.ts is red on dev for S1's and S3's post-mortems (moderate/2026-09-22-storage-cleanup-nulls-every-attachment-row-in-the-space.md, minor/2026-09-22-subagent-parallel-mode-reports-api-errors-as-completed.md): each needs a Gate check: line or an entry in tests/fixtures/release-gate/regression-map.json. S4 added only its own entry.
|
|
19
|
+
--- final report (verbatim) ---
|
|
20
|
+
~~~
|
|
21
|
+
S4 — four-boolean-env-keys-turn-off-on-a-blank-line: fixed, squash-merged to local dev as 722d697, NOT pushed.
|
|
22
|
+
|
|
23
|
+
- src/config.ts: override_pi_system_prompt's strict parser generalised to strictBooleanFromEnv; telegramFormatEnabled, mediaEnabled, taskNotifyOnFailure, alertsEnabled now use it (blank = default true; true/false/1/0 case-insensitive; anything else = startup error naming YAML key + MERCURY_* var, the name derived from config-file's map).
|
|
24
|
+
- tests/config.test.ts: 48-row table (4 keys x absent/blank/3 true/3 false/4 typos); negative test: alertsEnabled on the lenient parser -> 5/12 of its rows red.
|
|
25
|
+
- tests/fixtures/release-gate/regression-map.json: allowlist entry for this post-mortem (category code).
|
|
26
|
+
- docs/pending-verification.md: one MANUAL-VERIFY line under "## Plan p0-bugs-0922 / S4".
|
|
27
|
+
- Post-mortem: docs/debug/minor/2026-09-22-four-boolean-env-keys-turn-off-on-a-blank-line.md
|
|
28
|
+
- Gate on the rebased tree: 11/12 links PASS; test red on (a) feed-watch-scorecard clock-dependent test, pre-existing and filed, fails identically with this fix reverted; (b) release-gate-map rows for S1 and S3 post-mortems (not this session's).
|
|
29
|
+
- Box: none of the four keys is set in ~/whatsapp-bot/.env or the user unit (key-name check only), so the new startup error cannot fire on restart.
|
|
30
|
+
- Residual: a blank env line still shadows a mercury.yaml value with the default (config-file merge; same as b6ecf07), recorded in the post-mortem.
|
|
31
|
+
- Architecture: no ARCHITECTURE.md change needed.
|
|
32
|
+
~~~
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Brief S10 — feed-watch serves fixture files in shadow mode (M1.7)
|
|
2
|
+
|
|
3
|
+
**Plan**: docs/plans/bench-patterns-0915/plan.md **Session**: S10 **Round**: 1 **Kind**: feature
|
|
4
|
+
**Item slug**: shadow-feed-fixtures
|
|
5
|
+
|
|
6
|
+
> The only file this session reads from the plan. Self-contained: it never points at a sibling's brief. The `**Item slug**:` line is the key the execution commands grep for to detect that a brief is active — keep it exactly in that shape.
|
|
7
|
+
|
|
8
|
+
## Launch
|
|
9
|
+
|
|
10
|
+
/f-ops-plan work bench-patterns-0915 S10
|
|
11
|
+
|
|
12
|
+
## Run
|
|
13
|
+
|
|
14
|
+
/f-feature-dev shadow-feed-fixtures
|
|
15
|
+
|
|
16
|
+
## Scope notes
|
|
17
|
+
|
|
18
|
+
Follow the doc's six-step sequence. The fixture replaces only the transport; everything after the response stays the real code (Non-Negotiable Rules). For Step 4, read the configured source keys **read-only from the latest shadow snapshot's DB**, never from the live DB and never from `.env`, and compute them with `expandSources`. Do not type them by hand.
|
|
19
|
+
|
|
20
|
+
The doc's Open Question about the stale gnews bug doc is not yours to close. Mention it in "Siblings must know".
|
|
21
|
+
|
|
22
|
+
Until M1.3c (`shadow-own-credential`) is deployed, the shadow shares the live refresh-token chain. Any live fixture rehearsal you run is short and watched.
|
|
23
|
+
|
|
24
|
+
**Deploy needs: restart.** feed-watch reaches the box as the installed extension snapshot, so verify against `~/whatsapp-bot/.mercury/extensions/feed-watch/`, never the repo. Gap-check before the restart.
|
|
25
|
+
|
|
26
|
+
## Owned surfaces (predicted)
|
|
27
|
+
|
|
28
|
+
- examples/extensions/feed-watch/fixtures.ts
|
|
29
|
+
- examples/extensions/feed-watch/index.ts
|
|
30
|
+
- tests/feed-watch-fixtures.test.ts
|
|
31
|
+
- tests/fixtures/feed-watch/shadow/README.md
|
|
32
|
+
- tests/fixtures/feed-watch/shadow/feeds
|
|
33
|
+
- tests/fixtures/feed-watch/shadow/feeds/*
|
|
34
|
+
- docs/pending-verification.md
|
|
35
|
+
|
|
36
|
+
## Do not touch
|
|
37
|
+
|
|
38
|
+
- src/cli/mercury.ts, src/config.ts, src/ops/shadow-root.ts, src/ops/shadow-service.ts, src/ops/shadow-snapshot.ts, tests/shadow-login.test.ts, tests/shadow-mode.test.ts, tests/shadow-root.test.ts, tests/shadow-service-cli.test.ts, tests/shadow-service.test.ts, tests/shadow-snapshot.test.ts, docs/configuration.md, docs/live-testing.md (owned by S9 this plan)
|
|
39
|
+
- package.json, scripts/ (every file), tests/check-ratchets.test.ts, tests/check-sync-calls.test.ts (owned by S11 this plan)
|
|
40
|
+
- tests/helpers/, tests/inventories/, tests/inventory-*.test.ts, tests/source-scan.test.ts, tests/container-copy-list-closure.test.ts, tests/env-claims-declare-hostonly.test.ts, tests/no-module-eviction.test.ts, tests/release-gate-map.test.ts (owned by S12 this plan)
|
|
41
|
+
- examples/extensions/feed-watch/feeds.ts, watch.ts, config.ts: read-only for this item (the doc says so).
|
|
42
|
+
- src/core/routes/shadow.ts, tests/shadow-route.test.ts, src/core/simulate-ingress.ts, src/smoke/cli.ts, src/bridges/, src/core/conversation.ts: named in the doc's Non-Negotiable Rules.
|
|
43
|
+
- Not ours: none intersect this session's surfaces (measured 2026-09-23). Re-check with `/f-ops-plan next bench-patterns-0915`.
|
|
44
|
+
|
|
45
|
+
## Edges
|
|
46
|
+
|
|
47
|
+
- start-after: none (satisfied — `next` launched you)
|
|
48
|
+
- merge-after: none
|
|
49
|
+
|
|
50
|
+
## Overlap verdicts
|
|
51
|
+
|
|
52
|
+
none
|
|
53
|
+
|
|
54
|
+
> The command's preflight overlap check treats a hit whose branch AND every shared file match a verdict line as answered (c), prints one `PLAN-PASSED(overlap): …` line, and carries it into the final report. Any other hit prompts as usual. The merge-time check is never waived.
|
|
55
|
+
|
|
56
|
+
## Decisions answered
|
|
57
|
+
|
|
58
|
+
- Q1: yes. The bench order is M1.3c → M1.7 → M2.4 (owner, 2026-09-23). There is no landing order between you and S9 (owner: no semantic edges).
|
|
59
|
+
|
|
60
|
+
## Ledger rules
|
|
61
|
+
|
|
62
|
+
- `docs/ROADMAP.md`: never edit. Your command writes `docs/pending-updates/shadow-feed-fixtures.md` as usual.
|
|
63
|
+
- `docs/pending-verification.md`: append only under `## Plan bench-patterns-0915 / S10`. S9 appends under its own heading in the same file, so rebase, don't overwrite.
|
|
64
|
+
- Any goal's `decisions.md`: never edit; put decisions in your log's "Siblings must know".
|
|
65
|
+
|
|
66
|
+
## Environment
|
|
67
|
+
|
|
68
|
+
- Read `CLAUDE.md` → Worktree Setup and Gotchas before opening the worktree. Nothing from them is copied here. Run `bun install` once in the fresh worktree. The check gate is `bun run check`: every link runs to completion, so read every line.
|
|
69
|
+
|
|
70
|
+
## Report
|
|
71
|
+
|
|
72
|
+
Your command's final report is appended to `docs/plans/bench-patterns-0915/sessions/S10.md` by its report step (path resolved through `.claude/scripts/resolve-docs-root.sh docs/plans/probe.md`). `work` verifies the append.
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Brief S11 — ratchet the four "silence" shapes the summaries named
|
|
2
|
+
|
|
3
|
+
**Plan**: docs/plans/bench-patterns-0915/plan.md **Session**: S11 **Round**: 1 **Kind**: feature
|
|
4
|
+
**Item slug**: ratchet-shapes-the-summaries-named
|
|
5
|
+
|
|
6
|
+
> The only file this session reads from the plan. Self-contained: it never points at a sibling's brief. The `**Item slug**:` line is the key the execution commands grep for to detect that a brief is active — keep it exactly in that shape.
|
|
7
|
+
|
|
8
|
+
## Launch
|
|
9
|
+
|
|
10
|
+
/f-ops-plan work bench-patterns-0915 S11
|
|
11
|
+
|
|
12
|
+
## Run
|
|
13
|
+
|
|
14
|
+
/f-feature-dev ratchet-shapes-the-summaries-named
|
|
15
|
+
|
|
16
|
+
## Scope notes
|
|
17
|
+
|
|
18
|
+
**First step, before the worktree and before any detector** (owner decision Q9/OQ4 and Q10): file both candidate bugs with `/f-bug-report`, then put their two slugs in your log's "Siblings must know":
|
|
19
|
+
|
|
20
|
+
- (a) `src/core/handler.ts:315`: the `denied` reply is an `await bridge.sendReply` outside any `try`.
|
|
21
|
+
- (b) `src/core/media.ts:233`: with no `content-length`, the whole body is buffered by `arrayBuffer()` before the size check.
|
|
22
|
+
|
|
23
|
+
File them, never fix them. Their fixes later lower your baselines.
|
|
24
|
+
|
|
25
|
+
The owner accepted all five Open-Question recommendations (Q9):
|
|
26
|
+
|
|
27
|
+
- OQ1: ratchet D2 at its measured count; no sweep first.
|
|
28
|
+
- OQ2: skip `src/bridges/` and `src/adapters/`, and say why in the script header.
|
|
29
|
+
- OQ3: a zero-dependency lexer.
|
|
30
|
+
- OQ4: file the two bugs, as above.
|
|
31
|
+
- OQ5: no suppression marker.
|
|
32
|
+
|
|
33
|
+
`check-silent-catch.ts` and `check-sync-calls.ts` stay byte-identical. They are predicted only because the doc names them as patterns. Re-measure the baselines on your branch's own tree (Step 3); the planning table is not the baseline.
|
|
34
|
+
|
|
35
|
+
**Deploy needs: none** (scripts and tests only).
|
|
36
|
+
|
|
37
|
+
## Owned surfaces (predicted)
|
|
38
|
+
|
|
39
|
+
- package.json
|
|
40
|
+
- scripts/absent-allows-baseline.json
|
|
41
|
+
- scripts/bare-delivery-await-baseline.json
|
|
42
|
+
- scripts/check-absent-allows.ts
|
|
43
|
+
- scripts/check-bare-delivery-await.ts
|
|
44
|
+
- scripts/check-early-return-no-log.ts
|
|
45
|
+
- scripts/check-silent-catch.ts
|
|
46
|
+
- scripts/check-sync-calls.ts
|
|
47
|
+
- scripts/check-unbounded-race.ts
|
|
48
|
+
- scripts/check.ts
|
|
49
|
+
- scripts/early-return-no-log-baseline.json
|
|
50
|
+
- scripts/lib/ratchet.ts
|
|
51
|
+
- scripts/silent-catch-baseline.json
|
|
52
|
+
- scripts/unbounded-race-baseline.json
|
|
53
|
+
- tests/check-ratchets.test.ts
|
|
54
|
+
- tests/check-sync-calls.test.ts
|
|
55
|
+
- CLAUDE.md
|
|
56
|
+
|
|
57
|
+
## Do not touch
|
|
58
|
+
|
|
59
|
+
- src/cli/mercury.ts, src/config.ts, src/ops/shadow-root.ts, src/ops/shadow-service.ts, src/ops/shadow-snapshot.ts, tests/shadow-*.test.ts, docs/configuration.md, docs/live-testing.md (owned by S9 this plan)
|
|
60
|
+
- examples/extensions/feed-watch/fixtures.ts, examples/extensions/feed-watch/index.ts, tests/feed-watch-fixtures.test.ts, tests/fixtures/feed-watch/shadow/ (owned by S10 this plan)
|
|
61
|
+
- tests/helpers/, tests/inventories/, tests/inventory-*.test.ts, tests/source-scan.test.ts, tests/container-copy-list-closure.test.ts, tests/env-claims-declare-hostonly.test.ts, tests/no-module-eviction.test.ts, tests/release-gate-map.test.ts (owned by S12 this plan)
|
|
62
|
+
- Everything under `src/` and `examples/`: scanned, never edited. A hit there goes into a baseline or a bug report. This includes `src/core/handler.ts`, `src/core/media.ts` and `src/core/simulate-ingress.ts`, and the files plans `p0-plan-0922` (S6–S8) and `sensitive-bugs-0922` are changing.
|
|
63
|
+
- `CLAUDE.md`: S12 also edits it (the `pi`-spawn gotcha). Add your one Gotchas line and nothing else, and rebase over theirs.
|
|
64
|
+
- Not ours (avishai tsabari / dependabot, last 14 d): `package.json`, from version bumps and dependency PRs. The lane is cleared by Q12 (ours). Re-check with `/f-ops-plan next bench-patterns-0915`.
|
|
65
|
+
|
|
66
|
+
## Edges
|
|
67
|
+
|
|
68
|
+
- start-after: none (satisfied — `next` launched you)
|
|
69
|
+
- merge-after: none
|
|
70
|
+
|
|
71
|
+
## Overlap verdicts
|
|
72
|
+
|
|
73
|
+
none
|
|
74
|
+
|
|
75
|
+
> The command's preflight overlap check treats a hit whose branch AND every shared file match a verdict line as answered (c), prints one `PLAN-PASSED(overlap): …` line, and carries it into the final report. Any other hit prompts as usual. The merge-time check is never waived.
|
|
76
|
+
|
|
77
|
+
## Decisions answered
|
|
78
|
+
|
|
79
|
+
- Q9: accept all five Open-Question recommendations (owner, 2026-09-23).
|
|
80
|
+
- Q10: the two bug reports are your first step, not a launch gate (owner, 2026-09-24).
|
|
81
|
+
- Q12: ours (owner, 2026-09-23).
|
|
82
|
+
|
|
83
|
+
## Ledger rules
|
|
84
|
+
|
|
85
|
+
- `docs/ROADMAP.md`: never edit. Your command writes `docs/pending-updates/ratchet-shapes-the-summaries-named.md` as usual.
|
|
86
|
+
- `docs/pending-verification.md`: append only under `## Plan bench-patterns-0915 / S11`.
|
|
87
|
+
- Any goal's `decisions.md`: never edit; put decisions in your log's "Siblings must know".
|
|
88
|
+
|
|
89
|
+
## Environment
|
|
90
|
+
|
|
91
|
+
- Read `CLAUDE.md` → Worktree Setup and Gotchas before opening the worktree. Nothing from them is copied here. Run `bun install` once in the fresh worktree. The check gate is `bun run check`: every link runs to completion, so read every line. Lint is proven only by `~/check-mercury.sh check <worktree>` in WSL (CLAUDE.local.md).
|
|
92
|
+
|
|
93
|
+
## Report
|
|
94
|
+
|
|
95
|
+
Your command's final report is appended to `docs/plans/bench-patterns-0915/sessions/S11.md` by its report step (path resolved through `.claude/scripts/resolve-docs-root.sh docs/plans/probe.md`). `work` verifies the append.
|