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.
|
terminal gets it through a CLI verb in a later row.
|
||||||
- Talk, launch budget, stop and Library are briefed when row 41
|
- Talk, launch budget, stop and Library are briefed when row 41
|
||||||
lands.
|
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