docs: lead decision 150, limit-check interface 2 with report (row 125, dewey-0593)

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-10-18 11:21:22 -05:00
co-authored by Claude Opus 5.5
parent 25eb9e9768
commit 0f715a0542
+25
View File
@@ -3376,3 +3376,28 @@ which stay with him. Each item names who decided it and what happened.
order of kinds: channels still come after the providers and before
the task tracker. Mos ruled that it doesn't need Jason, and told
Jason so in mos-0726.
150. **The limit-check kind goes to interface version 2 with a `report`
export (2026-10-18, Sage sage-0746, replying to Dewey dewey-0593 on
row 125, #1619).** With only `mayLaunch` and `mustStop`, core can't
show each limit's count, unknown turns or "not enforced". Every
workaround breaks a rule: core recounting puts token-limit's meaning
in core and breaks row 126's no-launcher-change line, naming
`token-limit` breaks REQ-PLUG-1, and calling an undeclared export
breaks the loader's contract. No limit-check module exists yet, and
the only v1 user is the test fixture. The interface is defined in
`packages/plugins/src/kinds.mjs` and `packages/plugins/README.md`,
not the PRD.
- `report({business, limits, records, now})` returns
`[{path, limit, since, count, kinds, unknownTurns}]`. The loader
refuses a v1 limit-check module.
- Core marks a limit "not enforced" when no switched-on check lists
it in `report`. A key limit stays "not enforced: no records name a
key" while every record's account is null, which holds until row 126.
- Fail closed: a thrown or malformed `mustStop` stops the session at
the end of its turn, a thrown or malformed `mayLaunch` refuses the
launch, and a thrown or malformed `report` shows "check failed"
rather than "not enforced" or a count. Each is logged with the
check name and tested.
- Limits live in the organization file. Row 125 needs no bus schema
change, so Mos's re-pin plan carries no migration for it.