docs(19.7-09): deferred items for the gap closure

B-IN-05 (deferred, the shared confirm primitive), B-IN-06 (no fix
needed), the admin:token:revoke event, the OIDC decision (resolved), the
local go.work retarget, the demo pins, the release order with
PHASE197_RELEASED, the lenient link code parse and one offline-build
flake; the plan 05 test-commit entry is superseded by the release.
This commit is contained in:
2026-10-23 18:55:37 +02:00
parent a636933299
commit e1f489058c

View File

@@ -146,8 +146,11 @@ was changed by the plan that recorded it.
pinning summercms v0.4.4 (the demo's release build, oauthserver v0.1.2,
Journal v0.2.3) lack them until they require the next framework tag
(v0.5.0 at phase completion, after the user's go-ahead).
**Gap closure (19.7-09):** the same holds for every framework fix of plans
06 and 07; they ship together in v0.5.0 (see "Release order after the gap
closure" below).
- Plan 05 test commits are local and untagged (found during 19.7-05 Task 3)
status: open
status: resolved
**What:** sm-user-plugin 72de822 (in the sm-demo-app submodule checkout
`plugins/golem15/user`), sm-oauthserver-plugin 2929c91, sm-journal-plugin
a9a9b80 and sm-demo-app 6fa2d56 add tests only; none is pushed or tagged.
@@ -158,6 +161,11 @@ was changed by the plan that recorded it.
(sm-user-plugin v0.1.11, sm-oauthserver-plugin v0.1.3, sm-journal-plugin
v0.2.4) is optional; it would change no shipped code. Push and tags wait
for the user.
**Superseded (19.7-09):** the plugins now also carry the non-test fixes of
plan 08 and the tests of plan 09, so the plan 05 test commits ship in the
gap-closure plugin tags that require framework v0.5.0; the entries "Demo
plugin submodules and pointers wait for the release" and "Release order
after the gap closure" below track them.
- Superuser refusal switch, conditional (found during 19.7-05 Task 4)
status: open
**What:** the security review accepted superuser reach through an agent
@@ -166,3 +174,92 @@ was changed by the plan that recorded it.
destructive backend tool beyond content editing, add the switch (a
`fix(pier)` with README and docs) and cut a framework patch tag with the
user's go-ahead.
- B-IN-05: a prompted record action refused with 422 closes the dialog (found in the code review, deferred by 19.7-07)
status: open
**What:** when a prompted record action answers 422, the SPA shows the
error toast and closes the prompt dialog, so the typed text is lost.
Plan 07 corrected the contract text (the 422 toast behaviour is now what
the docs and the OpenAPI description say). Keeping the dialog open needs a
change to the shared confirm primitive every action uses (the dialog
resolves before the request answers), which is out of the gap closure's
scope. Follow-up: let the confirm primitive keep the dialog open on a
refused submit and show the field error inline.
- B-IN-06: `window.open` after an awaited POST can be blocked by a popup blocker (found in the code review)
status: resolved
**What:** no fix required. My account always renders the answered URL as
a visible link next to the section (`data-account-contribution-url`), so
an administrator whose browser blocked the popup clicks the link
(pinned by `admin/tests/account/AccountContributions.test.ts`).
- `admin:token:revoke` fires no MCP event (found during 19.7-07)
status: open
**What:** the CLI command revokes an admin personal token's row but does
not fire the token-specific `revoked` subject event that the My account
revoke fires (`fireTokenRevoked`). The verifier side refuses the revoked
token on the next request, so access ends; only a live MCP session of
that token keeps its stream until its next request or re-check. Same
shape as before plan 07. Fix: call the same helper from the command after
its transaction.
- OIDC grants on a ban or a password reset (decided during 19.7-08)
status: resolved
**What:** the user decided on 2026-10-23 that a ban, a password reset, an
administrator setting a password and the user's own password change end
both the MCP and the OIDC grants of the user (tokens revoked, consents
and unused codes deleted, subjects kept). Implemented by
`Cascade.OnAccessRevoked` (sm-oauthserver-plugin 671513d) and pinned by
`TestMCPGrantRevocation` ("access revoked ends earlier MCP and OIDC
grants and keeps later ones") and `TestMCPRevocationSmoke`.
- Local sm-oauthserver-plugin go.work retarget (found during 19.7-08 Task 2)
status: open
**What:** the tracked `go.work` of sm-oauthserver-plugin is modified in
the working tree only: its `sm-user-plugin` replace points at
`../sm-demo-app/plugins/golem15/user` (the canonical user checkout of the
gap closure) instead of the committed `../fonoteka.go/plugins/golem15/user`.
The phase gate's workspace check requires exactly that target, so the
gate passes on this machine only with the local edit. Before the release
either restore the committed line or decide whether go.work should leave
version control; never commit the local retarget.
- Demo plugin submodules and pointers wait for the release (found during 19.7-08, updated by 19.7-09)
status: open
**What:** in sm-demo-app the working-tree checkouts of
`plugins/golem15/oauthserver` (671513d, its canonical checkout is at
65f71dc with plan 09's test), `plugins/golem15/journal` (b129902,
canonical at 2aeeccc) and `plugins/golem15/user` (the canonical user
checkout itself, 38551a4) are ahead of their committed pins (v0.1.2,
v0.2.3, v0.1.10) by unreleased commits. The gate reports them as
`pins: … is ahead of its pin by unreleased commits` and refuses them with
`PHASE197_RELEASED=1`. The pointers are committed only after the plugin
tags. sm-demo-app's `vue-demo-app` pointer is committed (00f57bf, then
f53d30a for the link code test): vue-demo-app (0125e29, b973a76) must be
pushed before sm-demo-app.
- Release order after the gap closure (decided 2026-10-23)
status: open
**What:** nothing of plans 06-09 is tagged or pushed. After the re-review
of the gap closure, phase verification, Nyquist validation and UAT pass,
and on the user's go-ahead:
1. framework v0.5.0 (and the changelog post);
2. the sm-user-plugin, sm-oauthserver-plugin and sm-journal-plugin tags
that require it;
3. the bumps in sm-demo-app, fonoteka.go and sm-bm-app, with vue-demo-app
pushed before sm-demo-app;
4. sm-servers-app picks up E-1 and E-2 after the user plugin tag;
5. then `PHASE197_RELEASED=1 bash scripts/check-phase19.7.sh --consumers`
must pass (every demo pin on its tag, no drift).
- `readLinkCode` accepts a valid code next to other fragment parameters (found during 19.7-09 Task 3)
status: open
**What:** plan 09 described "extra parameters give ''" for the link page's
code reader. `readLinkCode` parses the fragment with URLSearchParams, so
`#code=<64 hex>&next=/x` answers the code, while an extended or foreign
value (`#code=<hex>x`, `#other=<hex>`) answers ''. `linkCode.test.ts`
pins the latter and leaves the former unasserted. My account only ever
sends `#code=<code>`, so nothing depends on it; the re-review decides
whether to keep the lenient parse or require the fragment to be exactly
`code=<64 hex>`.
- `docs/examples/blog` test failed once on GOPROXY=off (found during 19.7-09 Task 1)
status: open
**What:** one `go test -short ./...` run of the gate's go stage failed in
`docs/examples/blog` with "module lookup disabled by GOPROXY=off" for
`golang.org/x/exp`; the package passed alone and in more than twenty later
full runs. The test builds a scratch module offline and depends on the
module cache holding every dependency; a run that coincides with a cache
change may miss one. Not caused by this phase's code; watch for a
recurrence.