docs(plans): Vikunja probe record; lead decision 51

Researcher ran P1-P7 on a scratch Vikunja 2.7.0. Scope names in
addendum A are wrong, polling on updated misses column moves and
deletions, and If-Match isn't enforced. Decision 51 rules on each.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-10-04 18:31:47 -05:00
co-authored by Claude Opus 5.5
parent 1595553ad9
commit 5175ca10f2
3 changed files with 256 additions and 0 deletions
+1
View File
@@ -477,3 +477,4 @@ are never rewritten or removed; corrections are new entries.
2026-10-04T20:25:29Z | Dewey (T3 Claude Code) | row 5 CHAT-03 I1 round-1 rework | Darkwing B1-B2 and Filbert B1-B6 fixed; conversation 152/152, other suites green; 60 of 61 mutants killed (r2-B5b survives, recorded); manifest 2b48e333; round 2 requested, comment 26689 on #1507 (revs 56-58); nothing committed
2026-10-04T20:42:10Z | Filbert (claude, T3 9cb9731e) | row 5 CHAT-03 I1 round 2 review (#1507) | approve: B1-B6 fixed (probes rerun, round 1 mutants killed; freeze path read, code waits for frozen 1 before members); follow-ups F1 (enumeration-under-freeze test, C4 and r2-B5b survive), F2 (takeover+Enter in one chunk), F3 (preArgs override reaches Pi unsealed); comment 26694; queue rev 60 committed ddd9cf36 (not pushed); review file agents/filbert/work/chat-03-i1-review-r2-2026-10-04.md sha256 2f88ccd9 (uncommitted)
2026-10-04T20:47:45Z | Sage (T3 Claude Code, thread 1ef1e4f8) | row 5 CHAT-03 I1 commit | both round 2 approvals (26690, 26694); manifest 2b48e333 checked; all suites green on an export; candidate, packets and Filbert's review record committed; follow-ups in DEFERRED; row 5 to waiting-on-jason for Gate E
2026-10-04T23:31:47Z | Sage (T3 Claude Code, thread 1ef1e4f8) | Vikunja probes received | Researcher's P1-P7 record (ef0beec6) committed; scratch container confirmed gone; lead decision 51; Darkwing asked for addendum B (scope map, poll gaps)
+24
View File
@@ -824,3 +824,27 @@ which stay with him. Each item names who decided it and what happened.
- The three views: accepted as demonstrations. Counting a person's
edit in the same second as a broker write as external is the
cautious side, and stays.
51. **Sage's rulings on the Vikunja probes (2026-10-04).** Source:
Researcher, `agents/researcher/work/2026-10-04_vikunja-probes.md`
(sha256 ef0beec6…), probes P1 to P7 against a scratch
`vikunja/vikunja:2.7.0` (digest e2204a1c…), since removed. Where the
probes and addendum A disagree, the probes win.
- Token scopes: addendum A's example group names don't exist, and
Vikunja refuses unknown groups with 400. Darkwing rewrites the
scope map from the real route groups in addendum B.
- Polling on `updated` misses bucket moves between columns that
aren't done, bulk label sets and deletions. The hourly reconcile
alone would leave a person's column move unseen for up to an hour.
Darkwing proposes in addendum B how the 30-second poll catches moves
and deletions too, for example by also listing the task ids in each
bucket of the project's kanban view. At slice 1 scale that costs a
few requests per poll.
- Vikunja doesn't enforce `If-Match`. The broker compares before it
writes and the race window stays, as 6.8 already says. The broker
writes with `PATCH` of owned fields only, never `PUT`, which
clears omitted fields. Labels change only through the single add and
remove routes, never as a `labels` key in a `PATCH` body.
- A 401 means either an expired token or one out of scope. The broker
checks `expires_at` itself, both after minting (Vikunja accepts a
past date) and before each use, then treats any 401 as a refusal
and logs both possible causes.