docs(lead): decision 82, Q14 F9 answered by gate V; #1552 brief deferred to after the hold
Corrects decision 80's journal claim as a new entry. Brief for the adapter ready line (#1552) is queued after the Q14 hold ends. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
@@ -1704,3 +1704,33 @@ which stay with him. Each item names who decided it and what happened.
|
||||
terminal gets it through a CLI verb in a later row.
|
||||
- Talk, launch budget, stop and Library are briefed when row 41
|
||||
lands.
|
||||
|
||||
82. **Q14 F9 is answered by plan rev8's gate V, with no code change
|
||||
before the window; decision 80's journal claim was wrong
|
||||
(2026-10-10).** rev-sol-01 failed rev7 on F9: `mosaic tasks` reads
|
||||
the broker's stored task view and never proves the adapter is ready
|
||||
after the restart. ops-01's rev8 adds gate V, which reads the
|
||||
Vikunja pod's request log. `tick` runs only in state `ready`, so two
|
||||
tick pairs returning 200 after the restart show a ready adapter
|
||||
making real reads. Sage acked rev8 at brain 6743ec95c, sha
|
||||
f4003b78, after three wording changes (W1 to W3): the startup
|
||||
reconcile reads belong to V-B, comment and task reads after ready
|
||||
are not triggers, and item 6 reads the journal for the refusal line.
|
||||
- Correction to decision 80: "the journal is empty for the unit" is
|
||||
wrong. The broker's stderr reaches the user journal, and a refusal
|
||||
logs `tasks <business> startup <code>`. Success logs nothing. The
|
||||
10-09 22:57Z start lines had aged out, because this host's user
|
||||
journal starts at 2026-10-10T05:52Z. Item 6 now checks for that
|
||||
line inside gate V's 3 minutes.
|
||||
- No status verb before the window: it would change `packages/bus`
|
||||
and `packages/cli`, both frozen, and row 41 rewrites
|
||||
`packages/bus`. A one-line `startup ready <version>` log in
|
||||
`packages/tasks` is issue #1552, briefed in
|
||||
`docs/plans/2026-10-10_q14-adapter-ready-line.md`. It is queued
|
||||
after the hold ends. Landing code the night before a window only
|
||||
to make the window observable is the wrong trade when gate V
|
||||
already observes it.
|
||||
- The only node client in mosaic-stack that reaches the tracker is
|
||||
Sage's one-off `agents/sage/work/vikunja-setup/` scripts, which
|
||||
don't run during the window. Seats run no live tracker probes from
|
||||
2026-10-11T15:00Z until the hold ends.
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
# Q14 F9: the tracker adapter logs its ready state
|
||||
|
||||
Lead: Sage. Issue #1552. Lead decision 82 records the ruling: this row
|
||||
waits until the Q14 hold ends. Q14 plan rev8's gate V answers F9 without
|
||||
code, so the row is a follow-up, not a window prerequisite.
|
||||
|
||||
## Tracker adapter logs its ready state
|
||||
|
||||
### Why
|
||||
|
||||
rev-sol-01 failed Q14 plan rev7 on F9. The plan proved tracker readiness
|
||||
after the bus restart with `scripts/mosaic tasks --business mosaic-stack`.
|
||||
That command reads the broker's persisted `task_current` view and never
|
||||
reaches the adapter, so a cached row passes even when the adapter refuses.
|
||||
The review asks for "an actual post-restart bus-driven tracker result or
|
||||
demonstrable adapter readiness."
|
||||
|
||||
The adapter (`packages/tasks/src/adapter.mjs`) holds `state` per business:
|
||||
`starting`, `ready` or `refused`. Nothing outside the process can read it.
|
||||
|
||||
- A refusal logs `tasks <business> startup <code>` on stderr. The unit's
|
||||
stderr goes to the user journal.
|
||||
- A successful start logs nothing unless the Vikunja version is untested.
|
||||
- A poll writes rows (`task_snapshots` with `source = 'poll'`, and
|
||||
`task.changed.external` events) only when a task changed, so a quiet
|
||||
tracker leaves no row after a restart.
|
||||
- `mosaic bus status` reads files and /proc only.
|
||||
|
||||
A status verb that asks the running broker would need changes in
|
||||
`packages/bus` and `packages/cli`. Row 41 (S6) rewrites `packages/bus`, and
|
||||
the Q14 freeze holds both, so that is not this row.
|
||||
|
||||
### Change
|
||||
|
||||
In `start(ctx)` in `packages/tasks/src/adapter.mjs`, once `startup(ctx)`
|
||||
and the startup `reconcile(ctx)` have both returned and `state` is
|
||||
`ready`, log exactly:
|
||||
|
||||
```
|
||||
tasks <business> startup ready <version>
|
||||
```
|
||||
|
||||
`<version>` is `ctx.version`, the version string `GET /info` returned. The
|
||||
line comes before the existing `startup untested-version` line, which
|
||||
stays as it is. A refused start still logs only the refusal. A transient
|
||||
refusal that a later poll-interval retry clears logs the refusal first and
|
||||
then the ready line. Nothing else changes: no new state, no new verb, no
|
||||
change to what `handle`, `tick` or `reconcile` do.
|
||||
|
||||
### Tests
|
||||
|
||||
- `packages/tasks/tests/adapter.test.mjs` and `startup.test.mjs`: every
|
||||
assertion on `w.log` after a successful start now expects the ready line
|
||||
first. The untested-version test expects both lines in order.
|
||||
- A new test: a refused start logs no ready line, and a transient refusal
|
||||
that a retry clears logs `startup <code>` and then
|
||||
`startup ready <version>`, in that order.
|
||||
- A mutant that drops the line, or moves it before `reconcile` returns,
|
||||
must fail a test.
|
||||
|
||||
### Docs
|
||||
|
||||
`packages/tasks/README.md`, section "Startup": say that a passing start
|
||||
logs `tasks <business> startup ready <version>` after the startup
|
||||
reconcile, and that this line is the positive signal an operator checks
|
||||
after a restart.
|
||||
|
||||
### Files
|
||||
|
||||
`packages/tasks/src/adapter.mjs`, `packages/tasks/tests/adapter.test.mjs`,
|
||||
`packages/tasks/tests/startup.test.mjs`, `packages/tasks/README.md`,
|
||||
`agents/rocko/work/queue-62/`. Nothing under `packages/bus`,
|
||||
`packages/cli`, `scripts/bus-service.sh` or `scripts/mosaic`.
|
||||
|
||||
### Gate
|
||||
|
||||
`node --test 'packages/tasks/tests/*.test.mjs'`, the
|
||||
`packages/runs`, `queue`, `webui`, `conversation` and `control-board` node
|
||||
suites, every `scripts/test-*.sh`, and `test-task.sh` without Docker.
|
||||
Sage reruns the gate in a scratch worktree and lands the row.
|
||||
|
||||
### Deadline and deployment
|
||||
|
||||
`packages/tasks` is frozen until ops-01 reports the Q14 hold ended, so the
|
||||
row is queued only after that. It has no deadline.
|
||||
|
||||
The unit's ExecStart is the checkout's `scripts/mosaic bus start`, so the
|
||||
next bus restart after landing loads the change. The row adds no restart
|
||||
of its own. Don't restart the running bus to try it.
|
||||
Reference in New Issue
Block a user