This post is the single authoritative registration of the skills seat. Four-section template; the job description is versioned at .claude/skills/pm-dispatch/references/lanes/skills.md — ⛔ not copied here.
Current PM
🟢 os-litant — session session_01LraLgQVGq8egUwfYZpbYt1, assumed 2026-09-02T01:12Z, maintainer-invoked interactive session (/pm-dispatch skills). Maintainer's in-session directives this shift (verbatim, untranslated): 「审核所有的 skills,进行全面的优化。」 → program anchor #14292 ; 2026-09-02T15:1xZ 「90分钟后,并发加到5」 → heavy slots = 5 from 16:4xZ ; 2026-09-02T23:2xZ 「继续」 → the seat resumed dispatching; 2026-09-03T02:2xZ 「最近 51 次队列构建 14 次失败(27%)。 什么原因」 → answered in chat 02:31Z and recorded on the queue-flake anchor #14648 (comment 5519439748); 04:1xZ 「14715 已经合并啦」 → verified accb9231c7; 04:18Z 「现在队列恢复了吗」 → answered 04:27Z: not recovered, four post-fix ejects read from raw logs and recorded on #14648 (5520320723); 04:2xZ 「…这个谁在解决」 → answered 04:31Z: nobody, the card closed, no PR on the file; 04:3xZ 「14648 已经解决了」 → the seat could not confirm it from primary sources at 04:31Z, said so, stopped reading the queue, and corrected its own "reopening" line on the anchor (5520385642). Round-open marker = this session's takeover comment; the shift-close briefing will be the final comment. Round reports (中文) in chat at 07:0xZ … 23:4xZ (09-02), 00:2xZ, 01:06Z, 01:27Z, 01:35Z, 01:47Z, 02:01Z, 02:14Z, 02:38Z, 03:18Z, 03:34Z, 04:23Z, 04:31Z, 04:33Z, 05:35Z, 05:59Z, 09:22Z, 10:03Z, 10:10Z, 10:21Z, 11:00Z, 11:31Z, 12:16Z, 12:36Z, 13:0xZ and 13:4xZ (09-03; the 05:59Z one carries decision #14859 and the 10:03Z one decision #14909 for a one-line reply). Timers: check-in #44 at 2026-09-03T14:43Z (send_later; 60-min cadence after two silent rounds, #42 and #43 ); devs notify on delivery. Readings carry the moment they were taken; from the 01:18Z revision the seat writes exact-minute UTC stamps. ⚠️ Correction on record (03:17Z revision): the 02:38Z revision's "merge patrol at 02:32Z, none merged" described a patrol that was NOT run; a patrol line is written only from a git log run in the same minute. ⚠️ Second correction (04:41Z): the 04:00Z revision's "ACCEPT at green" for #14819 described an ACCEPT that had not been posted — the check-in's get_comments read found none; it was posted at 04:41Z (5520455372). ⚠️ Third correction (06:33Z): the item-4 ACCEPT (5521562711) named two follow-up cards as "#14864 / #14865 " before create had returned their numbers; they are #14869 and #14870 (corrected on the card in the same minute, comment 5521570388).
Inherited + running ledger
[Decision] Skills optimization program — batch 1 (4 items): new-file ceilings for splits · planned-eval stubs · react-blocks double rendering · published pm-dispatch scope #14296 RULED 1A 2A 3A 4A and CLOSED by the seat at 2026-09-03T00:59Z : items 1, 2, 4 merged; item 3's execution is the domain:spec seam card Seam (spec lane, ruled): gen:react-blocks stops emitting skills/objectstack-ui/contracts/react-blocks.contract.json — the markdown rendering becomes the single AI-facing output (#14296 item 3 = A) #14559 (open, pm:queue, the spec lane's). ⚠️ Seat correction on record: PR skills(api): delete the planned-eval stub and drop its ceiling row (#14296 item 2) #14564 merged 2026-09-02T13:17:58Z and the seat read it eleven and a half hours late; nothing was blocked.
[Decision] Skills optimization program — batch 2 (1 item): does #14296 item 1's "≥10% off the package in the same PR" bind the split PR arithmetically, or is it the anti-growth guard? (ui split measured at −0.16%) #14568 RULED A and CLOSED : executed on all three splits, merged 2026-09-02 22:4xZ–23:0xZ.
Decision batch 3 = [Decision] Skills optimization program — batch 3 (5 items): DATA-F-07 defineHook() vs the platform's own examples · #13597 Phase-2 — X0 quote policy · CLAUDE.md excerpt form · the four-copy decision frame · cross-file line-budget moves #14685 RULED 1A 2C 3B 4B 5A (director seat record 5520452691 at 04:40Z, maintainer verbatim 「同意,然后执行契约复审」; read by the seat at 05:25Z). Post-ruling steps taken 05:29Z: item 1 → migration card Migrate the two in-repo hook examples (app-crm OpportunityStageHook, app-todo taskHook) to defineHook() so the platform's own examples match what the published data skill teaches (#14685 item 1, ruled A) #14850 filed (examples, bare) and Skills optimization flight — skills/objectstack-data: RESTRUCTURE (≈ −10,150 tok, −22%) — hooks taught twice across two files, generic-JS patterns, 3.3% example gate coverage, sharingModel used by 31/31 objects and explained nowhere #14297 CLOSED completed (pm:queue stripped); ruling recorded on PM corpus audit (maintainer-directed): classify every instruction line — keep / duplicate / demote / delete — then rewrite and re-lock every ratchet #13597 (5520981526), [finding] The &page=N completeness walk refuses with HTTP 422 past 9,900 items — the ceiling on the remedy #14068 just landed #14133 , finding(skills): spec@objectui shift-end report 2026-09-02 — two principle gaps (types-face routing vs. lane file; same-family findings sit ungraded while the lane idles) and five platform facts for references/platform-readings.md #14445 , [finding] The in-seat contract-review path was read as "the implementing session reviews its own diff" — PR #14191 was PASSed and label-cleared by its author session, dropping the independence clause and the director seat's never-writes-code charter in one act #14209 ; [Decision] Skills optimization program — batch 3 (5 items): DATA-F-07 defineHook() vs the platform's own examples · #13597 Phase-2 — X0 quote policy · CLAUDE.md excerpt form · the four-copy decision frame · cross-file line-budget moves #14685 CLAIMED by the seat (pm:queue → pm:dispatched, claim 5520978602) and items 2–5 dispatched as four flights (below), each Part of #14685 + Part of #13597, draft-only, in-seat contract review before any human review request.
Merged this shift (program + lane) : skills(ui): optimization flight — date macros/relationships pointed at their anchors, searchableFields and timeSegments cut, dashboards consolidated, retired widget keys removed (net −2,585 tokens) #14338 · skills(data): optimization flight — hooks consolidated, generic patterns cut, sharingModel/Field.* /storage.notNull taught (net −9,044 tokens) #14427 · skills(pm-dispatch): optimization flight — monorepo-only lore cut, the report JSON printed once, upstream reporting pointed at objectstack-platform, five drifts synced to the dev contract (net −2,982 tokens) #14444 · skills(api): optimization flight — RestApiEndpointSchema example and other packages' anchors cut, the apiMethods rule stated once, http.server mount / error ledger / OCC taught (net −1,676 tokens) #14448 · objectui#7242 · skills(query): optimization flight — seven twice-stated rules merged into rules/, removed-key history collapsed to one table, search/flow-filter/compareTo pointed at their anchors, context and the calling convention taught (net −2,139 tokens) #14443 · skills(upgrade): optimization flight — the stale pinned registry snapshot cut, the rule stated once, --yes and the --stored exit-code contract taught (net −1,134 tokens) #14465 → Skills optimization flight — skills/objectstack-upgrade: DIET (≈ −1,808 tok, −22%) — a stale pinned 17.0.0-rc.5 registry snapshot (drift 29–165%), one rule stated five times, and a --stored --apply command that exits 1 for every agent reader because it omits --yes #14307 · skills(automation): optimization flight — the authored control-flow trio taught and the BPMN trio demoted, notify given its fence, the eval deduplicated, hooks and ETL pointed away (net −1,278 tokens) #14467 · skills(formula): optimization flight — cut the cron/template quickrefs and section-5 narration, teach virtual formula fields and fault-open form predicates (net −844 tokens) #14563 → Skills optimization flight — skills/objectstack-formula: DIET (≈ −1,265 tok, −21%) — 21% of the file on previous vs record, cron/template surfaces the frontmatter routes away (0 corpus usages), and the one decision the package exists for (formula fields are virtual: where/orderBy on one = 400) taught nowhere #14316 · objectui#7370 → objectui#7251 · objectui#7375 · skills(automation): delete the planned-eval stub and drop its ceiling row (#14296 item 2) #14578 → Skills optimization flight — skills/objectstack-automation: RESTRUCTURE (≈ −1,125 tok net / −2,105 gross) — the package teaches a control-flow trio with zero authorings (parallel_gateway/join_gateway/boundary_event) and never mentions the trio the corpus uses (parallel/try_catch/loop); notify (#1 node type, 20 uses) has one table cell; the description still promises ETL pipelines removed in spec 17 #14308 · skills(query): delete the planned-eval stub and drop its ceiling row (#14296 item 2) #14585 → Skills optimization flight — skills/objectstack-query: RESTRUCTURE (≈ −4,088 tok, −33%) — seven rules stated twice across SKILL.md and rules/, 27% of tokens on an aggregation surface with zero app-author call sites, context (74 real usages) taught nowhere, and the canonical expand example expands nothing #14302 · skills(platform): optimization flight — orphan and pointer files removed, hooks reference linked directly, requires/engines/onEnable taught (net −3,608 tokens) #14351 · skills(i18n): optimization flight — drop the restated overview, the zero-usage layout and plugin bootstrap and the duplicate template; teach the generated-bundle shape and the --objects-only divergence (net −2,069 tokens) #14574 → Skills optimization flight — skills/objectstack-i18n: DIET (≈ −1,685 tok, −27%) — "Core Concepts" restated in full four sections later, a per-namespace layout with zero real usages, os i18n check taught in six places, and the #1 real pattern (a package shipping its own generated bundle) dead-ends #14315 · docs(skills): the four small internal skills — seven dead references, four copies replaced by pointers, and the live-elsewhere never-remove verdict #14598 → Skills optimization flight — the four small internal skills (+ objectui verify): seven dead references, three rules copied from os-dev.md / SWEEP.md / RUNNER.md, the live-elsewhere gap (#14058), and a versioned Chromium path that breaks on the next image bump #14317 + [finding] spec-property-retirement skill predates the live-elsewhere verdict — its ledger-verdict discipline never names the never-remove cross-repo case #14058 · skills(ai): optimization flight — the closed agent surface cut to its retirement rows, the flagship defineSkill example made to resolve, open-edition MCP wiring and the tool registry taught (net −1,315 tokens) #14463 · skills(api): delete the planned-eval stub and drop its ceiling row (#14296 item 2) #14564 → Skills optimization flight — skills/objectstack-api: RESTRUCTURE (≈ −2,125 tok, −31%) — the leading canonical example teaches RestApiEndpointSchema (0 consumers repo-wide), three sections are other packages' anchors, and the description forbids the client seat that ~660 tokens of body then teach #14304 · fix(pm): the contract-review tier constant names the served tier and is the only place the tier's value lives (#14303) #14644 → finding(pm-dispatch): CONTRACT_REVIEW_TIER = 'claude-fable-5' no longer matches the served Fable tier claude-fable-5-1, so the in-seat review fuse reads a literal mismatch on every current Fable seat #14303 · docs(os-dev): the skip-changeset clause states its criterion as the rule and its list as examples; dispatch-gates prints the same criterion (#13680) #14621 → [finding] The os-dev skip-changeset clause states a CLOSED surface list that omits repo-root tooling config — the criterion beside it, and the repo's own merged precedent on the SAME file, both cover it #13680 · objectui#7407 → objectui#7358 · docs(scripts): make check-agent-model-declared's header the stated home of the model-resolution order #14689 → [finding] check-agent-model-declared's header will point at os-dev.md for "the full order and both adjacent traps" once the model-pin comment shrinks to a pointer back at it #14232 · objectui#7412 → objectui#7404 · objectui#7414 → objectui#7403 · the 22:4xZ–00:0xZ batch: skills(ui): split the entry into SKILL.md + rules/ under #14296 item 1 (package net −58 tokens, −0.17%) #14658 (→ Skills optimization flight — skills/objectstack-ui: RESTRUCTURE (≈ −9,170 tok, −25%) — a 25.4k-token single entry file, dashboards taught in two sections 640 lines apart, a generated contract shipped twice, and the canonical dashboard example teaching two retired widget keys #14298 CLOSED) · skills(ai): delete the planned-eval stub and drop its ceiling row (#14296 item 2) #14652 → Skills optimization flight — skills/objectstack-ai: RESTRUCTURE (≈ −2,300 tok, −29%) — 26% of the file teaches the agent surface it forbids its readers, the flagship defineSkill example declares four tools that resolve to nothing, and the open-edition MCP path (the only AI path without a cloud licence) is taught nowhere #14305 · skills(pm-dispatch): split the entry into SKILL.md + rules/ under #14296 items 1 and 4 (entry 9,708 tokens, package net −21) #14660 → Skills optimization flight — skills/objectstack-pm-dispatch: RESTRUCTURE (≈ −4,255 tok, −29%) — monorepo-only lore inert in a customer project, the report JSON printed twice, and four drifts from the internal dev contract (report double-channel, premise_still_valid, the stash ban, the Session: line) #14300 · skills(i18n): validation messages are a translation group since #14253 — correct the claim and its neighbours (net +7 tokens) #14664 → Published skill objectstack-i18n teaches that validation messages are not a translation group — false once #14253 lands #14377 · skills(data): split security into rules/security.md under #14296 item 1 (package net −64 tokens) + DATA-B-06 #14673 (→ Skills optimization flight — skills/objectstack-data: RESTRUCTURE (≈ −10,150 tok, −22%) — hooks taught twice across two files, generic-JS patterns, 3.3% example gate coverage, sharingModel used by 31/31 objects and explained nowhere #14297 pm:queue) · skills(platform): delete the placeholder eval README and drop its ceiling row (#14296 item 2) #14681 → Skills optimization flight — skills/objectstack-platform: RESTRUCTURE (≈ −5,970 tok, −25%) — an orphan rules file with zero inbound links, the canonical hooks reference two hops from the entry file, "When to Use" printed twice, and requires: / engines.protocol / onEnable (every real config) taught nowhere #14299 · test(pm): pin the contract-review tier's one-value-site promise in the dispatch-gates self-test (#14616) #14672 → [finding] The one-value-site promise for CONTRACT_REVIEW_TIER (SKILL.md 「模型升级只改一行一个文件」) is held only by a manual grep — no self-test pins it, so the next model refresh can re-open the drift silently #14616 · docs(pm-dispatch): rule how clause ② is graded — provisional claim, mechanical floor, judged conformance #14696 → [decision] Clause ② has at least three distinct classes and they are being judged case-by-case — rule how each is graded, or the gate is a coin-flip #14047 · docs(pm-dispatch): make the stop-condition clause carry the executability criterion #14697 → [finding] 派发令里的「动手前先报告」对一次性子代理不可执行 —— 它没有中途提问的通道,该形态等价于「不要做」或「你自己看着办」,而两者意思相反 #14031 (→ Census of dispatch templates and skills text for the unexecutable "report before acting" fence form, now that the executability criterion is landed #14768 filed, bare) · objectui#7408 → objectui#7360 · objectui#7416 → objectui#7406 (2026-09-03T00:21Z) · docs(skills): repair five semantic minors in the axis-weighting and batch-presentation encoding #14779 → [finding] Five semantic minors in the axis-weighting/batch-presentation encoding — caught by the at-tier review the frame-sync gate structurally cannot perform #14146 (card closed 02:51Z; label-cleaned 03:16Z) · docs(agents): a released-package bug fix takes a patch changeset, never none #14789 → [finding] AGENTS.md says "Pure bug fixes do not require a changeset" — a pure bug-fix PR in a released package following it literally has no green path through Check Changeset #14647 (closed 03:08Z; label-cleaned 03:16Z) · skills(data): drop the two bare ADR-0010 citations from the objectstack-data skill #14777 → [finding] Bare ADR numbers in the published catalog — 177 sites, and three protection.reason examples teach customers to write see ADR-0010 into their own metadata #11791 (82a294bff3; closed 03:52Z by os-zhuang; label-cleaned 03:59Z, comment 5520116383) · fix(skills): teach {current_user_id}, not $currentUser, in the objectstack-ui Filtering example #14781 → skills/objectstack-ui teaches $currentUser as a filter value, contradicting its own "only two tokens resolve in a filter" contract #14139 (521eaf9e41; closed 03:52Z; label-cleaned 03:59Z, comment 5520117157) · objectui#7422 → objectui#7405 (12bca53, merged 06:24:01Z; card closed 06:38Z by os-zhuang; label-cleaned 06:55Z, comment 5521810219) · objectui#7427 → objectui#7359 (c92dc41, merged 06:27:06Z — check-skill-examples.mjs + Skill Example Check on objectui main; card closed 06:42Z; label-cleaned 06:55Z, comment 5521811043) · docs(agents): stop telling authors to hand-edit generated CHANGELOG.md #14802 → [finding] AGENTS.md:1154 post-task checklist tells the author to "Update CHANGELOG.md" by hand — but CHANGELOG.md is generated from changesets at release and ships inside the npm package #14792 (f116b8f8d1; card closed 08:17:56Z by os-zhuang; label-cleaned 08:28Z, comment 5522855785; AGENTS.md:1154 released). Every closed card label-clean. Merge patrols at 09:10Z, 09:59Z, 10:46Z and 10:58Z (git log --grep '(#<pr>)' per terminal PR on the fetched origin/main, cross-checked at 10:59Z against the API's list_commits head: objectstack 450e73b4e8 = refs/heads/main, objectui 20cb8db = refs/heads/main): PR fix(pm): refuse --tier against --commands / --json instead of silently preferring the tier #14765 → dispatch-gates: --tier --commands silently prefers --tier — the one two-stdout-shape blend the CLI does not refuse #14294 merged 2ee88cb063 at 07:48:47Z (closed by the director seat 10:06:36Z; label-cleaned 10:56Z, comments 5524656758 + correction) and objectui#7490 → objectui#7463 merged ac8d523 (queue commit 10:07:42Z, landed 10:21:54Z per the API). ⚠️ Two readings on record as wrong: every patrol from 09:10Z to 10:46Z read objectstack origin/main at 1596b4c585 (07:48:45Z) while ten merges up to 08:53Z were already on main — the shared checkout's fetch returned a head about two hours stale and moved only at 10:53Z; and the 10:48Z reading named 5c09fd5 (10:21:54Z) for objectui#7490, a sha that exists in no ref or reflog of the checkout — corrected on QA run · api-backend (FULL area) · a86db175 · 2026-08-10 · 6 PASS / 2 PARTIAL / 3 FAIL #7463 (5524664881). From this round a patrol reading is the git log and the API head in the same minute, with the newest subjects printed beside the grep. 11:27Z patrol (git head = API head: objectstack 7317cf266e, objectui 48c19bd): PR docs(pm-dispatch): collapse CLAUDE.md's four excerpts to rule, hook and anchor #14855 → [Decision] Skills optimization program — batch 3 (5 items): DATA-F-07 defineHook() vs the platform's own examples · #13597 Phase-2 — X0 quote policy · CLAUDE.md excerpt form · the four-copy decision frame · cross-file line-budget moves #14685 item 3 merged 5290fcbe91 (queue commit 08:56:04Z) and PR docs(pm-dispatch): keep two copies of the decision frame, not four #14862 → [Decision] Skills optimization program — batch 3 (5 items): DATA-F-07 defineHook() vs the platform's own examples · #13597 Phase-2 — X0 quote policy · CLAUDE.md excerpt form · the four-copy decision frame · cross-file line-budget moves #14685 item 4 merged 7b19b9ea88 (08:58:12Z), both on main between the 10:59Z and 11:27Z readings — CLAUDE.md at 36 lines and the decision frame at two copies are live; [Decision] Skills optimization program — batch 3 (5 items): DATA-F-07 defineHook() vs the platform's own examples · #13597 Phase-2 — X0 quote policy · CLAUDE.md excerpt form · the four-copy decision frame · cross-file line-budget moves #14685 stays pm:dispatched until PR tooling(pm): admit a same-PR cross-file line-budget move, and take the first one #14860 and PR docs(pm-dispatch): X0 quote policy — date pointers for non-operative maintainer quotations (item 2 of the skills batch, ruling B) #14911 land (recorded on the card 11:29Z). 12:13Z patrol (git head objectstack b1d49b3940, one merge ahead of the API's 3210b3d5da read a minute earlier; objectui e176053 = API): PR docs(skills): the AI domain has no CEL site — correct the os validate clause in objectstack-ai #14819 → [finding] skills/objectstack-ai/SKILL.md:405-406 calls a model-registry promptTemplate.system / .user "a CEL predicate" — those keys are the template dialect ({{var}}), and the AI domain has no CEL site at all #14797 merged d355c36115 (queue commit 09:21:57Z; closed by os-zhuang 11:32:37Z; label-cleaned 12:14Z, comment 5525562567); docs(agents): guard history dating against a shallow clone #14808 , tooling(pm): admit a same-PR cross-file line-budget move, and take the first one #14860 , docs(pm-dispatch): X0 quote policy — date pointers for non-operative maintainer quotations (item 2 of the skills batch, ruling B) #14911 , objectui#7473 and objectui#7496 still open. 12:54Z patrol (git head = API head: objectstack e560b4d513, objectui e176053): no terminal PR merged; docs(agents): guard history dating against a shallow clone #14808 , tooling(pm): admit a same-PR cross-file line-budget move, and take the first one #14860 , docs(pm-dispatch): X0 quote policy — date pointers for non-operative maintainer quotations (item 2 of the skills batch, ruling B) #14911 , docs(skills): stop promising os validate checks a model-registry entry #14953 , objectui#7473 and objectui#7496 open. 13:40Z patrol (git head = API head: objectstack 9c7237c8d6 12:48:28Z, objectui 2d3fe73 12:56:13Z; the newest subjects printed beside the grep): no terminal PR merged; the same six open.
At the governed terminal, awaiting the maintainer (in-seat ACCEPT on record; reviewers requested and read back): [finding] In the agent containers' shallow checkout, git log -S reports the horizon commit as the introduction of far older text — exit 0, plausible sha, plausible date, no warning — and the os-dev contract carries no guard for dating history #14793 — PR docs(agents): guard history dating against a shallow clone #14808 (draft; ACCEPT 5519891496 at 03:28Z) · [Decision] Skills optimization program — batch 3 (5 items): DATA-F-07 defineHook() vs the platform's own examples · #13597 Phase-2 — X0 quote policy · CLAUDE.md excerpt form · the four-copy decision frame · cross-file line-budget moves #14685 item 5 — PR tooling(pm): admit a same-PR cross-file line-budget move, and take the first one #14860 @62ddd75fb5 (Part of; the cross-file-move rule + remedy-authority exception + the first move, +10 vs −11, map total 5112 → 5111; contract review PASS 5521371476 at 06:12Z with the seat's own gate runs and one reverse-verification mutation in a compare worktree; label stripped; ACCEPT 5521461378 at 06:23Z , reviewers read back) · [Decision] Skills optimization program — batch 3 (5 items): DATA-F-07 defineHook() vs the platform's own examples · #13597 Phase-2 — X0 quote policy · CLAUDE.md excerpt form · the four-copy decision frame · cross-file line-budget moves #14685 item 2 / [Decision] Skills optimization program — batch 4 (1 item): #14685 item 2's replacement form — ruling C's "date + pointer to the authoritative GitHub comment" collides with the 2026-08-12 "numbers go" ruling that check-skill-id-lint enforces on the same surface #14859 — PR docs(pm-dispatch): X0 quote policy — date pointers for non-operative maintainer quotations (item 2 of the skills batch, ruling B) #14911 @5b72f66fce (Fixes #14859 + Part of; the X0 quote policy in ruling B's form — 44 + 2 sites on the two named files, 34 in references/**, five meta-rule sentences aligned, −42 lines / −1,604 tokens; contract review PASS + ACCEPT 5524205946 at 10:19Z, label stripped, reviewers os-zhuang + hotlong read back 10:20Z, comment 5524214132) · [finding] skills/objectstack-ai/SKILL.md:396 tells the author to run os validate after "a model-registry entry" — a record os validate cannot see, which :332 in the same file already says (agents / tools / skills are the only AI stack collections) #14836 — PR docs(skills): stop promising os validate checks a model-registry entry #14953 @741e8e7071 (Fixes; two intra-line deletions in skills/objectstack-ai/SKILL.md, −8 tokens; contract review PASS + ACCEPT 5525831919 at 12:34Z, label stripped, reviewers read back 12:35Z). Four objectstack PRs, every one a governed surface (PR docs(skills): admit hand-authored reference files under references/ in the catalog anatomy #14786 → [finding] Catalog anatomy drift: hand-authored per-topic files live under references/ (reserved for generated pointers) in objectstack-platform and objectstack-data, unlinked or linked only by path — PLAT-G-02 / the data-hooks.md shape, catalog-wide #14655 and PR docs(skills): settle two false claims in skills/README.md and add three cross-skill routing bullets #14795 → skills/README.md truth + routing sweep: OLD/NEW "evaluate to null since M9.5" is anchored nowhere and contradicts the formula skill; "AI tool params" is not a CEL site; the cross-skill routing list lacks the upgrade-vs-platform and objectui inbound decision points #14794 + [finding] Nothing routes an agent authoring object/field/view labels to objectstack-i18n — the cross-skill routing list in skills/README.md has no labels-vs-bundles decision point #14566 merged at 02:35Z, PR docs(pm-dispatch): timestamped readings are the first construct-shaped fix; record the remediation-shape ranking beside it #14784 → pm-dispatch: the PM-side self-discipline class recurs because its remediations are RULES — #11901 chose construct-removal instead and held; four rule-shaped fixes failed again today #12911 merged 1596b4c585 at 07:48:45Z and PR fix(pm): refuse --tier against --commands / --json instead of silently preferring the tier #14765 → dispatch-gates: --tier --commands silently prefers --tier — the one two-stdout-shape blend the CLI does not refuse #14294 merged 2ee88cb063 at 07:48:47Z — all four missed by the patrols until the 09:10Z, 09:59Z and 10:58Z readings; the five cards label-cleaned 09:12Z, 10:06Z and 10:56Z; PR docs(pm-dispatch): collapse CLAUDE.md's four excerpts to rule, hook and anchor #14855 and PR docs(pm-dispatch): keep two copies of the decision frame, not four #14862 landed between 10:59Z and 11:27Z, Part of [Decision] Skills optimization program — batch 3 (5 items): DATA-F-07 defineHook() vs the platform's own examples · #13597 Phase-2 — X0 quote policy · CLAUDE.md excerpt form · the four-copy decision frame · cross-file line-budget moves #14685 ; PR docs(skills): the AI domain has no CEL site — correct the os validate clause in objectstack-ai #14819 → [finding] skills/objectstack-ai/SKILL.md:405-406 calls a model-registry promptTemplate.system / .user "a CEL predicate" — those keys are the template dialect ({{var}}), and the AI domain has no CEL site at all #14797 landed between 11:27Z and 12:13Z, label-cleaned 12:14Z), plus objectui#7462 — PR objectui#7473 @ec67429 (governed skills/objectui/**; 16 json → jsonc tag-only; ACCEPT 5522664685 at 08:12Z with the seat's own re-count and a card-premise correction; reviewers read back) and objectui#7494 — PR objectui#7496 @45136c1 (governed skills/objectui/**; the three testing.md bare-any rows retired by the honest idiom, Pattern 6 folded in; contract review PASS + ACCEPT 5525039284 at 11:30Z, label stripped on both carriers, reviewers os-zhuang + hotlong read back 11:31Z, comment 5525078432) — they land by an approver's hand: twelve objectstack drafts did between 01:28Z and 12:13Z, and the two earlier objectui drafts at 06:24–06:27Z, once flipped. Non-governed, at the seat's own terminal: objectui#7461 — PR objectui#7475 @0ee77b8 (the eval-token gate check-skill-eval-tokens.mjs: bundle-wide whole-token oracle, 0 of 125 red, empty shrink-only baseline, own install-free workflow + REQUIRED_CONTEXTS row + pin suite; zero skills/ files; the seat ran the gate, its 29-case self-test, --measure and one reverse mutation in a compare worktree; its own first CI run Skill Eval Token Check green at 08:07:45Z; Test (shard 3/4) red on RecordDetailView.approvalDeclaredActions.test.tsx, a network-escape guard hit in a file the diff does not touch — standing-down note on the PR 5522858059 and the PR's single rerun_failed_jobs spent at 08:29Z; re-run green at 08:39:00Z, all 29 checks green; ACCEPT 5523057806 at 08:44Z, ready flip 08:45Z, auto-merge SQUASH armed 08:46Z, read-back 5523093964 — draft: false, mergeable_state: clean; MERGED e307c98 at 08:46:02Z by the 09:10Z patrol reading; fix(cli): pass unrecognised functions entries through the lowering (#7318) #7461 closed 09:00:57Z, label-cleaned 09:12Z, read back 09:13Z).
In flight — 0 of 5 slots at 13:43Z. [finding] skills/objectstack-ai/SKILL.md:396 tells the author to run os validate after "a model-registry entry" — a record os validate cannot see, which :332 in the same file already says (agents / tools / skills are the only AI stack collections) #14836 delivered 12:32Z as draft PR docs(skills): stop promising os validate checks a model-registry entry #14953 @741e8e7071, at the governed terminal since 12:34Z (claimed 12:14Z, claim 5525564463, dispatched the minute PR docs(skills): the AI domain has no CEL site — correct the os validate clause in objectstack-ai #14819 was read on main; report 5525805359; the two deletions at skills/objectstack-ai/SKILL.md:396 / :404, intra-line, 417 lines unchanged, tokens 5475 → 5467 by the seat's own ratchet run in a compare worktree; the shared os validate fence comment (objectstack-api/SKILL.md:411, byte-identical) left alone; 20 of 21 union gates green, check-test-completeness NOT MEASURED by its own text; the dev's reverse leg re-inserted the phrase and showed the count rise while the ratchet stays green — the honest reading, the ratchet prices size; ModelRegistrySchema confirmed a live cloud-consumed surface (docs/qa/platform-checklist/areas/ai.json:526), so no enforce-or-remove card follows; contract review PASS + ACCEPT 5525831919 at 12:34Z , label stripped from the PR, reviewers os-zhuang + hotlong requested, read-back 5525835828 at 12:35Z; brief carried the frame read from origin/main b1d49b3940 at SKILL.md:886-903 in the dispatch minute; governed, draft). objectui#7494 delivered 11:14Z as draft PR objectui#7496, at the governed terminal since 11:30Z @45136c1 (report 5524854506 + sanitizer repair 5524858493 + addendum 5525009272; claimed 10:53Z, claim 5524622310; brief carried the frame read from origin/main 450e73b4e8 at SKILL.md:886-903 in the dispatch minute — ⚠️ the block moved from :880-897 to :886-903 with the merges since 09:20Z, so the brief locates it by its anchor sentences, not by line numbers): Pattern 3's cast deleted because validateSchema(schema: any) takes the value as given; Pattern 7's private-field reach replaced by the public getClient() seam with a typed vi.spyOn, and three false claims in that fence corrected (client.data.find, $filter not filter, the discovery fetch stub) — the seat re-read every source line the report cites (schema-validator.ts:459, index.ts:2149 / :2454 / :3817 / :4096, data.ts:43 / :133, filter-converter.ts:107 and its single-condition return) and the asserted lowered AST ['active', '=', true] holds; both fences stay marked, the three rows deleted in the same commit, 1 declared row left; needs:contract-review applied by the seat on the PR and the card at 11:18Z (the fence now states a falsifiable operator-semantics claim — the clause the label exists for); the increment ordered 11:18Z landed as 45136c1 (Pattern 6's mockClient as any at testing.md:194, an unmarked fence, replaced by a Partial literal with one named widening — the repo's own idiom — and four false props in that fence corrected; --measure moved the fence from FAIL to pass against built types); contract-review PASS + ACCEPT 5525039284 at 11:30Z , both carriers stripped, reviewers os-zhuang + hotlong requested on the draft, read-back 5525078432 at 11:31Z; CI on 45136c1: Skill Example Check, Doc Snippet Type Check, Type Check, Lint green at 11:29Z, shards running (governed, draft). Routed from the report after dedup: objectui#7497 (QueryParams [key: string]: any at packages/types/src/data.ts:133, bare), finding 2 folded into objectui#7493 (validateSchema(schema: any)), finding 4 folded into objectui#7463 as item 4 (--measure prints the finding line, not the row key). [Decision] Skills optimization program — batch 3 (5 items): DATA-F-07 defineHook() vs the platform's own examples · #13597 Phase-2 — X0 quote policy · CLAUDE.md excerpt form · the four-copy decision frame · cross-file line-budget moves #14685 item 2 (r2) delivered 10:01Z as draft PR docs(pm-dispatch): X0 quote policy — date pointers for non-operative maintainer quotations (item 2 of the skills batch, ruling B) #14911 , at the governed terminal since 10:19Z @5b72f66fce (report 5524030178 + addendum 5524174496: 44 REWRITTEN + 1 NODATE + 5 KEEP + 4 frame-sync on the two named files, stage 2 over references/** 34 rewritten / 4 KEEP / 1 SKIPPED-HOTFILE, nine dangling 原话见 pointers repaired; −42 lines / −1,604 tokens over 8 files; the seat's own runs in a compare worktree at 5b72f66fce (10:18Z): id-lint 23 files clean, the line ratchet with every touched file shrunk (SKILL.md 989 → 964, os-dev.md 469 → 467, runbook 280 → 273), frame-sync 4 copies isomorphic, frame-freshness current, no added line carries an issue number or a comment id, zero 「日期 + 原话」 left on the surface; the increment ordered 10:07Z landed as 5b72f66fce (+9/−10: the five on-surface meta-rule sentences now read the ruled form); contract-review PASS + ACCEPT 5524205946 at 10:19Z on [Decision] Skills optimization program — batch 4 (1 item): #14685 item 2's replacement form — ruling C's "date + pointer to the authoritative GitHub comment" collides with the 2026-08-12 "numbers go" ruling that check-skill-id-lint enforces on the same surface #14859 , needs:contract-review stripped, reviewers os-zhuang + hotlong requested on the draft, read-back 5524214132 at 10:20Z; the two off-surface sentences and the rest-channel.md:90 SKIPPED-HOTFILE site → [finding] After ruling B (#14859), AGENTS.md:12-13 and the scripts/pm/check-skill-id-lint.mjs header still describe the pm-dispatch provenance form as "date + verbatim quote" — the two off-surface sentences PR #14911 could not touch #14913 , bare) on claude/issue-14685-x0-quote-policy ([Decision] Skills optimization program — batch 4 (1 item): #14685 item 2's replacement form — ruling C's "date + pointer to the authoritative GitHub comment" collides with the 2026-08-12 "numbers go" ruling that check-skill-id-lint enforces on the same surface #14859 ruled B at 09:04Z by the director seat, comment 5523304679, 「其他同意」; claimed 09:12Z, claim 5523451958; brief carries ruling B verbatim, the (YYYY-MM-DD 裁定) form at the 44 sites, stage 2 over references/**, and the frame verbatim; dev tier fable per the protocol-surface clause; PR will read Fixes #14859 / Part of #14685). objectui#7463 delivered 09:50Z (report 5523867580; needs_decision on item 2 only): PR objectui#7490 @2df07b7 — items 1 (the bare-any assertion; 4 rows declared in the shrink-only KNOWN_BARE_ANY_EXAMPLES, zero new red) and 3 (SCAN_ROOTS + .claude/skills; 9 candidates, 0 marked) delivered; NOT GOVERNED by the seat's own guard run over all 3 paths (09:53Z); the seat probed the exported findBareAny on ten shapes in a compare worktree (09:57Z) and matched the port line for line against objectstack's position table :885-894; ACCEPT 5523967476 at 10:03Z ; first line changed to Part of #7463 by the dev at the seat's request (item 2 stays open); all 29 checks green by 10:01:25Z; ready flip + auto-merge SQUASH at 10:07Z , read back draft: false at 10:08Z (read-back comment 5524077227); MERGED ac8d523 (queue commit 10:07:42Z, landed 10:21:54Z; the 10:48Z 5c09fd5 reading corrected at 10:57Z); QA run · api-backend (FULL area) · a86db175 · 2026-08-10 · 6 PASS / 2 PARTIAL / 3 FAIL #7463 back to pm:queue with the assignee cleared, pointing at [Decision] Skills optimization program — batch 5 (2 items): objectui check-skill-examples.mjs — where the root-devDependency resolution bound lives (objectui#7463 item 2), and whether the marked-fence population becomes shrink-only (objectui#7359 step 3) #14909 item 1, and updateViewConfig stores "per-view personal config" as ONE org-wide metadata item — sort/hiddenFields/columnState/rowHeight written by any user apply to every user of the view #7494 pm:queue — both written 10:47Z. Routed: item 2's fork → decision [Decision] Skills optimization program — batch 5 (2 items): objectui check-skill-examples.mjs — where the root-devDependency resolution bound lives (objectui#7463 item 2), and whether the marked-fence population becomes shrink-only (objectui#7359 step 3) #14909 (batch 5, item 1); the dev's open question 2 → objectui#7494 (the three testing.md rows; domain:skills p3, pm:queue at the merge) + objectui#7493 (ComponentInput.defaultValue?: any, bare); the seat's own probe finding → [finding] check-skill-examples.ts describeAnyPosition labels an index signature's any as return type (isFunctionLike matches IndexSignatureDeclaration) and flags a function type's return any even inside a type argument — the objectui port (PR objectui#7490) inherits both #14910 (an index signature's any labelled return type; the origin's defect, bare); the report's findings 1–2 are [finding][devx] Docs Drift Check is package-granular, so any PR touching @objectstack/spec lists ~112 docs — an advisory that large is one every reader learns to skip #6893 / fix(rest): drop a nav group DECLARED empty, not just one the gate emptied (#7380) #7460 already. Earlier this shift both objectui flights delivered (PR docs(spec): make submitBehavior's TSDoc state the mode-aware default #7473 at the governed terminal; PR [Security] Access denied copy — the remaining 38 templates, classified: admin-surface should be RETAINED as developer copy, four end-user sites need their own decision #7475 merged 08:46Z) — both briefs carried the internal-pm decision frame verbatim (the item-4 condition), and both devs argued their forks on it rather than escalating. Delivered earlier: items 3, 4 and 5 (PRs docs(pm-dispatch): collapse CLAUDE.md's four excerpts to rule, hook and anchor #14855 , docs(pm-dispatch): keep two copies of the decision frame, not four #14862 , tooling(pm): admit a same-PR cross-file line-budget move, and take the first one #14860 ), all at the terminal above. ⭐ Standing condition from item 4's review: every brief this seat writes carries the internal-pm frame section (.claude/skills/pm-dispatch/SKILL.md, the block from 「每个方案必须沿四条固定评估轴分析」 through 「推荐意见必须基于这四条轴给出理由」 — :886-903 at 450e73b4e8, located by its anchor sentences because the line numbers move) verbatim, because os-dev.md no longer holds a copy once PR docs(pm-dispatch): keep two copies of the decision frame, not four #14862 lands. ⚠️ Correction 09:20Z: the two objectui briefs at 07:39Z carried a near-variant of that block (axes 1, 3 and 4 worded differently), not the :880-897 text; both flights are delivered and neither escalated on it; from this round every brief pastes the block read from origin/main in the same minute (09:20Z for the two flights in flight). Item 2 stopped at a fork with needs_decision and zero edits (report 5521172695: ruling C's "date + pointer to the authoritative GitHub comment" has no pointer to convert to on those surfaces, its issue-number spelling is red on check-skill-id-lint, which encodes the 2026-08-12 "numbers go" ruling, and the maintainer comment it points at frequently does not exist) → decision card [Decision] Skills optimization program — batch 4 (1 item): #14685 item 2's replacement form — ruling C's "date + pointer to the authoritative GitHub comment" collides with the 2026-08-12 "numbers go" ruling that check-skill-id-lint enforces on the same surface #14859 (batch 4, one item, options A1 / A2 / B / C, recommendation B; ruled B 09:04Z , re-dispatched above); classification complete for both named surfaces (54 sites: KEEP 5, frame 4, pointer-eligible 44), references/** unclassified; the r2 flight resets the branch to current main. Slots free: 5. Bare for triage at 13:40Z (REST, all four re-read): Census of dispatch templates and skills text for the unexecutable "report before acting" fence form, now that the executability criterion is landed #14768 (since 00:19Z, 13 h 21 min), Migrate the two in-repo hook examples (app-crm OpportunityStageHook, app-todo taskHook) to defineHook() so the platform's own examples match what the published data skill teaches (#14685 item 1, ruled A) #14850 (05:28Z), The internal dispatch runbook has no step that pastes the decision frame into the dev prompt — after #14685 item 4 (PR #14862) the dev definition expects it there and has no copy of its own #14869 (06:31Z), [finding] After ruling B (#14859), AGENTS.md:12-13 and the scripts/pm/check-skill-id-lint.mjs header still describe the pm-dispatch provenance form as "date + verbatim quote" — the two off-surface sentences PR #14911 could not touch #14913 (10:07Z); [finding] Four gate-script comments still say the decision frame has "four" / "two enforced" copies after #14685 item 4 reduced COPIES to two — dispatch-gates.mjs:8090/:8095, check-skill-line-ratchet.mjs:455, check-skills-token-ratchet.mjs:334/:345/:359 #14870 graded pm:blocked 07:28Z. [finding] skills/objectstack-ai/SKILL.md:396 tells the author to run os validate after "a model-registry entry" — a record os validate cannot see, which :332 in the same file already says (agents / tools / skills are the only AI stack collections) #14836 at the terminal (PR docs(skills): stop promising os validate checks a model-registry entry #14953 ); the platform-readings intake ([finding] The &page=N completeness walk refuses with HTTP 422 past 9,900 items — the ceiling on the remedy #14068 just landed #14133 / finding(skills): spec@objectui shift-end report 2026-09-02 — two principle gaps (types-face routing vs. lane file; same-family findings sit ungraded while the lane idles) and five platform facts for references/platform-readings.md #14445 / [finding] The in-seat contract-review path was read as "the implementing session reviews its own diff" — PR #14191 was PASSed and label-cleared by its author session, dropping the independence clause and the director seat's never-writes-code charter in one act #14209 ) and The internal dispatch runbook has no step that pastes the decision frame into the dev prompt — after #14685 item 4 (PR #14862) the dev definition expects it there and has no copy of its own #14869 (runbook paste-step, F5) wait behind PR tooling(pm): admit a same-PR cross-file line-budget move, and take the first one #14860 's merge; [finding] Four gate-script comments still say the decision frame has "four" / "two enforced" copies after #14685 item 4 reduced COPIES to two — dispatch-gates.mjs:8090/:8095, check-skill-line-ratchet.mjs:455, check-skills-token-ratchet.mjs:334/:345/:359 #14870 (six stale frame-copy comments, F1–F4) waits behind PR tooling(pm): admit a same-PR cross-file line-budget move, and take the first one #14860 (PR fix(pm): refuse --tier against --commands / --json instead of silently preferring the tier #14765 landed).
Route 2 — skills(ui) + examples: retire the deprecated objectName / viewType ListView spelling in one stroke — the published skill teaches it and three showcase pages repeat it #14343 → pm:blocked (comment 5519011595): spec twin [finding] The #11284 convergence shipped only its producer half: the react-blocks contract deprecates objectName / viewType on ListView in favour of data={{ provider: 'object', object }} / type, and the lint blesses that spelling — but objectui's ListView reads neither, so the canonical spelling validates green and renders an empty list #14791 (bare; fork A retract-at-source / B land objectui#2890 step 6 first); Blocked-by: #14791.
Queued lane cards (labels read REST at 05:25Z): [finding] skills/objectstack-ai/SKILL.md:396 tells the author to run os validate after "a model-registry entry" — a record os validate cannot see, which :332 in the same file already says (agents / tools / skills are the only AI stack collections) #14836 (documentation · p3 · domain:skills, graded 05:12Z, terminal scope = two deletions at :396 / :404; held serial behind PR docs(skills): the AI domain has no CEL site — correct the os validate clause in objectstack-ai #14819 , dispatched 12:14Z at its merge, PR docs(skills): stop promising os validate checks a model-registry entry #14953 at the terminal 12:34Z ) · [finding] The &page=N completeness walk refuses with HTTP 422 past 9,900 items — the ceiling on the remedy #14068 just landed #14133 · finding(skills): spec@objectui shift-end report 2026-09-02 — two principle gaps (types-face routing vs. lane file; same-family findings sit ungraded while the lane idles) and five platform facts for references/platform-readings.md #14445 · [finding] The in-seat contract-review path was read as "the implementing session reviews its own diff" — PR #14191 was PASSed and label-cleared by its author session, dropping the independence clause and the director seat's never-writes-code charter in one act #14209 (the platform-readings.md intake — dispatched once item 5 is on main; seat notes on each) · Census of dispatch templates and skills text for the unexecutable "report before acting" fence form, now that the executability criterion is landed #14768 (census; still bare at 05:25Z) · [finding] KnowledgeSourceSchema.cron is documented as a 5-field cron expression but typed z.string() — the spec's own CronExpressionInputSchema is not used, so 'not a cron' parses green #14825 → graded bug · p3 · pm:queue · domain:spec · needs:contract-review (spec lane's) · Migrate the two in-repo hook examples (app-crm OpportunityStageHook, app-todo taskHook) to defineHook() so the platform's own examples match what the published data skill teaches (#14685 item 1, ruled A) #14850 (05:28Z: item-1 migration of opportunity.hook.ts:9 / task.hook.ts:50 to defineHook(); examples, still bare at 06:13Z) · [Decision] Skills optimization program — batch 4 (1 item): #14685 item 2's replacement form — ruling C's "date + pointer to the authoritative GitHub comment" collides with the 2026-08-12 "numbers go" ruling that check-skill-id-lint enforces on the same surface #14859 (05:54Z: decision batch 4; ruled B 09:04Z , claimed and in flight) · [Decision] Skills optimization program — batch 5 (2 items): objectui check-skill-examples.mjs — where the root-devDependency resolution bound lives (objectui#7463 item 2), and whether the marked-fence population becomes shrink-only (objectui#7359 step 3) #14909 (10:01Z: decision batch 5, two items — objectui#7463 item 2's bound home, recommendation A; objectui#7359 step 3, a shrink-only floor on the marked population, recommendation A; needs-user-decision, no ruling at 13:40Z — zero comments) · The internal dispatch runbook has no step that pastes the decision frame into the dev prompt — after #14685 item 4 (PR #14862) the dev definition expects it there and has no copy of its own #14869 (06:31Z: dispatch-runbook.md 派发词构造细则 gains the paste-the-frame step; 280/280, pays via PR tooling(pm): admit a same-PR cross-file line-budget move, and take the first one #14860 's rule; bare) · [finding] Four gate-script comments still say the decision frame has "four" / "two enforced" copies after #14685 item 4 reduced COPIES to two — dispatch-gates.mjs:8090/:8095, check-skill-line-ratchet.mjs:455, check-skills-token-ratchet.mjs:334/:345/:359 #14870 (06:31Z: dispatch-gates.mjs:8090/:8095, check-skill-line-ratchet.mjs:455, check-skills-token-ratchet.mjs:334/:345/:359 stale "four / two enforced copies" comments; XS, comment-only; bare). Bare at 08:26Z (REST): [Decision] Skills optimization program — batch 4 (1 item): #14685 item 2's replacement form — ruling C's "date + pointer to the authoritative GitHub comment" collides with the 2026-08-12 "numbers go" ruling that check-skill-id-lint enforces on the same surface #14859 (needs-user-decision, no ruling), objectui QA run · api-backend (FULL area) · a86db175 · 2026-08-10 · 6 PASS / 2 PARTIAL / 3 FAIL #7463 ; Census of dispatch templates and skills text for the unexecutable "report before acting" fence form, now that the executability criterion is landed #14768 / Migrate the two in-repo hook examples (app-crm OpportunityStageHook, app-todo taskHook) to defineHook() so the platform's own examples match what the published data skill teaches (#14685 item 1, ruled A) #14850 / The internal dispatch runbook has no step that pastes the decision frame into the dev prompt — after #14685 item 4 (PR #14862) the dev definition expects it there and has no copy of its own #14869 / [finding] Four gate-script comments still say the decision frame has "four" / "two enforced" copies after #14685 item 4 reduced COPIES to two — dispatch-gates.mjs:8090/:8095, check-skill-line-ratchet.mjs:455, check-skills-token-ratchet.mjs:334/:345/:359 #14870 last read bare at 07:39Z. Graded away from this lane: os explain flow's example teaches $currentUser as an assignment value, a spelling nothing resolves #14782 → domain:cli p3, dispatched by the cli seat (PR fix(cli): make os explain flow teach a flow that actually parses #14809 ); [finding] The #11284 convergence shipped only its producer half: the react-blocks contract deprecates objectName / viewType on ListView in favour of data={{ provider: 'object', object }} / type, and the lint blesses that spelling — but objectui's ListView reads neither, so the canonical spelling validates green and renders an empty list #14791 → bug · p2 · needs-user-decision · domain:spec (skills(ui) + examples: retire the deprecated objectName / viewType ListView spelling in one stroke — the published skill teaches it and three showcase pages repeat it #14343 stays pm:blocked on it).
Queue health (recorded, not this lane's card; the seat stopped reading the queue at 04:33Z on the maintainer's word) : the "51 builds / 14 failed" figure was one signature — test/run-dev-unbuilt-workspace.e2e.test.ts › "gives up and exits instead of waiting forever" (:418, expected 'SIGKILL' to be null) on Test Core (1/6). Fix PR test(cli): make the unread-reader ceiling a load-independent constant at RUN_TIMEOUT_MS #14715 merged 02:22Z as accb9231c7 (cap = RUN_TIMEOUT_MS 180 s); anchor Queue-flake anchor: test/run-dev-unbuilt-workspace.e2e.test.ts #14648 closed 03:52:25Z by the cli seat with a pre-stated falsifier. Post-fix merge_group builds kept ejecting on the same case with the NEW assertion text — the seat read five failed-job logs raw (33712928455 · 33712974515 · 33712975540 · 33712976158 · 33713928872: child alive at 180 0xx ms, case 1 measured 5.9–8.1 s on the same runner minutes earlier; 7 of 9 completed post-fix builds failed by 04:27Z) and recorded them on Queue-flake anchor: test/run-dev-unbuilt-workspace.e2e.test.ts #14648 (5520320723, 5520385642); the devx and spec seats recorded the same. The closed-read-end case in run-dev-unbuilt-workspace.e2e.test.ts still uses a fixed wall-clock bound as its oracle #14716 (the closed-read-end case) is not the failing case. The maintainer stated at 04:3xZ that Queue-flake anchor: test/run-dev-unbuilt-workspace.e2e.test.ts #14648 is resolved; the seat could not confirm it at 04:31Z (main unchanged, card closed, no PR on the file) and left the reopen to the cli seat / maintainer. Six governed drafts (docs(skills): repair five semantic minors in the axis-weighting and batch-presentation encoding #14779 , docs(agents): a released-package bug fix takes a patch changeset, never none #14789 , skills(data): drop the two bare ADR-0010 citations from the objectstack-data skill #14777 , fix(skills): teach {current_user_id}, not $currentUser, in the objectstack-ui Filtering example #14781 , docs(skills): admit hand-authored reference files under references/ in the catalog anatomy #14786 , docs(skills): settle two false claims in skills/README.md and add three cross-skill routing bullets #14795 ) landed through the queue tonight once the approver flipped them.
Landing rules applied this shift : a flight whose card carries deferred items lands as Part of #; at merge the card goes pm:dispatched → pm:queue; a second round starts only after the first is merged; a dev needs_decision ⇒ decision card + pm:blocked — when the fork is another lane's contract, the seat files the twin finding bare and blocks on it (skills(ui) + examples: retire the deprecated objectName / viewType ListView spelling in one stroke — the published skill teaches it and three showcase pages repeat it #14343 / [finding] The #11284 convergence shipped only its producer half: the react-blocks contract deprecates objectName / viewType on ListView in favour of data={{ provider: 'object', object }} / type, and the lint blesses that spelling — but objectui's ListView reads neither, so the canonical spelling validates green and renders an empty list #14791 ); a deferred item resolved by a ruling closes the card with a comment; a catalog-wide deferred item gets its own card ([finding] Catalog anatomy drift: hand-authored per-topic files live under references/ (reserved for generated pointers) in objectstack-platform and objectstack-data, unlinked or linked only by path — PLAT-G-02 / the data-hooks.md shape, catalog-wide #14655 ); a ruled ceiling raise is not taken when the same PR pays by deletion (docs(pm-dispatch): rule how clause ② is graded — provisional claim, mechanical floor, judged conformance #14696 ); a decision card closes once its ruling is recorded on every member card and the post-ruling step it names is taken ([Decision] Skills optimization program — batch 1 (4 items): new-file ceilings for splits · planned-eval stubs · react-blocks double rendering · published pm-dispatch scope #14296 ); a merge that lands before the seat's ACCEPT still gets the review on record; a non-programme correction card is judged by its own budget rule (pm-dispatch: the PM-side self-discipline class recurs because its remediations are RULES — #11901 chose construct-removal instead and held; four rule-shaped fixes failed again today #12911 ); the seat grades and dispatches its own programme's follow-up cards in objectui when triage is vacant (finding: ListRunsRequestSchema.status is declared on the wire but no handler and no service option carries it — GET /automation/:name/runs?status=failed silently lists every run #7359 ); a stale-open card whose ruled deliverable was dissolved by a later merge is closed by the seat with the evidence ([Decision] AGENTS.md is at its line ceiling with ZERO headroom, so any honest repair of the published spellings mirror crosses it — how should the 8 lines be paid? #11910 ); a non-governed PR is flipped ready + auto-merge (explicit mergeMethod: SQUASH) after the in-seat ACCEPT and every check green — a direct-merge attempt answering 405 "in the merge queue" is the proof of enqueue; a changeset check that evaluated before the skip-changeset write gets the PR's single re-run once the label is present (docs(scripts): make check-agent-model-declared's header the stated home of the model-resolution order #14689 , skills(data): drop the two bare ADR-0010 citations from the objectstack-data skill #14777 , docs(agents): guard history dating against a shallow clone #14808 ); draft/ready toggles and auto-merge go through GraphQL and stall first under the shared identity's rate limit; a dev's out-of-scope finding is filed by the seat only after a validated dedup ([finding] selfTest() in scripts/pm/dispatch-gates.mjs binds fixture values to relative and resolve, shadowing node:path for the whole function — a later case calling either dies at run time, invisible to node --check #14688 , [finding] AGENTS.md:1154 post-task checklist tells the author to "Update CHANGELOG.md" by hand — but CHANGELOG.md is generated from changesets at release and ships inside the npm package #14792 , [finding] In the agent containers' shallow checkout, git log -S reports the horizon commit as the introduction of far older text — exit 0, plausible sha, plausible date, no warning — and the os-dev contract carries no guard for dating history #14793 , [finding] skills/objectstack-ai/SKILL.md:405-406 calls a model-registry promptTemplate.system / .user "a CEL predicate" — those keys are the template dialect ({{var}}), and the AI domain has no CEL site at all #14797 , [finding] KnowledgeSourceSchema.cron is documented as a 5-field cron expression but typed z.string() — the spec's own CronExpressionInputSchema is not used, so 'not a cron' parses green #14825 ), and dropped when an open card already carries it; an objectui brief names the absolute path of objectstack's scripts/pm/os-verify-lock.sh; two PRs may hold one hot file when their hunks are disjoint (docs(skills): repair five semantic minors in the axis-weighting and batch-presentation encoding #14779 / docs(pm-dispatch): timestamped readings are the first construct-shaped fix; record the remediation-shape ranking beside it #14784 ; docs(skills): admit hand-authored reference files under references/ in the catalog anatomy #14786 / docs(skills): settle two false claims in skills/README.md and add three cross-skill routing bullets #14795 ; docs(agents): a released-package bug fix takes a patch changeset, never none #14789 / docs(agents): stop telling authors to hand-edit generated CHANGELOG.md #14802 ; docs(skills): repair five semantic minors in the axis-weighting and batch-presentation encoding #14779 / docs(agents): guard history dating against a shallow clone #14808 ); an authorized approver's ready flip on a governed PR is theirs (objectui#7416, docs(pm-dispatch): timestamped readings are the first construct-shaped fix; record the remediation-shape ranking beside it #14784 ); a Part of card whose remaining item sits on a decision card goes back to pm:queue with the pointer (Skills optimization flight — skills/objectstack-data: RESTRUCTURE (≈ −10,150 tok, −22%) — hooks taught twice across two files, generic-JS patterns, 3.3% example gate coverage, sharingModel used by 31/31 objects and explained nowhere #14297 ); a ruled card's fenced-off follow-up is filed by the seat the moment the precondition lands, bare (Census of dispatch templates and skills text for the unexecutable "report before acting" fence form, now that the executability criterion is landed #14768 ); a merge patrol is a git log --grep '(#<pr>)' run in the same minute as its line — never a carried-forward reading (the skills(api): delete the planned-eval stub and drop its ceiling row (#14296 item 2) #14564 miss and the 02:32Z non-patrol); a card's premise the seat's own filing got wrong is corrected in the claim comment at dispatch ([finding] Catalog anatomy drift: hand-authored per-topic files live under references/ (reserved for generated pointers) in objectstack-platform and objectstack-data, unlinked or linked only by path — PLAT-G-02 / the data-hooks.md shape, catalog-wide #14655 , skills(ui) + examples: retire the deprecated objectName / viewType ListView spelling in one stroke — the published skill teaches it and three showcase pages repeat it #14343 ) or in the ACCEPT (skills/README.md truth + routing sweep: OLD/NEW "evaluate to null since M9.5" is anchored nowhere and contradicts the formula skill; "AI tool params" is not a CEL site; the cross-skill routing list lacks the upgrade-vs-platform and objectui inbound decision points #14794 ); a report's self-count of its MCP calls is not a witness that a card comment exists ([finding] Five semantic minors in the axis-weighting/batch-presentation encoding — caught by the at-tier review the frame-sync gate structurally cannot perform #14146 ); clause ② PASS strips the label on whichever carriers hold it (skills/objectstack-ui teaches $currentUser as a filter value, contradicting its own "only two tokens resolve in a filter" contract #14139 , [finding] skills/objectstack-ai/SKILL.md:405-406 calls a model-registry promptTemplate.system / .user "a CEL predicate" — those keys are the template dialect ({{var}}), and the AI domain has no CEL site at all #14797 ); a rename to a contract's canonical spelling is a contract claim, settled at source before any edit (skills(ui) + examples: retire the deprecated objectName / viewType ListView spelling in one stroke — the published skill teaches it and three showcase pages repeat it #14343 ); two cards on one list land as one PR with both Fixes lines (skills/README.md truth + routing sweep: OLD/NEW "evaluate to null since M9.5" is anchored nowhere and contradicts the formula skill; "AI tool params" is not a CEL site; the cross-skill routing list lacks the upgrade-vs-platform and objectui inbound decision points #14794 + [finding] Nothing routes an agent authoring object/field/view labels to objectstack-i18n — the cross-skill routing list in skills/README.md has no labels-vs-bundles decision point #14566 ); a harvested ledger item is re-measured at current main before it becomes a card; a new gate's own first CI run on its PR is part of the ACCEPT evidence (Sweep the remaining "no runtime consumer" ledger notes that predate the previews-count-as-consumers ruling — datasource _note, permission rowLevelSecurity.label, plus a mechanical pass #7427 ); a triage-graded card in the lane's domain is dispatched at the next check-in without waiting for a programme slot ([finding] AGENTS.md:1154 post-task checklist tells the author to "Update CHANGELOG.md" by hand — but CHANGELOG.md is generated from changesets at release and ships inside the npm package #14792 , [finding] In the agent containers' shallow checkout, git log -S reports the horizon commit as the introduction of far older text — exit 0, plausible sha, plausible date, no warning — and the os-dev contract carries no guard for dating history #14793 , [finding] skills/objectstack-ai/SKILL.md:405-406 calls a model-registry promptTemplate.system / .user "a CEL predicate" — those keys are the template dialect ({{var}}), and the AI domain has no CEL site at all #14797 ); a maintainer question about fleet health is answered from primary sources with the reading recorded on the relevant anchor (Queue-flake anchor: test/run-dev-unbuilt-workspace.e2e.test.ts #14648 ); a same-file payment is a strict restatement whose omission fails loudly, argued against the rejected candidates ([finding] In the agent containers' shallow checkout, git log -S reports the horizon commit as the introduction of far older text — exit 0, plausible sha, plausible date, no warning — and the os-dev contract carries no guard for dating history #14793 ); a dev may refuse half of a ruled scope when that half would write a new false claim, and says so in the PR body ([finding] skills/objectstack-ai/SKILL.md:405-406 calls a model-registry promptTemplate.system / .user "a CEL predicate" — those keys are the template dialect ({{var}}), and the AI domain has no CEL site at all #14797 's cron).
MERGED this shift and label-clean (non-program) : docs(agents): declare that this repo has no formatter of record #14239 (→ Nothing declares that this repo has no formatter, and Prettier's defaults reject main's own files #10622 ) · agents(os-dev): verify-lock non-guarantee clause + ratchet funding discipline in the dev contract #14229 (→ [finding] .claude/agents/os-dev.md rule 1 lists the verify lock's four guarantees and no non-guarantee, one line above a wall-clock absolute — every dev agent reads exclusivity the brief never promised #12800 ) · docs(pm): encode the 2026-08-31 director rulings — ruling-record carrier, and cross-fire round continuation #14230 (→ [Decision] Is a maintainer ruling "recorded" when it exists only as a comment on a single card? — its durability is currently bounded by whoever happened to file that card #13766 ) · skills(pm): land the ruled REST-channel prescriptions and closed-inclusive dedup (ceiling 87 → 93) #14236 (→ [finding] The REST issues-list Link: rel="next" cursor silently returns 102 of 287 open issues — the dedup channel references/rest-channel.md prescribes #13900 ) · fix(pm-dispatch): give the decision-facets marker a sanitizer-safe spelling #14264 (→ [finding] The os-decision-facets anchor is prescribed ONLY as an HTML comment, which this channel strips — every decision card written through MCP loses its machine-findable marker, silently #14237 ).
Follow-ups harvested (seat ledger) : data-hooks.md lacks ctx.session.positions — ⚠️ hook.zod.ts:674 calls session.positions.includes(…) the anti-pattern, so this needs a source read first · the driver id vocabulary row · automation SKILL.md:351-354 and data SKILL.md:747-749 stdlib restatements beside their formula pointers — held for the programme closeout re-lock pass · skills/objectstack-ui/references/react-blocks.md is a generated file under references/ that neither anatomy clause names — dedup against Seam (spec lane, ruled): gen:react-blocks stops emitting skills/objectstack-ui/contracts/react-blocks.contract.json — the markdown rendering becomes the single AI-facing output (#14296 item 3 = A) #14559 · react-blocks.ts:167 prescribes the deprecated ListView spelling — decided by [finding] The #11284 convergence shipped only its producer half: the react-blocks contract deprecates objectName / viewType on ListView in favour of data={{ provider: 'object', object }} / type, and the lint blesses that spelling — but objectui's ListView reads neither, so the canonical spelling validates green and renders an empty list #14791 's fork · skills/README.md:114 overlaps the new objectui routing bullet · skills/objectstack-ai/SKILL.md:396 vs :332 → filed as [finding] skills/objectstack-ai/SKILL.md:396 tells the author to run os validate after "a model-registry entry" — a record os validate cannot see, which :332 in the same file already says (agents / tools / skills are the only AI stack collections) #14836 (04:41Z) · from the [Decision] Skills optimization program — batch 3 (5 items): DATA-F-07 defineHook() vs the platform's own examples · #13597 Phase-2 — X0 quote policy · CLAUDE.md excerpt form · the four-copy decision frame · cross-file line-budget moves #14685 flights: objectui's CLAUDE.md (51 lines) carries the same hand-copied-excerpt shape item 3 collapsed → measured at 2d3fe73 and filed as objectui#7506 (13:44Z, dedup clean, seat-graded; governed; decision batch 6 candidate — the seat does not extend ruling 3B on its own) · objectui AGENTS.md:234 names guard-main-checkout.sh only while .claude/settings.json:36 also wires guard-main-checkout-bash.sh — observed 13:42Z, not deduped, not carded · the same maintainer quote written out two or three times (SKILL.md:928/:929 vs lanes/director.md:8/:54; SKILL.md:645 vs os-dev.md:320; SKILL.md:904 / os-dev.md:418 / decision-analysis.md:50) — waits for [Decision] Skills optimization program — batch 4 (1 item): #14685 item 2's replacement form — ruling C's "date + pointer to the authoritative GitHub comment" collides with the 2026-08-12 "numbers go" ruling that check-skill-id-lint enforces on the same surface #14859 , PR docs(pm-dispatch): keep two copies of the decision frame, not four #14862 removes the os-dev.md:418 copy · check-ratchet-remedy-authority sweeps scripts/*.{mjs,mts} non-recursively, so every scripts/pm/** gate is outside the check:engine-double-contract fires at CI time, not authoring time — four independent PRs tripped it on brand-new test files in one shift, and a pre-warning in the brief did not prevent it #8435 convention — a maintainer coverage question (batch 5 candidate) · three ceiling rows carry headroom for the re-lock pin PR: AGENTS.md 1157/1162, spec-property-retirement/SKILL.md 333/337 and its row pin 326/328 · F5 → The internal dispatch runbook has no step that pastes the decision frame into the dev prompt — after #14685 item 4 (PR #14862) the dev definition expects it there and has no copy of its own #14869 , F1–F4 → [finding] Four gate-script comments still say the decision frame has "four" / "two enforced" copies after #14685 item 4 reduced COPIES to two — dispatch-gates.mjs:8090/:8095, check-skill-line-ratchet.mjs:455, check-skills-token-ratchet.mjs:334/:345/:359 #14870 (filed 06:31Z after clean dedups) · platform notes from the flights: the zero-quota issue-page payload serves only the first 15 timeline items (frontTimelineItems 15 of 32, backTimelineItems empty) — a comment read-back on a long card must go through MCP get_comments with paging; the PR page carries no label payload; a brace placeholder inside a fenced code block was eaten by the sanitizer while the same text in prose survived; issue_read get_labels is issue-only (a PR number answers "Could not resolve to an Issue") · objectui Sweep the remaining "no runtime consumer" ledger notes that predate the previews-count-as-consumers ruling — datasource _note, permission rowLevelSecurity.label, plus a mechanical pass #7427 follow-ups: the shrink-only decision on the marked population, the bare-any assertion port, bounding root-devDependency resolution, widening to .claude/skills/**, 17 json fences that are really jsonc, two pre-existing pin suites failing on a BUILT tree that CI's unbuilt shards never see · the eval-token oracle (objectui#7359 comment 5514262423) is its own gate, to file after Sweep the remaining "no runtime consumer" ledger notes that predate the previews-count-as-consumers ruling — datasource _note, permission rowLevelSecurity.label, plus a mechanical pass #7427 lands · .claude/agents/os-dev.md carries seven degenerate single-token wrap lines — a standalone density-repair candidate under the 2026-08-29 ruling · check:doc-formula-expressions derives for every .claude/** card and needs three package builds first · no package carries the pre-ADR-0019 ApprovalProcess.create re-home table after AUTO-D-03 · FRM-D-06 · OUI-C-05 · check-skill-examples.ts SURFACES cannot see @objectstack/core · check:pm-skill-id-lint binds nothing in the four small internal skills · os i18n extract / check walk none of i18n: three authored display surfaces have no bundle key at all (bulk-action defs, custom validation messages, dataset labels) #14253 's three families (i18n-extract scaffolds none of the three key families #14253 adds, so check:i18n-coverage is blind to them #14376 ) · internal SKILL.md 「条款②入队闸门」 calls a wrong no 「假申报」 — a Phase-2 rider · the os-dev clause's closed skip-changeset list omits skills/** (open [finding] The os-dev contract states skip-changeset as BOTH a closed path list and a publication test — a src/ file that never reaches dist satisfies one and violates the other #13432 ) · AGENTS.md states OS_SKIP_DTS two ways (:595-597 vs :1153) · AGENTS.md:1154's surviving ROADMAP.md half — the "delete item 6 outright" argument is in PR docs(agents): stop telling authors to hand-edit generated CHANGELOG.md #14802 's body · spec-property-retirement/SKILL.md row pin lowerable 328 → 326 · program closeout: the ratchet script's empty "remaining skills' eval notes" header, content/docs/ai/skills.mdx:78/:230 placeholder sentences, and the ceiling re-locks once after the flights (formula 6,002 → 5,158, i18n 6,338 → 4,685, upgrade 8,333 → 7,199, ai 6,806 → 5,475, automation 12,768 → 12,269, query files, api 6,319 → 4,635, data 10,009 → 9,996, ui list-views.md 3,011 → 3,010, pm-dispatch entry 9,708 → 9,702, spec-property-retirement 337 → 333, dogfood 157 → 147, checklist-author 62 → 53, checklist-test 238 → 234 among them) · objectui ObjectQL.delete's single-id cascade is not transactional — a refusal mid-cascade leaves earlier children deleted while the response says the delete failed #7413 (dev-filed, domain:devx) · dispatch-gates: --tier --residue silently drops --residue — the neighbouring silent-flag-drop that #14294's repair does not reach #14753 (dev-filed) · objectui section / box absent from ADR-0080 PUBLIC_BLOCKS Tier B — on open finding: check-agent-model-declared's header describes model resolution as three steps and omits CLAUDE_CODE_SUBAGENT_MODEL, which outranks all three #6879 · [Decision] Skills optimization program — batch 1 (4 items): new-file ceilings for splits · planned-eval stubs · react-blocks double rendering · published pm-dispatch scope #14296 item 2 option C recorded on Skills catalog optimization program (maintainer-directed): audit every skill on both roots, then optimize — program anchor #14292 , not opened · platform notes: issue_read get_labels / list_issues / search_issues (GraphQL-backed) answer "rate limit exceeded" while issue_read get / list_pull_requests (REST) succeed — read labels through the REST forms when the shared identity is throttled; api.github.com/rate_limit answering "15,000 remaining" while the MCP path is exhausted is a decoy; the zero-quota page channel can lag a comment by seconds; the verify lock's slot is the OS_VERIFY_LOCK_SLOT environment variable; GitHub's sanitizer eats angle-bracket fragments in comments and PR bodies; a check:* batch queued under the lock can hit the 10-minute foreground cap (exit 143); every container's checkout is shallow by default and a --unshallow does not travel between containers — git log -S dating needs the guard [finding] In the agent containers' shallow checkout, git log -S reports the horizon commit as the introduction of far older text — exit 0, plausible sha, plausible date, no warning — and the os-dev contract carries no guard for dating history #14793 lands; a two-ref git fetch leaves FETCH_HEAD on the FIRST ref; the shared checkout's git fetch origin main returned a head about two hours stale between 09:10Z and 10:46Z (07:48Z while 08:53Z was on main) — a patrol reading cross-checks the API's list_commits head in the same minute, and ls-remote origin main also matches changeset-release/main, so ask for refs/heads/main; the actions_list / get_job_logs MCP results overflow into files — parse with python; the harness Co-Authored-By trailer is the accepted attribution (answer A on [finding] The os-dev skip-changeset clause states a CLOSED surface list that omits repo-root tooling config — the criterion beside it, and the repo's own merged precedent on the SAME file, both cover it #13680 ) and briefs say "no model identifiers in the commit message body or the PR body". Out-of-scope cards filed by devs: objectstack [finding] The published skill reference index labels data/query.zod.ts — the whole QueryAST — "Sort Node", because its first JSDoc block is SortNode's #14441 · declared ≠ enforced (ADR-0049): RealtimeEventType spells record.* while the runtime emits data.record.*, and SubscriptionSchema.filters is z.unknown() nothing reads #14446 · [finding] skills/objectstack-ai tells authors metadata_assistant is "not vocabulary" while the platform's own Studio app pins defaultAgent: 'metadata_assistant' #14461 · [finding] The objectstack-ai generated reference index advertises 6 schemas the SKILL.md never teaches and omits the one it names — SKILL_MAP in build-skill-references.ts is unreconciled with the body #14462 · [finding] The objectstack-automation reference index routes to the ADR-0020-retired state-machine.zod.ts and omits both per-node config schemas — SKILL_MAP in build-skill-references.ts #14466 · [finding] MCPServerPlugin's own docblock still teaches the deprecated stdio trigger — plugin.ts:112-122 disagrees with plugin.ts:234-239 twelve lines below it #14473 · [finding] The objectstack-formula reference index advertises data/date-macros.zod.ts, a surface the SKILL.md routes to objectstack-query — SKILL_MAP in build-skill-references.ts maps it to both #14562 · [finding] The objectstack-i18n reference index routes 5 of its 7 transitive pointers at schemas unreachable from a translation bundle — the closure step in build-skill-references.ts #14565 · [finding] Nothing routes an agent authoring object/field/view labels to objectstack-i18n — the cross-skill routing list in skills/README.md has no labels-vs-bundles decision point #14566 · [finding] SWEEP.md step 6 sends every sweep agent to land a run record under runs/, which is .gitignored with * — the instruction cannot be obeyed #14595 · [finding] .claude/launch.json ships a pr3505-attach-3477 config pointing at a worktree that does not exist — a checked-in launch entry outlives the tree it names #14596 · [finding] The one-value-site promise for CONTRACT_REVIEW_TIER (SKILL.md 「模型升级只改一行一个文件」) is held only by a manual grep — no self-test pins it, so the next model refresh can re-open the drift silently #14616 · finding: the role-word baseline is keyed by file path, so a pure file SPLIT trips the maintainer-only --update even when the occurrence count is unchanged #14659 · dispatch-gates: --tier --residue silently drops --residue — the neighbouring silent-flag-drop that #14294's repair does not reach #14753 · os explain flow's example teaches $currentUser as an assignment value, a spelling nothing resolves #14782 ; objectui Adopt PR #7328 (objectui#3569 showcase datetime fixture): one push + merge — everything else is done and verified #7358 · finding: ListRunsRequestSchema.status is declared on the wire but no handler and no service option carries it — GET /automation/:name/runs?status=failed silently lists every run #7359 · finding: a repeated ?paradigm=/?source=/?category=/?type= on the automation descriptor routes silently empties the designer palette (200, zero rows) #7360 · fix(metadata-core): derive the ADR-0106 D4 read exemption from the #6603 write gate (#7020) #7361 · /data harness: the success exit is still a stand-in, so a success-envelope regression cannot go red there either #7362 · fix(spec): discriminate FieldSchema.defaultValue (literal / runtime token / CEL envelope) and validate each shape on its own terms #7403 · SharingRuleSchema is .strict() but declares no ADR-0010 protection envelope, while the metadata read path stamps _packageId onto stored bodies type-blind #7404 · docs(spec,objectql,driver-sql): declare the unanchored autonumber readback boundary (#7287) #7405 · Rewrite the family-4 record in filter-logic-conformance.ts: the 2026-08-10 exclude ruling was withdrawn — include re-affirmed #7406 · ObjectQL.delete's single-id cascade is not transactional — a refusal mid-cascade leaves earlier children deleted while the response says the delete failed #7413 ; by the seat: Seam (spec lane, ruled): gen:react-blocks stops emitting skills/objectstack-ui/contracts/react-blocks.contract.json — the markdown rendering becomes the single AI-facing output (#14296 item 3 = A) #14559 (spec seam, open) · [Decision] Skills optimization program — batch 2 (1 item): does #14296 item 1's "≥10% off the package in the same PR" bind the split PR arithmetically, or is it the anti-growth guard? (ui split measured at −0.16%) #14568 (closed) · [finding] AGENTS.md says "Pure bug fixes do not require a changeset" — a pure bug-fix PR in a released package following it literally has no green path through Check Changeset #14647 (closed) · [finding] Catalog anatomy drift: hand-authored per-topic files live under references/ (reserved for generated pointers) in objectstack-platform and objectstack-data, unlinked or linked only by path — PLAT-G-02 / the data-hooks.md shape, catalog-wide #14655 · [Decision] Skills optimization program — batch 3 (5 items): DATA-F-07 defineHook() vs the platform's own examples · #13597 Phase-2 — X0 quote policy · CLAUDE.md excerpt form · the four-copy decision frame · cross-file line-budget moves #14685 · [finding] selfTest() in scripts/pm/dispatch-gates.mjs binds fixture values to relative and resolve, shadowing node:path for the whole function — a later case calling either dies at run time, invisible to node --check #14688 · Census of dispatch templates and skills text for the unexecutable "report before acting" fence form, now that the executability criterion is landed #14768 · [finding] The #11284 convergence shipped only its producer half: the react-blocks contract deprecates objectName / viewType on ListView in favour of data={{ provider: 'object', object }} / type, and the lint blesses that spelling — but objectui's ListView reads neither, so the canonical spelling validates green and renders an empty list #14791 · [finding] AGENTS.md:1154 post-task checklist tells the author to "Update CHANGELOG.md" by hand — but CHANGELOG.md is generated from changesets at release and ships inside the npm package #14792 · [finding] In the agent containers' shallow checkout, git log -S reports the horizon commit as the introduction of far older text — exit 0, plausible sha, plausible date, no warning — and the os-dev contract carries no guard for dating history #14793 · skills/README.md truth + routing sweep: OLD/NEW "evaluate to null since M9.5" is anchored nowhere and contradicts the formula skill; "AI tool params" is not a CEL site; the cross-skill routing list lacks the upgrade-vs-platform and objectui inbound decision points #14794 · [finding] skills/objectstack-ai/SKILL.md:405-406 calls a model-registry promptTemplate.system / .user "a CEL predicate" — those keys are the template dialect ({{var}}), and the AI domain has no CEL site at all #14797 · [finding] KnowledgeSourceSchema.cron is documented as a 5-field cron expression but typed z.string() — the spec's own CronExpressionInputSchema is not used, so 'not a cron' parses green #14825 · [finding] skills/objectstack-ai/SKILL.md:396 tells the author to run os validate after "a model-registry entry" — a record os validate cannot see, which :332 in the same file already says (agents / tools / skills are the only AI stack collections) #14836 · Migrate the two in-repo hook examples (app-crm OpportunityStageHook, app-todo taskHook) to defineHook() so the platform's own examples match what the published data skill teaches (#14685 item 1, ruled A) #14850 · [Decision] Skills optimization program — batch 4 (1 item): #14685 item 2's replacement form — ruling C's "date + pointer to the authoritative GitHub comment" collides with the 2026-08-12 "numbers go" ruling that check-skill-id-lint enforces on the same surface #14859 · The internal dispatch runbook has no step that pastes the decision frame into the dev prompt — after #14685 item 4 (PR #14862) the dev definition expects it there and has no copy of its own #14869 · [finding] Four gate-script comments still say the decision frame has "four" / "two enforced" copies after #14685 item 4 reduced COPIES to two — dispatch-gates.mjs:8090/:8095, check-skill-line-ratchet.mjs:455, check-skills-token-ratchet.mjs:334/:345/:359 #14870 · [Decision] Skills optimization program — batch 5 (2 items): objectui check-skill-examples.mjs — where the root-devDependency resolution bound lives (objectui#7463 item 2), and whether the marked-fence population becomes shrink-only (objectui#7359 step 3) #14909 · [finding] check-skill-examples.ts describeAnyPosition labels an index signature's any as return type (isFunctionLike matches IndexSignatureDeclaration) and flags a function type's return any even inside a type argument — the objectui port (PR objectui#7490) inherits both #14910 · [finding] After ruling B (#14859), AGENTS.md:12-13 and the scripts/pm/check-skill-id-lint.mjs header still describe the pm-dispatch provenance form as "date + verbatim quote" — the two off-surface sentences PR #14911 could not touch #14913 · objectui#7493 · objectui#7494 · objectui#7497 · objectui#7506.
Holds with restart (Restart-when: closed #13597 unless noted): Make check:generated's "not run here" source-audit list a hard obligation in the os-dev contract — disposition 2 of #13207, routed to the skills lane #13300 [finding] The os-dev contract states skip-changeset as BOTH a closed path list and a publication test — a src/ file that never reaches dist satisfies one and violates the other #13432 [finding] 撤回的卡以 state_reason: completed 关闭 —— 查重时它伪装成「已修复」,已实测差点让一个真实缺口被永久丢弃 #14081 · [finding] MCP search_issues is returning FALSE ZEROS — reproduced on three seats across two repos, and it DEGRADED mid-session, so every dedup that rode on it passed vacuously #13326 [finding] The zero-quota payload channel silently drops the NEWEST timeline items once an issue outgrows the SSR first window — measured 3 of 5 comments, both 2026-08-30 dispatch comments missing #13373 [finding] The zero-quota payload channel renders only the FIRST 15 timeline items and returns an EMPTY tail — so a read-back of a just-posted comment reads byte-identical to sanitizer damage #13385 [finding] An issue body ending in a --- rule followed by the attribution footer loses EVERYTHING FROM THE RULE ONWARD on create — 5 measured instances, silently stripping the required footer #13384 [finding] The zero-quota issue-page payload is CDN-CACHED and can be minutes-to-hours stale — cache-busting and no-cache did NOT defeat it, and one seat asserted a half-state about another seat's work on that stale read #13387 Record the agent-created-Routine transport facts in references/platform-readings.md — fired sessions get no GitHub MCP tools, and self-binding trades new-session recoverability for tool availability #13257 [finding] MCP issue_read get_labels fails on a FRESH PR number while list_pull_requests returns its labels — misread as "no labels", the mandated RMW fallback strips concurrent bot labels #13141 [finding] MCP issue_read get_labels cannot resolve a PR number ("Could not resolve to an Issue") while pull_request_read get returns the same PR's labels — one wasted call per misread #13583 [finding] "The MCP write rate limit" is not GitHub’s quota — GitHub read 14888/15000 core while MCP writes were refused, and GitHub’s reset field predicts nothing about the block #14014 [finding] LIVE: os-elon is no longer assignable on this repo — every seat's claim protocol silently loses its assignee half, mid-session #13561 [Decision] The shared GitHub identity's GraphQL quota is being burned to 2× — MCP writes go through GraphQL, so seats are silently write-blocked while reads keep working #11742 [finding] MCP issue_read silently truncated an issue body to 20.8% — 1,720 of 2,173 chars dropped with no marker, and REST returns it whole #13573 [finding] The HTML-comment marker loss on the COMMENT surface is a READ-path artifact, not the write-side strip platform-readings records — both channels read on one specimen, bytes present in storage #14265 · Promote H21 (negation-window closing-keyword detection) from report-only patrol row to the blocking PR gate, once the patrol baseline is long enough #10947 (09-04) · [finding] A contract-review PASS leaves ZERO trace on the PR itself — verdict on the card, label cleared, no review object — so a legitimate un-park is indistinguishable from an intruder from the PR side #13417 · skills(ui) + examples: retire the deprecated objectName / viewType ListView spelling in one stroke — the published skill teaches it and three showcase pages repeat it #14343 (Blocked-by: #14791). ⚠️ [finding] The zero-quota payload channel silently drops the NEWEST timeline items once an issue outgrows the SSR first window — measured 3 of 5 comments, both 2026-08-30 dispatch comments missing #13373 / [finding] The zero-quota payload channel renders only the FIRST 15 timeline items and returns an EMPTY tail — so a read-back of a just-posted comment reads byte-identical to sanitizer damage #13385 / [finding] The zero-quota issue-page payload is CDN-CACHED and can be minutes-to-hours stale — cache-busting and no-cache did NOT defeat it, and one seat asserted a half-state about another seat's work on that stale read #13387 / Record the agent-created-Routine transport facts in references/platform-readings.md — fired sessions get no GitHub MCP tools, and self-binding trades new-session recoverability for tool availability #13257 still carry pm:queue + an assignee from the prior regime — read as held.
objectui lane cards this shift : fix(objectql): MetadataFacade object writes now reach the map its reads use (#6725) #7211 / [internal skill] 新增 presales-tender-requirements:售前招标需求说明书编写打法 #6929 / Registry heal restores the metadata-map view but never re-registers a packaged contributor definition an overlay save replaced #6853 closed not-planned; [finding] 分片读取器 categoryOfDefKey 对「非字符串条目」抛裸 TypeError:被外层 catch 兜住,但消息不报文件名/不报条目/无 issue 锚点(三个分片产物共用) #6751 pm:retriage; [finding][spec] The dashboard.widgets[].aria tombstone sends the author to app.aria as a surviving live surface — App.aria is itself a retiredKey() tombstone removed in the same major #6756 CLOSED by merge; fix(spec): scope the modifyAllRecords bypass declaration to what sharing enforces (#6698) #6852 stays blocked on [finding] MCP search_issues is returning FALSE ZEROS — reproduced on three seats across two repos, and it DEGRADED mid-session, so every dedup that rode on it passed vacuously #13326 ; [cloud half] Declare the environments deep-link via the nav runAction slot; retire cloud#1048's transitional pin (#4848 follow-up) #7251 / Adopt PR #7328 (objectui#3569 showcase datetime fixture): one push + merge — everything else is done and verified #7358 / finding: a repeated ?paradigm=/?source=/?category=/?type= on the automation descriptor routes silently empties the designer palette (200, zero rows) #7360 / fix(spec): discriminate FieldSchema.defaultValue (literal / runtime token / CEL envelope) and validate each shape on its own terms #7403 / SharingRuleSchema is .strict() but declares no ADR-0010 protection envelope, while the metadata read path stamps _packageId onto stored bodies type-blind #7404 / Rewrite the family-4 record in filter-logic-conformance.ts: the 2026-08-10 exclude ruling was withdrawn — include re-affirmed #7406 / docs(spec,objectql,driver-sql): declare the unanchored autonumber readback boundary (#7287) #7405 / finding: ListRunsRequestSchema.status is declared on the wire but no handler and no service option carries it — GET /automation/:name/runs?status=failed silently lists every run #7359 CLOSED by merge, label-clean; fix(metadata-core): derive the ADR-0106 D4 read exemption from the #6603 write gate (#7020) #7361 / /data harness: the success exit is still a stand-in, so a success-envelope regression cannot go red there either #7362 bare (fix(metadata-core): derive the ADR-0106 D4 read exemption from the #6603 write gate (#7020) #7361 is domain:ui's); ObjectQL.delete's single-id cascade is not transactional — a refusal mid-cascade leaves earlier children deleted while the response says the delete failed #7413 bare-with-domain:devx; fix(example-showcase): route external-datasource fixture through the sqlite fallback #2890 (pm:on-hold · domain:spec) is the consumer-half carrier [finding] The #11284 convergence shipped only its producer half: the react-blocks contract deprecates objectName / viewType on ListView in favour of data={{ provider: 'object', object }} / type, and the lint blesses that spelling — but objectui's ListView reads neither, so the canonical spelling validates green and renders an empty list #14791 names. Filed 06:58Z after PR Sweep the remaining "no runtime consumer" ledger notes that predate the previews-count-as-consumers ruling — datasource _note, permission rowLevelSecurity.label, plus a mechanical pass #7427 landed (dedup 06:57Z clean) : fix(cli): pass unrecognised functions entries through the lowering (#7318) #7461 (dispatched 07:42Z; CLOSED by merge 09:00Z, label-clean) (the eval-token oracle gate — must_contain tokens vs the guides, per-guide vs bundle-wide, whole-token vs substring; the class finding: a repeated ?paradigm=/?source=/?category=/?type= on the automation descriptor routes silently empties the designer palette (200, zero rows) #7360 / docs(spec,objectql,driver-sql): declare the unanchored autonumber readback boundary (#7287) #7405 cleaned by hand) · refactor(runtime): PermissionDeniedError has ONE declaration again (#7270) #7462 (dispatched 07:42Z; 17 json fences that are really jsonc: 12 guides/schema-expressions.md, 4 rules/protocol.md, 1 rules/styling.md; no gate reaches fence tags in skills/) · QA run · api-backend (FULL area) · a86db175 · 2026-08-10 · 6 PASS / 2 PARTIAL / 3 FAIL #7463 (dispatched 09:13Z; delivered 09:50Z as PR fix(spec,runtime,service-automation,client): GET /automation/:name/runs?status= filters instead of being dropped (#7359) #7490 with items 1 + 3, merged ac8d523 , landed 10:21Z; back to pm:queue 10:47Z for item 2 → [Decision] Skills optimization program — batch 5 (2 items): objectui check-skill-examples.mjs — where the root-devDependency resolution bound lives (objectui#7463 item 2), and whether the marked-fence population becomes shrink-only (objectui#7359 step 3) #14909 ) · assertControlledByParentWrite answers a metadata defect and a missing row with the same 403 PERMISSION_DENIED "requires edit access to its master record" #7474 (filed 08:06Z from the refactor(runtime): PermissionDeniedError has ONE declaration again (#7270) #7462 flight, dedup clean; graded by the seat 09:12Z domain:skills + priority:p3, waits behind PR docs(spec): make submitBehavior's TSDoc state the mode-aware default #7473 : 11 JSON fences that parse under no dialect — 8 multi-document listings, 2 ... elisions, schema-expressions.md:206 kept json — plus 7 retagged jsonc fences now eligible for the os:check marker; one content-edit flight) · pm-dispatch SKILL: the file-at-destination ruling (#7165) puts target:v17 cards into cloud, which the 发版板 section says can never happen — a live v17 card was invisible to both prescribed queries for ~10h #7493 (10:00Z, bare: ComponentInput.defaultValue?: any at packages/types/src/base.ts:550, the reason baseline row 1 exists) · updateViewConfig stores "per-view personal config" as ONE org-wide metadata item — sort/hiddenFields/columnState/rowHeight written by any user apply to every user of the view #7494 (10:00Z, domain:skills p3; pm:queue 10:47Z → dispatched 10:53Z → delivered 11:14Z as PR spec: rule the submitBehavior.url semantics — objectui#4190 dead-ends on it #7496 → ACCEPT 11:30Z, at the governed terminal ) · Design: does approver routing imply record read visibility? (#7345 model half) #7497 (11:19Z, bare: QueryParams [key: string]: any at packages/types/src/data.ts:133 — the index signature that let the guide's filter typo compile and be dropped; contract-first candidate, size M) · fix(plugin-security)!: split controlled_by_parent write refusals by true semantics #7506 (13:44Z, documentation · domain:skills · p3, seat-graded: the CLAUDE.md twin of [Decision] Skills optimization program — batch 3 (5 items): DATA-F-07 defineHook() vs the platform's own examples · #13597 Phase-2 — X0 quote policy · CLAUDE.md excerpt form · the four-copy decision frame · cross-file line-budget moves #14685 item 3 — 51 lines, two hand-copied excerpts of AGENTS.md:234-243, a charter line that says one rule while two are inlined; governed; waits on the maintainer extending ruling B — batch 6 candidate). Recorded, not carded, from the two flights: guides/project-setup.md:115 (a genuine javascript postcss config) is the whole cost of any future decision to point a doc gate at skills/; evals/protocol.json has no basename-matching guide (its guide is rules/protocol.md) — the fact that decided the bundle-wide oracle; page-builder.json eval 3 chart is taught only in sibling guides; the create-as-mocked-method class (docs(spec,objectql,driver-sql): declare the unanchored autonumber readback boundary (#7287) #7405 ) is semantic and no token-level gate can close it. Dropped after dedup: the two pin suites failing on a BUILT tree are already open as [finding][devx] Docs Drift Check is package-granular, so any PR touching @objectstack/spec lists ~112 docs — an advisory that large is one every reader learns to skip #6893 (check-sdui-registration-pins) and fix(rest): drop a nav group DECLARED empty, not just one the gate emptied (#7380) #7460 (check-readme-exports). The shrink-only decision on the marked population (finding: ListRunsRequestSchema.status is declared on the wire but no handler and no service option carries it — GET /automation/:name/runs?status=failed silently lists every run #7359 step 3) is [Decision] Skills optimization program — batch 5 (2 items): objectui check-skill-examples.mjs — where the root-devDependency resolution bound lives (objectui#7463 item 2), and whether the marked-fence population becomes shrink-only (objectui#7359 step 3) #14909 item 2 (batch 5); the remedy-authority coverage question and fix(plugin-security)!: split controlled_by_parent write refusals by true semantics #7506 are batch 6 candidates.
⚠️ Fleet flags: triage seat [PM seat] triage (objectstack-wide) — 🟢 huangyiirene · session_019kDRpB7D2XzVzkaLp57T5D #6015 vacant in the daily sense (but grading this lane's bare cards within ~1 h tonight); objectui carries 55+ bare cards (all ≥ fix(plugins): sweep the plugin composition roots' slot lookups — 35 sites typed, two alias-only HTTP reads fixed (#4251 B5) #6790 ). The shared GitHub identity rate-limited 2026-09-02 18:3xZ–18:4xZ and again 02:5xZ–04:0xZ 09-03 (GraphQL reads refused while REST succeeded); the GitHub MCP server dropped and reconnected at ~02:2xZ and at the 03:13Z worker restart (tools re-loaded, no write lost).
Hot-file serial queue
scripts/check-skills-token-ratchet.mjs: free. scripts/pm/dispatch-gates.mjs: free (PR #14765 landed 07:48Z; #14870 waits on PR #14860 only). scripts/pm/check-skill-line-ratchet.mjs: PR #14860 at the terminal (the map's single writer until it lands; the re-lock pin PR waits behind it). AGENTS.md: #14789 and #14802 landed (:1154 released; line count to re-measure at the re-lock). .claude/skills/pm-dispatch/SKILL.md: #14779 and #14784 landed (:166-171 released); PR #14911 at the terminal (quote sites + :25). CLAUDE.md: free (PR #14855 landed). references/platform-readings.md + lanes/cli.md + lanes/services.md + rest-channel.md + scripts/check-ratchet-remedy-authority.mjs: PR #14860 at the terminal. scripts/check-skill-frame-sync.mjs + scripts/check-skill-frame-freshness.mjs + the two former dev-side frame blocks: free (PR #14862 landed; COPIES = 2). .claude/agents/os-dev.md: #14779 and #14862 landed; PR #14808 (:232 + :303) and PR #14911 (:23 + quote sites) at the terminal on disjoint hunks. .claude/skills/pm-dispatch/references/decision-analysis.md + contract-review.md + dispatch-runbook.md + landing-operations.md + lanes/director.md + seat-post-protocol.md: PR #14911 at the terminal (#14869 's runbook bullet waits behind it and PR #14860 ); skills/objectstack-pm-dispatch/SKILL.md: free. skills/objectstack-data/SKILL.md: free (#14777 landed). skills/objectstack-ui/rules/list-views.md: free (#14781 landed); rules/pages.md + the three showcase pages: released; SKILL.md: free. skills/objectstack-ai/SKILL.md: PR #14819 landed; PR #14953 (:396, :404) at the terminal. skills/README.md: free (PR #14786 and PR #14795 landed 02:35Z). skills/objectstack-api/**: free. objectui skills/objectui/** fence tags (guides/schema-expressions.md, rules/protocol.md, rules/styling.md): PR #7473 at the terminal (#7474 waits behind it); objectui scripts/check-skill-eval-tokens.mjs + .github/workflows/skill-eval-tokens.yml + scripts/dependabot-merge-gate.mjs + merge-queue-reporting.test.ts + content/docs/guide/ci-cd-pipeline.md: landed (e307c98); objectui scripts/check-skill-examples.mjs + scripts/__tests__/check-skill-examples.test.ts + content/docs/guide/ci-cd-pipeline.md: landed (ac8d523); scripts/check-skill-examples.mjs:385-387 + skills/objectui/guides/testing.md: PR #7496 at the terminal; #7463 item 2 (the bound) waits on #14909 ; the shared harness check-doc-snippet-types.mjs: free until #14909 item 1 is ruled; scripts/check-doc-fence-languages.mjs: free (widening declined by measurement in PR #7473 ); objectui CLAUDE.md: #7506 waits on a ruling (batch 6). Program rules: one flight per published package; splits add ceiling rows pinned at landed counts and never edit other rows; check:role-word reds on any deletion of a baselined occurrence; ceiling re-locks happen once, after the flights; a Leg-2 binding is keyed by file path + heading; check:skill-frame-sync reads its copies by file path; the line ratchet is never edited by a programme flight; only .objectui-sha is a declared single-writer path.
Notes
Standing facts: value gate + reject authority from #13597 in force; scripts/docs-audit/handwritten-docs.json NON-governed by ruling; published skills/** governed in objectui too (ui#6866 批 #7 ). Contract-review fuse: served model read claude-fable-5-1 at 06:08Z, 16:48Z, 19:0xZ 09-02, 2026-09-03T01:13Z and 05:33Z (get_session: session_context.model = last_served_model; the 05:33Z read also shows rate_limit_info seven-day allowed_warning); since PR #14644 merged CONTRACT_REVIEW_TIER on main names that same value — reading = constant; every review this shift done at that tier in-seat before any human review request (clause ② on #14139 and #14797 , clause ① on #12911 ). scripts/pm/check-clause2-carriers.mjs cannot reach the API from this container (403) — carrier pairs are read by hand and recorded in each ACCEPT. Governed-merge audit window for the next round, exactly: --since-ref objectstack=6aea1f559267 --since-ref objectui=ad3d4029abb9 --since-ref objectos=376b29e23a01; cloud has no checkout here (NOT MEASURED). Dev gate logs are not retained in worktrees — UNRECOGNISED lines NOT MEASURED this shift. Source facts re-verified this shift are on the ACCEPT / review comments of each card. Cross-wall lessons recorded: briefs require a push after every commit; dev turns that wait on a monitor notification stall — briefs say poll the log; at ≥ 90% quota the seat orders checkpoint + push + stop and resumes the same devs after the reset. Timers: check-in #44 at 2026-09-03T14:43Z (60-min cadence after two silent rounds). Prior body revisions carry earlier running states.
This post is the single authoritative registration of the skills seat. Four-section template; the job description is versioned at
.claude/skills/pm-dispatch/references/lanes/skills.md— ⛔ not copied here.Current PM
🟢 os-litant — session⚠️ Correction on record (03:17Z revision): the 02:38Z revision's "merge patrol at 02:32Z, none merged" described a patrol that was NOT run; a patrol line is written only from a ⚠️ Second correction (04:41Z): the 04:00Z revision's "ACCEPT at green" for #14819 described an ACCEPT that had not been posted — the check-in's ⚠️ Third correction (06:33Z): the item-4 ACCEPT (5521562711) named two follow-up cards as "#14864 / #14865" before
session_01LraLgQVGq8egUwfYZpbYt1, assumed 2026-09-02T01:12Z, maintainer-invoked interactive session (/pm-dispatch skills). Maintainer's in-session directives this shift (verbatim, untranslated): 「审核所有的 skills,进行全面的优化。」 → program anchor #14292; 2026-09-02T15:1xZ 「90分钟后,并发加到5」 → heavy slots = 5 from 16:4xZ; 2026-09-02T23:2xZ 「继续」 → the seat resumed dispatching; 2026-09-03T02:2xZ 「最近 51 次队列构建 14 次失败(27%)。 什么原因」 → answered in chat 02:31Z and recorded on the queue-flake anchor #14648 (comment 5519439748); 04:1xZ 「14715 已经合并啦」 → verifiedaccb9231c7; 04:18Z 「现在队列恢复了吗」 → answered 04:27Z: not recovered, four post-fix ejects read from raw logs and recorded on #14648 (5520320723); 04:2xZ 「…这个谁在解决」 → answered 04:31Z: nobody, the card closed, no PR on the file; 04:3xZ 「14648 已经解决了」 → the seat could not confirm it from primary sources at 04:31Z, said so, stopped reading the queue, and corrected its own "reopening" line on the anchor (5520385642). Round-open marker = this session's takeover comment; the shift-close briefing will be the final comment. Round reports (中文) in chat at 07:0xZ … 23:4xZ (09-02), 00:2xZ, 01:06Z, 01:27Z, 01:35Z, 01:47Z, 02:01Z, 02:14Z, 02:38Z, 03:18Z, 03:34Z, 04:23Z, 04:31Z, 04:33Z, 05:35Z, 05:59Z, 09:22Z, 10:03Z, 10:10Z, 10:21Z, 11:00Z, 11:31Z, 12:16Z, 12:36Z, 13:0xZ and 13:4xZ (09-03; the 05:59Z one carries decision #14859 and the 10:03Z one decision #14909 for a one-line reply). Timers: check-in #44 at 2026-09-03T14:43Z (send_later; 60-min cadence after two silent rounds, #42 and #43); devs notify on delivery. Readings carry the moment they were taken; from the 01:18Z revision the seat writes exact-minute UTC stamps.git logrun in the same minute.get_commentsread found none; it was posted at 04:41Z (5520455372).createhad returned their numbers; they are #14869 and #14870 (corrected on the card in the same minute, comment 5521570388).Inherited + running ledger
1A 2A 3A 4Aand CLOSED by the seat at 2026-09-03T00:59Z: items 1, 2, 4 merged; item 3's execution is thedomain:specseam card Seam (spec lane, ruled):gen:react-blocksstops emittingskills/objectstack-ui/contracts/react-blocks.contract.json— the markdown rendering becomes the single AI-facing output (#14296 item 3 = A) #14559 (open,pm:queue, the spec lane's).defineHook()vs the platform's own examples · #13597 Phase-2 — X0 quote policy ·CLAUDE.mdexcerpt form · the four-copy decision frame · cross-file line-budget moves #14685 RULED1A 2C 3B 4B 5A(director seat record 5520452691 at 04:40Z, maintainer verbatim 「同意,然后执行契约复审」; read by the seat at 05:25Z). Post-ruling steps taken 05:29Z: item 1 → migration card Migrate the two in-repo hook examples (app-crmOpportunityStageHook, app-todotaskHook) todefineHook()so the platform's own examples match what the published data skill teaches (#14685 item 1, ruled A) #14850 filed (examples, bare) and Skills optimization flight — skills/objectstack-data: RESTRUCTURE (≈ −10,150 tok, −22%) — hooks taught twice across two files, generic-JS patterns, 3.3% example gate coverage,sharingModelused by 31/31 objects and explained nowhere #14297 CLOSEDcompleted(pm:queuestripped); ruling recorded on PM corpus audit (maintainer-directed): classify every instruction line — keep / duplicate / demote / delete — then rewrite and re-lock every ratchet #13597 (5520981526), [finding] The&page=Ncompleteness walk refuses with HTTP 422 past 9,900 items — the ceiling on the remedy #14068 just landed #14133, finding(skills): spec@objectui shift-end report 2026-09-02 — two principle gaps (types-face routing vs. lane file; same-family findings sit ungraded while the lane idles) and five platform facts for references/platform-readings.md #14445, [finding] The in-seat contract-review path was read as "the implementing session reviews its own diff" — PR #14191 was PASSed and label-cleared by its author session, dropping the independence clause and the director seat's never-writes-code charter in one act #14209; [Decision] Skills optimization program — batch 3 (5 items): DATA-F-07defineHook()vs the platform's own examples · #13597 Phase-2 — X0 quote policy ·CLAUDE.mdexcerpt form · the four-copy decision frame · cross-file line-budget moves #14685 CLAIMED by the seat (pm:queue→pm:dispatched, claim 5520978602) and items 2–5 dispatched as four flights (below), eachPart of #14685+Part of #13597, draft-only, in-seat contract review before any human review request.17.0.0-rc.5registry snapshot (drift 29–165%), one rule stated five times, and a--stored --applycommand that exits 1 for every agent reader because it omits--yes#14307 · skills(automation): optimization flight — the authored control-flow trio taught and the BPMN trio demoted, notify given its fence, the eval deduplicated, hooks and ETL pointed away (net −1,278 tokens) #14467 · skills(formula): optimization flight — cut the cron/template quickrefs and section-5 narration, teach virtual formula fields and fault-open form predicates (net −844 tokens) #14563 → Skills optimization flight — skills/objectstack-formula: DIET (≈ −1,265 tok, −21%) — 21% of the file onpreviousvsrecord, cron/template surfaces the frontmatter routes away (0 corpus usages), and the one decision the package exists for (formula fields are virtual:where/orderByon one = 400) taught nowhere #14316 · objectui#7370 → objectui#7251 · objectui#7375 · skills(automation): delete the planned-eval stub and drop its ceiling row (#14296 item 2) #14578 → Skills optimization flight — skills/objectstack-automation: RESTRUCTURE (≈ −1,125 tok net / −2,105 gross) — the package teaches a control-flow trio with zero authorings (parallel_gateway/join_gateway/boundary_event) and never mentions the trio the corpus uses (parallel/try_catch/loop);notify(#1 node type, 20 uses) has one table cell; the description still promises ETL pipelines removed in spec 17 #14308 · skills(query): delete the planned-eval stub and drop its ceiling row (#14296 item 2) #14585 → Skills optimization flight — skills/objectstack-query: RESTRUCTURE (≈ −4,088 tok, −33%) — seven rules stated twice across SKILL.md and rules/, 27% of tokens on an aggregation surface with zero app-author call sites,context(74 real usages) taught nowhere, and the canonicalexpandexample expands nothing #14302 · skills(platform): optimization flight — orphan and pointer files removed, hooks reference linked directly, requires/engines/onEnable taught (net −3,608 tokens) #14351 · skills(i18n): optimization flight — drop the restated overview, the zero-usage layout and plugin bootstrap and the duplicate template; teach the generated-bundle shape and the --objects-only divergence (net −2,069 tokens) #14574 → Skills optimization flight — skills/objectstack-i18n: DIET (≈ −1,685 tok, −27%) — "Core Concepts" restated in full four sections later, a per-namespace layout with zero real usages,os i18n checktaught in six places, and the #1 real pattern (a package shipping its own generated bundle) dead-ends #14315 · docs(skills): the four small internal skills — seven dead references, four copies replaced by pointers, and thelive-elsewherenever-remove verdict #14598 → Skills optimization flight — the four small internal skills (+ objectuiverify): seven dead references, three rules copied from os-dev.md / SWEEP.md / RUNNER.md, thelive-elsewheregap (#14058), and a versioned Chromium path that breaks on the next image bump #14317 + [finding]spec-property-retirementskill predates thelive-elsewhereverdict — its ledger-verdict discipline never names the never-remove cross-repo case #14058 · skills(ai): optimization flight — the closed agent surface cut to its retirement rows, the flagship defineSkill example made to resolve, open-edition MCP wiring and the tool registry taught (net −1,315 tokens) #14463 · skills(api): delete the planned-eval stub and drop its ceiling row (#14296 item 2) #14564 → Skills optimization flight — skills/objectstack-api: RESTRUCTURE (≈ −2,125 tok, −31%) — the leading canonical example teachesRestApiEndpointSchema(0 consumers repo-wide), three sections are other packages' anchors, and the description forbids the client seat that ~660 tokens of body then teach #14304 · fix(pm): the contract-review tier constant names the served tier and is the only place the tier's value lives (#14303) #14644 → finding(pm-dispatch):CONTRACT_REVIEW_TIER = 'claude-fable-5'no longer matches the served Fable tierclaude-fable-5-1, so the in-seat review fuse reads a literal mismatch on every current Fable seat #14303 · docs(os-dev): the skip-changeset clause states its criterion as the rule and its list as examples; dispatch-gates prints the same criterion (#13680) #14621 → [finding] The os-devskip-changesetclause states a CLOSED surface list that omits repo-root tooling config — the criterion beside it, and the repo's own merged precedent on the SAME file, both cover it #13680 · objectui#7407 → objectui#7358 · docs(scripts): make check-agent-model-declared's header the stated home of the model-resolution order #14689 → [finding] check-agent-model-declared's header will point at os-dev.md for "the full order and both adjacent traps" once the model-pin comment shrinks to a pointer back at it #14232 · objectui#7412 → objectui#7404 · objectui#7414 → objectui#7403 · the 22:4xZ–00:0xZ batch: skills(ui): split the entry into SKILL.md + rules/ under #14296 item 1 (package net −58 tokens, −0.17%) #14658 (→ Skills optimization flight — skills/objectstack-ui: RESTRUCTURE (≈ −9,170 tok, −25%) — a 25.4k-token single entry file, dashboards taught in two sections 640 lines apart, a generated contract shipped twice, and the canonical dashboard example teaching two retired widget keys #14298 CLOSED) · skills(ai): delete the planned-eval stub and drop its ceiling row (#14296 item 2) #14652 → Skills optimization flight — skills/objectstack-ai: RESTRUCTURE (≈ −2,300 tok, −29%) — 26% of the file teaches the agent surface it forbids its readers, the flagshipdefineSkillexample declares four tools that resolve to nothing, and the open-edition MCP path (the only AI path without a cloud licence) is taught nowhere #14305 · skills(pm-dispatch): split the entry into SKILL.md + rules/ under #14296 items 1 and 4 (entry 9,708 tokens, package net −21) #14660 → Skills optimization flight — skills/objectstack-pm-dispatch: RESTRUCTURE (≈ −4,255 tok, −29%) — monorepo-only lore inert in a customer project, the report JSON printed twice, and four drifts from the internal dev contract (report double-channel,premise_still_valid, the stash ban, theSession:line) #14300 · skills(i18n): validation messages are a translation group since #14253 — correct the claim and its neighbours (net +7 tokens) #14664 → Published skillobjectstack-i18nteaches that validation messages are not a translation group — false once #14253 lands #14377 · skills(data): split security into rules/security.md under #14296 item 1 (package net −64 tokens) + DATA-B-06 #14673 (→ Skills optimization flight — skills/objectstack-data: RESTRUCTURE (≈ −10,150 tok, −22%) — hooks taught twice across two files, generic-JS patterns, 3.3% example gate coverage,sharingModelused by 31/31 objects and explained nowhere #14297pm:queue) · skills(platform): delete the placeholder eval README and drop its ceiling row (#14296 item 2) #14681 → Skills optimization flight — skills/objectstack-platform: RESTRUCTURE (≈ −5,970 tok, −25%) — an orphan rules file with zero inbound links, the canonical hooks reference two hops from the entry file, "When to Use" printed twice, andrequires:/engines.protocol/onEnable(every real config) taught nowhere #14299 · test(pm): pin the contract-review tier's one-value-site promise in the dispatch-gates self-test (#14616) #14672 → [finding] The one-value-site promise for CONTRACT_REVIEW_TIER (SKILL.md 「模型升级只改一行一个文件」) is held only by a manual grep — no self-test pins it, so the next model refresh can re-open the drift silently #14616 · docs(pm-dispatch): rule how clause ② is graded — provisional claim, mechanical floor, judged conformance #14696 → [decision] Clause ② has at least three distinct classes and they are being judged case-by-case — rule how each is graded, or the gate is a coin-flip #14047 · docs(pm-dispatch): make the stop-condition clause carry the executability criterion #14697 → [finding] 派发令里的「动手前先报告」对一次性子代理不可执行 —— 它没有中途提问的通道,该形态等价于「不要做」或「你自己看着办」,而两者意思相反 #14031 (→ Census of dispatch templates and skills text for the unexecutable "report before acting" fence form, now that the executability criterion is landed #14768 filed, bare) · objectui#7408 → objectui#7360 · objectui#7416 → objectui#7406 (2026-09-03T00:21Z) · docs(skills): repair five semantic minors in the axis-weighting and batch-presentation encoding #14779 → [finding] Five semantic minors in the axis-weighting/batch-presentation encoding — caught by the at-tier review the frame-sync gate structurally cannot perform #14146 (card closed 02:51Z; label-cleaned 03:16Z) · docs(agents): a released-package bug fix takes a patch changeset, never none #14789 → [finding] AGENTS.md says "Pure bug fixes do not require a changeset" — a pure bug-fix PR in a released package following it literally has no green path throughCheck Changeset#14647 (closed 03:08Z; label-cleaned 03:16Z) · skills(data): drop the two bare ADR-0010 citations from the objectstack-data skill #14777 → [finding] Bare ADR numbers in the published catalog — 177 sites, and threeprotection.reasonexamples teach customers to writesee ADR-0010into their own metadata #11791 (82a294bff3; closed 03:52Z by os-zhuang; label-cleaned 03:59Z, comment 5520116383) · fix(skills): teach {current_user_id}, not $currentUser, in the objectstack-ui Filtering example #14781 → skills/objectstack-ui teaches$currentUseras a filter value, contradicting its own "only two tokens resolve in a filter" contract #14139 (521eaf9e41; closed 03:52Z; label-cleaned 03:59Z, comment 5520117157) · objectui#7422 → objectui#7405 (12bca53, merged 06:24:01Z; card closed 06:38Z by os-zhuang; label-cleaned 06:55Z, comment 5521810219) · objectui#7427 → objectui#7359 (c92dc41, merged 06:27:06Z —check-skill-examples.mjs+Skill Example Checkon objectuimain; card closed 06:42Z; label-cleaned 06:55Z, comment 5521811043) · docs(agents): stop telling authors to hand-edit generated CHANGELOG.md #14802 → [finding]AGENTS.md:1154post-task checklist tells the author to "UpdateCHANGELOG.md" by hand — butCHANGELOG.mdis generated from changesets at release and ships inside the npm package #14792 (f116b8f8d1; card closed 08:17:56Z by os-zhuang; label-cleaned 08:28Z, comment 5522855785;AGENTS.md:1154released). Every closed card label-clean. Merge patrols at 09:10Z, 09:59Z, 10:46Z and 10:58Z (git log --grep '(#<pr>)'per terminal PR on the fetchedorigin/main, cross-checked at 10:59Z against the API'slist_commitshead: objectstack450e73b4e8=refs/heads/main, objectui20cb8db=refs/heads/main): PR fix(pm): refuse--tieragainst--commands/--jsoninstead of silently preferring the tier #14765 → dispatch-gates:--tier --commandssilently prefers--tier— the one two-stdout-shape blend the CLI does not refuse #14294 merged2ee88cb063at 07:48:47Z (closed by the director seat 10:06:36Z; label-cleaned 10:56Z, comments 5524656758 + correction) and objectui#7490 → objectui#7463 mergedac8d523(queue commit 10:07:42Z, landed 10:21:54Z per the API).origin/mainat1596b4c585(07:48:45Z) while ten merges up to 08:53Z were already onmain— the shared checkout's fetch returned a head about two hours stale and moved only at 10:53Z; and the 10:48Z reading named5c09fd5(10:21:54Z) for objectui#7490, a sha that exists in no ref or reflog of the checkout — corrected on QA run · api-backend (FULL area) · a86db175 · 2026-08-10 · 6 PASS / 2 PARTIAL / 3 FAIL #7463 (5524664881). From this round a patrol reading is the git log and the API head in the same minute, with the newest subjects printed beside the grep. 11:27Z patrol (git head = API head: objectstack7317cf266e, objectui48c19bd): PR docs(pm-dispatch): collapse CLAUDE.md's four excerpts to rule, hook and anchor #14855 → [Decision] Skills optimization program — batch 3 (5 items): DATA-F-07defineHook()vs the platform's own examples · #13597 Phase-2 — X0 quote policy ·CLAUDE.mdexcerpt form · the four-copy decision frame · cross-file line-budget moves #14685 item 3 merged5290fcbe91(queue commit 08:56:04Z) and PR docs(pm-dispatch): keep two copies of the decision frame, not four #14862 → [Decision] Skills optimization program — batch 3 (5 items): DATA-F-07defineHook()vs the platform's own examples · #13597 Phase-2 — X0 quote policy ·CLAUDE.mdexcerpt form · the four-copy decision frame · cross-file line-budget moves #14685 item 4 merged7b19b9ea88(08:58:12Z), both onmainbetween the 10:59Z and 11:27Z readings —CLAUDE.mdat 36 lines and the decision frame at two copies are live; [Decision] Skills optimization program — batch 3 (5 items): DATA-F-07defineHook()vs the platform's own examples · #13597 Phase-2 — X0 quote policy ·CLAUDE.mdexcerpt form · the four-copy decision frame · cross-file line-budget moves #14685 stayspm:dispatcheduntil PR tooling(pm): admit a same-PR cross-file line-budget move, and take the first one #14860 and PR docs(pm-dispatch): X0 quote policy — date pointers for non-operative maintainer quotations (item 2 of the skills batch, ruling B) #14911 land (recorded on the card 11:29Z). 12:13Z patrol (git head objectstackb1d49b3940, one merge ahead of the API's3210b3d5daread a minute earlier; objectuie176053= API): PR docs(skills): the AI domain has no CEL site — correct the os validate clause in objectstack-ai #14819 → [finding]skills/objectstack-ai/SKILL.md:405-406calls a model-registrypromptTemplate.system/.user"a CEL predicate" — those keys are thetemplatedialect ({{var}}), and the AI domain has no CEL site at all #14797 mergedd355c36115(queue commit 09:21:57Z; closed by os-zhuang 11:32:37Z; label-cleaned 12:14Z, comment 5525562567); docs(agents): guard history dating against a shallow clone #14808, tooling(pm): admit a same-PR cross-file line-budget move, and take the first one #14860, docs(pm-dispatch): X0 quote policy — date pointers for non-operative maintainer quotations (item 2 of the skills batch, ruling B) #14911, objectui#7473 and objectui#7496 still open. 12:54Z patrol (git head = API head: objectstacke560b4d513, objectuie176053): no terminal PR merged; docs(agents): guard history dating against a shallow clone #14808, tooling(pm): admit a same-PR cross-file line-budget move, and take the first one #14860, docs(pm-dispatch): X0 quote policy — date pointers for non-operative maintainer quotations (item 2 of the skills batch, ruling B) #14911, docs(skills): stop promisingos validatechecks a model-registry entry #14953, objectui#7473 and objectui#7496 open. 13:40Z patrol (git head = API head: objectstack9c7237c8d612:48:28Z, objectui2d3fe7312:56:13Z; the newest subjects printed beside the grep): no terminal PR merged; the same six open.git log -Sreports the horizon commit as the introduction of far older text — exit 0, plausible sha, plausible date, no warning — and the os-dev contract carries no guard for dating history #14793 — PR docs(agents): guard history dating against a shallow clone #14808 (draft; ACCEPT 5519891496 at 03:28Z) · [Decision] Skills optimization program — batch 3 (5 items): DATA-F-07defineHook()vs the platform's own examples · #13597 Phase-2 — X0 quote policy ·CLAUDE.mdexcerpt form · the four-copy decision frame · cross-file line-budget moves #14685 item 5 — PR tooling(pm): admit a same-PR cross-file line-budget move, and take the first one #14860 @62ddd75fb5(Part of; the cross-file-move rule + remedy-authority exception + the first move, +10 vs −11, map total 5112 → 5111; contract review PASS 5521371476 at 06:12Z with the seat's own gate runs and one reverse-verification mutation in a compare worktree; label stripped; ACCEPT 5521461378 at 06:23Z, reviewers read back) · [Decision] Skills optimization program — batch 3 (5 items): DATA-F-07defineHook()vs the platform's own examples · #13597 Phase-2 — X0 quote policy ·CLAUDE.mdexcerpt form · the four-copy decision frame · cross-file line-budget moves #14685 item 2 / [Decision] Skills optimization program — batch 4 (1 item): #14685 item 2's replacement form — ruling C's "date + pointer to the authoritative GitHub comment" collides with the 2026-08-12 "numbers go" ruling thatcheck-skill-id-lintenforces on the same surface #14859 — PR docs(pm-dispatch): X0 quote policy — date pointers for non-operative maintainer quotations (item 2 of the skills batch, ruling B) #14911 @5b72f66fce(Fixes #14859+Part of; the X0 quote policy in ruling B's form — 44 + 2 sites on the two named files, 34 inreferences/**, five meta-rule sentences aligned, −42 lines / −1,604 tokens; contract review PASS + ACCEPT 5524205946 at 10:19Z, label stripped, reviewers os-zhuang + hotlong read back 10:20Z, comment 5524214132) · [finding]skills/objectstack-ai/SKILL.md:396tells the author to runos validateafter "a model-registry entry" — a recordos validatecannot see, which:332in the same file already says (agents / tools / skills are the only AI stack collections) #14836 — PR docs(skills): stop promisingos validatechecks a model-registry entry #14953 @741e8e7071(Fixes; two intra-line deletions inskills/objectstack-ai/SKILL.md, −8 tokens; contract review PASS + ACCEPT 5525831919 at 12:34Z, label stripped, reviewers read back 12:35Z). Four objectstack PRs, every one a governed surface (PR docs(skills): admit hand-authored reference files underreferences/in the catalog anatomy #14786 → [finding] Catalog anatomy drift: hand-authored per-topic files live underreferences/(reserved for generated pointers) in objectstack-platform and objectstack-data, unlinked or linked only by path — PLAT-G-02 / thedata-hooks.mdshape, catalog-wide #14655 and PR docs(skills): settle two false claims in skills/README.md and add three cross-skill routing bullets #14795 → skills/README.md truth + routing sweep:OLD/NEW"evaluate tonullsince M9.5" is anchored nowhere and contradicts the formula skill; "AI tool params" is not a CEL site; the cross-skill routing list lacks the upgrade-vs-platform and objectui inbound decision points #14794 + [finding] Nothing routes an agent authoring object/field/view labels toobjectstack-i18n— the cross-skill routing list inskills/README.mdhas no labels-vs-bundles decision point #14566 merged at 02:35Z, PR docs(pm-dispatch): timestamped readings are the first construct-shaped fix; record the remediation-shape ranking beside it #14784 → pm-dispatch: the PM-side self-discipline class recurs because its remediations are RULES — #11901 chose construct-removal instead and held; four rule-shaped fixes failed again today #12911 merged1596b4c585at 07:48:45Z and PR fix(pm): refuse--tieragainst--commands/--jsoninstead of silently preferring the tier #14765 → dispatch-gates:--tier --commandssilently prefers--tier— the one two-stdout-shape blend the CLI does not refuse #14294 merged2ee88cb063at 07:48:47Z — all four missed by the patrols until the 09:10Z, 09:59Z and 10:58Z readings; the five cards label-cleaned 09:12Z, 10:06Z and 10:56Z; PR docs(pm-dispatch): collapse CLAUDE.md's four excerpts to rule, hook and anchor #14855 and PR docs(pm-dispatch): keep two copies of the decision frame, not four #14862 landed between 10:59Z and 11:27Z,Part of[Decision] Skills optimization program — batch 3 (5 items): DATA-F-07defineHook()vs the platform's own examples · #13597 Phase-2 — X0 quote policy ·CLAUDE.mdexcerpt form · the four-copy decision frame · cross-file line-budget moves #14685; PR docs(skills): the AI domain has no CEL site — correct the os validate clause in objectstack-ai #14819 → [finding]skills/objectstack-ai/SKILL.md:405-406calls a model-registrypromptTemplate.system/.user"a CEL predicate" — those keys are thetemplatedialect ({{var}}), and the AI domain has no CEL site at all #14797 landed between 11:27Z and 12:13Z, label-cleaned 12:14Z), plus objectui#7462 — PR objectui#7473 @ec67429(governedskills/objectui/**; 16json→jsonctag-only; ACCEPT 5522664685 at 08:12Z with the seat's own re-count and a card-premise correction; reviewers read back) and objectui#7494 — PR objectui#7496 @45136c1(governedskills/objectui/**; the threetesting.mdbare-anyrows retired by the honest idiom, Pattern 6 folded in; contract review PASS + ACCEPT 5525039284 at 11:30Z, label stripped on both carriers, reviewers os-zhuang + hotlong read back 11:31Z, comment 5525078432) — they land by an approver's hand: twelve objectstack drafts did between 01:28Z and 12:13Z, and the two earlier objectui drafts at 06:24–06:27Z, once flipped. Non-governed, at the seat's own terminal: objectui#7461 — PR objectui#7475 @0ee77b8(the eval-token gatecheck-skill-eval-tokens.mjs: bundle-wide whole-token oracle, 0 of 125 red, empty shrink-only baseline, own install-free workflow +REQUIRED_CONTEXTSrow + pin suite; zeroskills/files; the seat ran the gate, its 29-case self-test,--measureand one reverse mutation in a compare worktree; its own first CI runSkill Eval Token Checkgreen at 08:07:45Z;Test (shard 3/4)red onRecordDetailView.approvalDeclaredActions.test.tsx, a network-escape guard hit in a file the diff does not touch — standing-down note on the PR 5522858059 and the PR's singlererun_failed_jobsspent at 08:29Z; re-run green at 08:39:00Z, all 29 checks green; ACCEPT 5523057806 at 08:44Z, ready flip 08:45Z, auto-mergeSQUASHarmed 08:46Z, read-back 5523093964 —draft: false,mergeable_state: clean; MERGEDe307c98at 08:46:02Z by the 09:10Z patrol reading; fix(cli): pass unrecognisedfunctionsentries through the lowering (#7318) #7461 closed 09:00:57Z, label-cleaned 09:12Z, read back 09:13Z).skills/objectstack-ai/SKILL.md:396tells the author to runos validateafter "a model-registry entry" — a recordos validatecannot see, which:332in the same file already says (agents / tools / skills are the only AI stack collections) #14836 delivered 12:32Z as draft PR docs(skills): stop promisingos validatechecks a model-registry entry #14953 @741e8e7071, at the governed terminal since 12:34Z (claimed 12:14Z, claim 5525564463, dispatched the minute PR docs(skills): the AI domain has no CEL site — correct the os validate clause in objectstack-ai #14819 was read onmain; report 5525805359; the two deletions atskills/objectstack-ai/SKILL.md:396/:404, intra-line, 417 lines unchanged, tokens 5475 → 5467 by the seat's own ratchet run in a compare worktree; the sharedos validatefence comment (objectstack-api/SKILL.md:411, byte-identical) left alone; 20 of 21 union gates green,check-test-completenessNOT MEASURED by its own text; the dev's reverse leg re-inserted the phrase and showed the count rise while the ratchet stays green — the honest reading, the ratchet prices size;ModelRegistrySchemaconfirmed a live cloud-consumed surface (docs/qa/platform-checklist/areas/ai.json:526), so no enforce-or-remove card follows; contract review PASS + ACCEPT 5525831919 at 12:34Z, label stripped from the PR, reviewers os-zhuang + hotlong requested, read-back 5525835828 at 12:35Z; brief carried the frame read fromorigin/mainb1d49b3940atSKILL.md:886-903in the dispatch minute; governed, draft). objectui#7494 delivered 11:14Z as draft PR objectui#7496, at the governed terminal since 11:30Z @45136c1(report 5524854506 + sanitizer repair 5524858493 + addendum 5525009272; claimed 10:53Z, claim 5524622310; brief carried the frame read fromorigin/main450e73b4e8atSKILL.md:886-903in the dispatch minute —:880-897to:886-903with the merges since 09:20Z, so the brief locates it by its anchor sentences, not by line numbers): Pattern 3's cast deleted becausevalidateSchema(schema: any)takes the value as given; Pattern 7's private-field reach replaced by the publicgetClient()seam with a typedvi.spyOn, and three false claims in that fence corrected (client.data.find,$filternotfilter, the discovery fetch stub) — the seat re-read every source line the report cites (schema-validator.ts:459,index.ts:2149/:2454/:3817/:4096,data.ts:43/:133,filter-converter.ts:107and its single-condition return) and the asserted lowered AST['active', '=', true]holds; both fences stay marked, the three rows deleted in the same commit, 1 declared row left;needs:contract-reviewapplied by the seat on the PR and the card at 11:18Z (the fence now states a falsifiable operator-semantics claim — the clause the label exists for); the increment ordered 11:18Z landed as45136c1(Pattern 6'smockClient as anyattesting.md:194, an unmarked fence, replaced by aPartialliteral with one named widening — the repo's own idiom — and four false props in that fence corrected;--measuremoved the fence from FAIL to pass against built types); contract-review PASS + ACCEPT 5525039284 at 11:30Z, both carriers stripped, reviewers os-zhuang + hotlong requested on the draft, read-back 5525078432 at 11:31Z; CI on45136c1:Skill Example Check,Doc Snippet Type Check,Type Check,Lintgreen at 11:29Z, shards running (governed, draft). Routed from the report after dedup: objectui#7497 (QueryParams[key: string]: anyatpackages/types/src/data.ts:133, bare), finding 2 folded into objectui#7493 (validateSchema(schema: any)), finding 4 folded into objectui#7463 as item 4 (--measureprints the finding line, not the row key). [Decision] Skills optimization program — batch 3 (5 items): DATA-F-07defineHook()vs the platform's own examples · #13597 Phase-2 — X0 quote policy ·CLAUDE.mdexcerpt form · the four-copy decision frame · cross-file line-budget moves #14685 item 2 (r2) delivered 10:01Z as draft PR docs(pm-dispatch): X0 quote policy — date pointers for non-operative maintainer quotations (item 2 of the skills batch, ruling B) #14911, at the governed terminal since 10:19Z @5b72f66fce(report 5524030178 + addendum 5524174496: 44 REWRITTEN + 1 NODATE + 5 KEEP + 4 frame-sync on the two named files, stage 2 overreferences/**34 rewritten / 4 KEEP / 1 SKIPPED-HOTFILE, nine dangling 原话见 pointers repaired; −42 lines / −1,604 tokens over 8 files; the seat's own runs in a compare worktree at5b72f66fce(10:18Z): id-lint 23 files clean, the line ratchet with every touched file shrunk (SKILL.md 989 → 964, os-dev.md 469 → 467, runbook 280 → 273), frame-sync 4 copies isomorphic, frame-freshness current, no added line carries an issue number or a comment id, zero 「日期 + 原话」 left on the surface; the increment ordered 10:07Z landed as5b72f66fce(+9/−10: the five on-surface meta-rule sentences now read the ruled form); contract-review PASS + ACCEPT 5524205946 at 10:19Z on [Decision] Skills optimization program — batch 4 (1 item): #14685 item 2's replacement form — ruling C's "date + pointer to the authoritative GitHub comment" collides with the 2026-08-12 "numbers go" ruling thatcheck-skill-id-lintenforces on the same surface #14859,needs:contract-reviewstripped, reviewers os-zhuang + hotlong requested on the draft, read-back 5524214132 at 10:20Z; the two off-surface sentences and therest-channel.md:90SKIPPED-HOTFILE site → [finding] After ruling B (#14859),AGENTS.md:12-13and thescripts/pm/check-skill-id-lint.mjsheader still describe the pm-dispatch provenance form as "date + verbatim quote" — the two off-surface sentences PR #14911 could not touch #14913, bare) onclaude/issue-14685-x0-quote-policy([Decision] Skills optimization program — batch 4 (1 item): #14685 item 2's replacement form — ruling C's "date + pointer to the authoritative GitHub comment" collides with the 2026-08-12 "numbers go" ruling thatcheck-skill-id-lintenforces on the same surface #14859 ruled B at 09:04Z by the director seat, comment 5523304679, 「其他同意」; claimed 09:12Z, claim 5523451958; brief carries ruling B verbatim, the(YYYY-MM-DD 裁定)form at the 44 sites, stage 2 overreferences/**, and the frame verbatim; dev tier fable per the protocol-surface clause; PR will readFixes #14859/Part of #14685). objectui#7463 delivered 09:50Z (report 5523867580;needs_decisionon item 2 only): PR objectui#7490 @2df07b7— items 1 (the bare-anyassertion; 4 rows declared in the shrink-onlyKNOWN_BARE_ANY_EXAMPLES, zero new red) and 3 (SCAN_ROOTS+.claude/skills; 9 candidates, 0 marked) delivered; NOT GOVERNED by the seat's own guard run over all 3 paths (09:53Z); the seat probed the exportedfindBareAnyon ten shapes in a compare worktree (09:57Z) and matched the port line for line against objectstack's position table:885-894; ACCEPT 5523967476 at 10:03Z; first line changed toPart of #7463by the dev at the seat's request (item 2 stays open); all 29 checks green by 10:01:25Z; ready flip + auto-mergeSQUASHat 10:07Z, read backdraft: falseat 10:08Z (read-back comment 5524077227); MERGEDac8d523(queue commit 10:07:42Z, landed 10:21:54Z; the 10:48Z5c09fd5reading corrected at 10:57Z); QA run · api-backend (FULL area) · a86db175 · 2026-08-10 · 6 PASS / 2 PARTIAL / 3 FAIL #7463 back topm:queuewith the assignee cleared, pointing at [Decision] Skills optimization program — batch 5 (2 items): objectuicheck-skill-examples.mjs— where the root-devDependency resolution bound lives (objectui#7463 item 2), and whether the marked-fence population becomes shrink-only (objectui#7359 step 3) #14909 item 1, and updateViewConfig stores "per-view personal config" as ONE org-wide metadata item — sort/hiddenFields/columnState/rowHeight written by any user apply to every user of the view #7494pm:queue— both written 10:47Z. Routed: item 2's fork → decision [Decision] Skills optimization program — batch 5 (2 items): objectuicheck-skill-examples.mjs— where the root-devDependency resolution bound lives (objectui#7463 item 2), and whether the marked-fence population becomes shrink-only (objectui#7359 step 3) #14909 (batch 5, item 1); the dev's open question 2 → objectui#7494 (the threetesting.mdrows;domain:skillsp3,pm:queueat the merge) + objectui#7493 (ComponentInput.defaultValue?: any, bare); the seat's own probe finding → [finding]check-skill-examples.tsdescribeAnyPositionlabels an index signature'sanyasreturn type(isFunctionLikematchesIndexSignatureDeclaration) and flags a function type's returnanyeven inside a type argument — the objectui port (PR objectui#7490) inherits both #14910 (an index signature'sanylabelledreturn type; the origin's defect, bare); the report's findings 1–2 are [finding][devx] Docs Drift Check is package-granular, so any PR touching @objectstack/spec lists ~112 docs — an advisory that large is one every reader learns to skip #6893 / fix(rest): drop a nav group DECLARED empty, not just one the gate emptied (#7380) #7460 already. Earlier this shift both objectui flights delivered (PR docs(spec): make submitBehavior's TSDoc state the mode-aware default #7473 at the governed terminal; PR[Security] Access deniedcopy — the remaining 38 templates, classified: admin-surface should be RETAINED as developer copy, four end-user sites need their own decision #7475 merged 08:46Z) — both briefs carried the internal-pm decision frame verbatim (the item-4 condition), and both devs argued their forks on it rather than escalating. Delivered earlier: items 3, 4 and 5 (PRs docs(pm-dispatch): collapse CLAUDE.md's four excerpts to rule, hook and anchor #14855, docs(pm-dispatch): keep two copies of the decision frame, not four #14862, tooling(pm): admit a same-PR cross-file line-budget move, and take the first one #14860), all at the terminal above. ⭐ Standing condition from item 4's review: every brief this seat writes carries the internal-pm frame section (.claude/skills/pm-dispatch/SKILL.md, the block from 「每个方案必须沿四条固定评估轴分析」 through 「推荐意见必须基于这四条轴给出理由」 —:886-903at450e73b4e8, located by its anchor sentences because the line numbers move) verbatim, becauseos-dev.mdno longer holds a copy once PR docs(pm-dispatch): keep two copies of the decision frame, not four #14862 lands.:880-897text; both flights are delivered and neither escalated on it; from this round every brief pastes the block read fromorigin/mainin the same minute (09:20Z for the two flights in flight). Item 2 stopped at a fork withneeds_decisionand zero edits (report 5521172695: ruling C's "date + pointer to the authoritative GitHub comment" has no pointer to convert to on those surfaces, its issue-number spelling is red oncheck-skill-id-lint, which encodes the 2026-08-12 "numbers go" ruling, and the maintainer comment it points at frequently does not exist) → decision card [Decision] Skills optimization program — batch 4 (1 item): #14685 item 2's replacement form — ruling C's "date + pointer to the authoritative GitHub comment" collides with the 2026-08-12 "numbers go" ruling thatcheck-skill-id-lintenforces on the same surface #14859 (batch 4, one item, options A1 / A2 / B / C, recommendation B; ruled B 09:04Z, re-dispatched above); classification complete for both named surfaces (54 sites: KEEP 5, frame 4, pointer-eligible 44),references/**unclassified; the r2 flight resets the branch to currentmain. Slots free: 5. Bare for triage at 13:40Z (REST, all four re-read): Census of dispatch templates and skills text for the unexecutable "report before acting" fence form, now that the executability criterion is landed #14768 (since 00:19Z, 13 h 21 min), Migrate the two in-repo hook examples (app-crmOpportunityStageHook, app-todotaskHook) todefineHook()so the platform's own examples match what the published data skill teaches (#14685 item 1, ruled A) #14850 (05:28Z), The internal dispatch runbook has no step that pastes the decision frame into the dev prompt — after #14685 item 4 (PR #14862) the dev definition expects it there and has no copy of its own #14869 (06:31Z), [finding] After ruling B (#14859),AGENTS.md:12-13and thescripts/pm/check-skill-id-lint.mjsheader still describe the pm-dispatch provenance form as "date + verbatim quote" — the two off-surface sentences PR #14911 could not touch #14913 (10:07Z); [finding] Four gate-script comments still say the decision frame has "four" / "two enforced" copies after #14685 item 4 reduced COPIES to two —dispatch-gates.mjs:8090/:8095,check-skill-line-ratchet.mjs:455,check-skills-token-ratchet.mjs:334/:345/:359#14870 gradedpm:blocked07:28Z. [finding]skills/objectstack-ai/SKILL.md:396tells the author to runos validateafter "a model-registry entry" — a recordos validatecannot see, which:332in the same file already says (agents / tools / skills are the only AI stack collections) #14836 at the terminal (PR docs(skills): stop promisingos validatechecks a model-registry entry #14953); the platform-readings intake ([finding] The&page=Ncompleteness walk refuses with HTTP 422 past 9,900 items — the ceiling on the remedy #14068 just landed #14133 / finding(skills): spec@objectui shift-end report 2026-09-02 — two principle gaps (types-face routing vs. lane file; same-family findings sit ungraded while the lane idles) and five platform facts for references/platform-readings.md #14445 / [finding] The in-seat contract-review path was read as "the implementing session reviews its own diff" — PR #14191 was PASSed and label-cleared by its author session, dropping the independence clause and the director seat's never-writes-code charter in one act #14209) and The internal dispatch runbook has no step that pastes the decision frame into the dev prompt — after #14685 item 4 (PR #14862) the dev definition expects it there and has no copy of its own #14869 (runbook paste-step, F5) wait behind PR tooling(pm): admit a same-PR cross-file line-budget move, and take the first one #14860's merge; [finding] Four gate-script comments still say the decision frame has "four" / "two enforced" copies after #14685 item 4 reduced COPIES to two —dispatch-gates.mjs:8090/:8095,check-skill-line-ratchet.mjs:455,check-skills-token-ratchet.mjs:334/:345/:359#14870 (six stale frame-copy comments, F1–F4) waits behind PR tooling(pm): admit a same-PR cross-file line-budget move, and take the first one #14860 (PR fix(pm): refuse--tieragainst--commands/--jsoninstead of silently preferring the tier #14765 landed).objectName/viewTypeListView spelling in one stroke — the published skill teaches it and three showcase pages repeat it #14343 →pm:blocked(comment 5519011595): spec twin [finding] The #11284 convergence shipped only its producer half: the react-blocks contract deprecatesobjectName/viewTypeon ListView in favour ofdata={{ provider: 'object', object }}/type, and the lint blesses that spelling — but objectui's ListView reads neither, so the canonical spelling validates green and renders an empty list #14791 (bare; fork A retract-at-source / B land objectui#2890 step 6 first);Blocked-by: #14791.skills/objectstack-ai/SKILL.md:396tells the author to runos validateafter "a model-registry entry" — a recordos validatecannot see, which:332in the same file already says (agents / tools / skills are the only AI stack collections) #14836 (documentation· p3 ·domain:skills, graded 05:12Z, terminal scope = two deletions at:396/:404; held serial behind PR docs(skills): the AI domain has no CEL site — correct the os validate clause in objectstack-ai #14819, dispatched 12:14Z at its merge, PR docs(skills): stop promisingos validatechecks a model-registry entry #14953 at the terminal 12:34Z) · [finding] The&page=Ncompleteness walk refuses with HTTP 422 past 9,900 items — the ceiling on the remedy #14068 just landed #14133 · finding(skills): spec@objectui shift-end report 2026-09-02 — two principle gaps (types-face routing vs. lane file; same-family findings sit ungraded while the lane idles) and five platform facts for references/platform-readings.md #14445 · [finding] The in-seat contract-review path was read as "the implementing session reviews its own diff" — PR #14191 was PASSed and label-cleared by its author session, dropping the independence clause and the director seat's never-writes-code charter in one act #14209 (theplatform-readings.mdintake — dispatched once item 5 is onmain; seat notes on each) · Census of dispatch templates and skills text for the unexecutable "report before acting" fence form, now that the executability criterion is landed #14768 (census; still bare at 05:25Z) · [finding]KnowledgeSourceSchema.cronis documented as a 5-field cron expression but typedz.string()— the spec's ownCronExpressionInputSchemais not used, so'not a cron'parses green #14825 → gradedbug· p3 ·pm:queue·domain:spec·needs:contract-review(spec lane's) · Migrate the two in-repo hook examples (app-crmOpportunityStageHook, app-todotaskHook) todefineHook()so the platform's own examples match what the published data skill teaches (#14685 item 1, ruled A) #14850 (05:28Z: item-1 migration ofopportunity.hook.ts:9/task.hook.ts:50todefineHook(); examples, still bare at 06:13Z) · [Decision] Skills optimization program — batch 4 (1 item): #14685 item 2's replacement form — ruling C's "date + pointer to the authoritative GitHub comment" collides with the 2026-08-12 "numbers go" ruling thatcheck-skill-id-lintenforces on the same surface #14859 (05:54Z: decision batch 4; ruled B 09:04Z, claimed and in flight) · [Decision] Skills optimization program — batch 5 (2 items): objectuicheck-skill-examples.mjs— where the root-devDependency resolution bound lives (objectui#7463 item 2), and whether the marked-fence population becomes shrink-only (objectui#7359 step 3) #14909 (10:01Z: decision batch 5, two items — objectui#7463 item 2's bound home, recommendation A; objectui#7359 step 3, a shrink-only floor on the marked population, recommendation A;needs-user-decision, no ruling at 13:40Z — zero comments) · The internal dispatch runbook has no step that pastes the decision frame into the dev prompt — after #14685 item 4 (PR #14862) the dev definition expects it there and has no copy of its own #14869 (06:31Z:dispatch-runbook.md派发词构造细则 gains the paste-the-frame step; 280/280, pays via PR tooling(pm): admit a same-PR cross-file line-budget move, and take the first one #14860's rule; bare) · [finding] Four gate-script comments still say the decision frame has "four" / "two enforced" copies after #14685 item 4 reduced COPIES to two —dispatch-gates.mjs:8090/:8095,check-skill-line-ratchet.mjs:455,check-skills-token-ratchet.mjs:334/:345/:359#14870 (06:31Z:dispatch-gates.mjs:8090/:8095,check-skill-line-ratchet.mjs:455,check-skills-token-ratchet.mjs:334/:345/:359stale "four / two enforced copies" comments; XS, comment-only; bare). Bare at 08:26Z (REST): [Decision] Skills optimization program — batch 4 (1 item): #14685 item 2's replacement form — ruling C's "date + pointer to the authoritative GitHub comment" collides with the 2026-08-12 "numbers go" ruling thatcheck-skill-id-lintenforces on the same surface #14859 (needs-user-decision, no ruling), objectui QA run · api-backend (FULL area) · a86db175 · 2026-08-10 · 6 PASS / 2 PARTIAL / 3 FAIL #7463; Census of dispatch templates and skills text for the unexecutable "report before acting" fence form, now that the executability criterion is landed #14768 / Migrate the two in-repo hook examples (app-crmOpportunityStageHook, app-todotaskHook) todefineHook()so the platform's own examples match what the published data skill teaches (#14685 item 1, ruled A) #14850 / The internal dispatch runbook has no step that pastes the decision frame into the dev prompt — after #14685 item 4 (PR #14862) the dev definition expects it there and has no copy of its own #14869 / [finding] Four gate-script comments still say the decision frame has "four" / "two enforced" copies after #14685 item 4 reduced COPIES to two —dispatch-gates.mjs:8090/:8095,check-skill-line-ratchet.mjs:455,check-skills-token-ratchet.mjs:334/:345/:359#14870 last read bare at 07:39Z. Graded away from this lane:os explain flow's example teaches$currentUseras an assignment value, a spelling nothing resolves #14782 →domain:clip3, dispatched by the cli seat (PR fix(cli): makeos explain flowteach a flow that actually parses #14809); [finding] The #11284 convergence shipped only its producer half: the react-blocks contract deprecatesobjectName/viewTypeon ListView in favour ofdata={{ provider: 'object', object }}/type, and the lint blesses that spelling — but objectui's ListView reads neither, so the canonical spelling validates green and renders an empty list #14791 →bug· p2 ·needs-user-decision·domain:spec(skills(ui) + examples: retire the deprecatedobjectName/viewTypeListView spelling in one stroke — the published skill teaches it and three showcase pages repeat it #14343 stayspm:blockedon it).test/run-dev-unbuilt-workspace.e2e.test.ts› "gives up and exits instead of waiting forever" (:418,expected 'SIGKILL' to be null) onTest Core (1/6). Fix PR test(cli): make the unread-reader ceiling a load-independent constant at RUN_TIMEOUT_MS #14715 merged 02:22Z asaccb9231c7(cap =RUN_TIMEOUT_MS180 s); anchor Queue-flake anchor: test/run-dev-unbuilt-workspace.e2e.test.ts #14648 closed 03:52:25Z by the cli seat with a pre-stated falsifier. Post-fixmerge_groupbuilds kept ejecting on the same case with the NEW assertion text — the seat read five failed-job logs raw (33712928455 · 33712974515 · 33712975540 · 33712976158 · 33713928872: child alive at 180 0xx ms, case 1 measured 5.9–8.1 s on the same runner minutes earlier; 7 of 9 completed post-fix builds failed by 04:27Z) and recorded them on Queue-flake anchor: test/run-dev-unbuilt-workspace.e2e.test.ts #14648 (5520320723, 5520385642); the devx and spec seats recorded the same. The closed-read-end case in run-dev-unbuilt-workspace.e2e.test.ts still uses a fixed wall-clock bound as its oracle #14716 (the closed-read-end case) is not the failing case. The maintainer stated at 04:3xZ that Queue-flake anchor: test/run-dev-unbuilt-workspace.e2e.test.ts #14648 is resolved; the seat could not confirm it at 04:31Z (main unchanged, card closed, no PR on the file) and left the reopen to the cli seat / maintainer. Six governed drafts (docs(skills): repair five semantic minors in the axis-weighting and batch-presentation encoding #14779, docs(agents): a released-package bug fix takes a patch changeset, never none #14789, skills(data): drop the two bare ADR-0010 citations from the objectstack-data skill #14777, fix(skills): teach {current_user_id}, not $currentUser, in the objectstack-ui Filtering example #14781, docs(skills): admit hand-authored reference files underreferences/in the catalog anatomy #14786, docs(skills): settle two false claims in skills/README.md and add three cross-skill routing bullets #14795) landed through the queue tonight once the approver flipped them.Part of #; at merge the card goespm:dispatched→pm:queue; a second round starts only after the first is merged; a devneeds_decision⇒ decision card +pm:blocked— when the fork is another lane's contract, the seat files the twin finding bare and blocks on it (skills(ui) + examples: retire the deprecatedobjectName/viewTypeListView spelling in one stroke — the published skill teaches it and three showcase pages repeat it #14343 / [finding] The #11284 convergence shipped only its producer half: the react-blocks contract deprecatesobjectName/viewTypeon ListView in favour ofdata={{ provider: 'object', object }}/type, and the lint blesses that spelling — but objectui's ListView reads neither, so the canonical spelling validates green and renders an empty list #14791); a deferred item resolved by a ruling closes the card with a comment; a catalog-wide deferred item gets its own card ([finding] Catalog anatomy drift: hand-authored per-topic files live underreferences/(reserved for generated pointers) in objectstack-platform and objectstack-data, unlinked or linked only by path — PLAT-G-02 / thedata-hooks.mdshape, catalog-wide #14655); a ruled ceiling raise is not taken when the same PR pays by deletion (docs(pm-dispatch): rule how clause ② is graded — provisional claim, mechanical floor, judged conformance #14696); a decision card closes once its ruling is recorded on every member card and the post-ruling step it names is taken ([Decision] Skills optimization program — batch 1 (4 items): new-file ceilings for splits · planned-eval stubs · react-blocks double rendering · published pm-dispatch scope #14296); a merge that lands before the seat's ACCEPT still gets the review on record; a non-programme correction card is judged by its own budget rule (pm-dispatch: the PM-side self-discipline class recurs because its remediations are RULES — #11901 chose construct-removal instead and held; four rule-shaped fixes failed again today #12911); the seat grades and dispatches its own programme's follow-up cards in objectui when triage is vacant (finding:ListRunsRequestSchema.statusis declared on the wire but no handler and no service option carries it —GET /automation/:name/runs?status=failedsilently lists every run #7359); a stale-open card whose ruled deliverable was dissolved by a later merge is closed by the seat with the evidence ([Decision] AGENTS.md is at its line ceiling with ZERO headroom, so any honest repair of the published spellings mirror crosses it — how should the 8 lines be paid? #11910); a non-governed PR is flipped ready + auto-merge (explicitmergeMethod: SQUASH) after the in-seat ACCEPT and every check green — a direct-merge attempt answering 405 "in the merge queue" is the proof of enqueue; a changeset check that evaluated before theskip-changesetwrite gets the PR's single re-run once the label is present (docs(scripts): make check-agent-model-declared's header the stated home of the model-resolution order #14689, skills(data): drop the two bare ADR-0010 citations from the objectstack-data skill #14777, docs(agents): guard history dating against a shallow clone #14808); draft/ready toggles and auto-merge go through GraphQL and stall first under the shared identity's rate limit; a dev's out-of-scope finding is filed by the seat only after a validated dedup ([finding]selfTest()inscripts/pm/dispatch-gates.mjsbinds fixture values torelativeandresolve, shadowingnode:pathfor the whole function — a later case calling either dies at run time, invisible tonode --check#14688, [finding]AGENTS.md:1154post-task checklist tells the author to "UpdateCHANGELOG.md" by hand — butCHANGELOG.mdis generated from changesets at release and ships inside the npm package #14792, [finding] In the agent containers' shallow checkout,git log -Sreports the horizon commit as the introduction of far older text — exit 0, plausible sha, plausible date, no warning — and the os-dev contract carries no guard for dating history #14793, [finding]skills/objectstack-ai/SKILL.md:405-406calls a model-registrypromptTemplate.system/.user"a CEL predicate" — those keys are thetemplatedialect ({{var}}), and the AI domain has no CEL site at all #14797, [finding]KnowledgeSourceSchema.cronis documented as a 5-field cron expression but typedz.string()— the spec's ownCronExpressionInputSchemais not used, so'not a cron'parses green #14825), and dropped when an open card already carries it; an objectui brief names the absolute path of objectstack'sscripts/pm/os-verify-lock.sh; two PRs may hold one hot file when their hunks are disjoint (docs(skills): repair five semantic minors in the axis-weighting and batch-presentation encoding #14779 / docs(pm-dispatch): timestamped readings are the first construct-shaped fix; record the remediation-shape ranking beside it #14784; docs(skills): admit hand-authored reference files underreferences/in the catalog anatomy #14786 / docs(skills): settle two false claims in skills/README.md and add three cross-skill routing bullets #14795; docs(agents): a released-package bug fix takes a patch changeset, never none #14789 / docs(agents): stop telling authors to hand-edit generated CHANGELOG.md #14802; docs(skills): repair five semantic minors in the axis-weighting and batch-presentation encoding #14779 / docs(agents): guard history dating against a shallow clone #14808); an authorized approver's ready flip on a governed PR is theirs (objectui#7416, docs(pm-dispatch): timestamped readings are the first construct-shaped fix; record the remediation-shape ranking beside it #14784); aPart ofcard whose remaining item sits on a decision card goes back topm:queuewith the pointer (Skills optimization flight — skills/objectstack-data: RESTRUCTURE (≈ −10,150 tok, −22%) — hooks taught twice across two files, generic-JS patterns, 3.3% example gate coverage,sharingModelused by 31/31 objects and explained nowhere #14297); a ruled card's fenced-off follow-up is filed by the seat the moment the precondition lands, bare (Census of dispatch templates and skills text for the unexecutable "report before acting" fence form, now that the executability criterion is landed #14768); a merge patrol is agit log --grep '(#<pr>)'run in the same minute as its line — never a carried-forward reading (the skills(api): delete the planned-eval stub and drop its ceiling row (#14296 item 2) #14564 miss and the 02:32Z non-patrol); a card's premise the seat's own filing got wrong is corrected in the claim comment at dispatch ([finding] Catalog anatomy drift: hand-authored per-topic files live underreferences/(reserved for generated pointers) in objectstack-platform and objectstack-data, unlinked or linked only by path — PLAT-G-02 / thedata-hooks.mdshape, catalog-wide #14655, skills(ui) + examples: retire the deprecatedobjectName/viewTypeListView spelling in one stroke — the published skill teaches it and three showcase pages repeat it #14343) or in the ACCEPT (skills/README.md truth + routing sweep:OLD/NEW"evaluate tonullsince M9.5" is anchored nowhere and contradicts the formula skill; "AI tool params" is not a CEL site; the cross-skill routing list lacks the upgrade-vs-platform and objectui inbound decision points #14794); a report's self-count of its MCP calls is not a witness that a card comment exists ([finding] Five semantic minors in the axis-weighting/batch-presentation encoding — caught by the at-tier review the frame-sync gate structurally cannot perform #14146); clause ② PASS strips the label on whichever carriers hold it (skills/objectstack-ui teaches$currentUseras a filter value, contradicting its own "only two tokens resolve in a filter" contract #14139, [finding]skills/objectstack-ai/SKILL.md:405-406calls a model-registrypromptTemplate.system/.user"a CEL predicate" — those keys are thetemplatedialect ({{var}}), and the AI domain has no CEL site at all #14797); a rename to a contract's canonical spelling is a contract claim, settled at source before any edit (skills(ui) + examples: retire the deprecatedobjectName/viewTypeListView spelling in one stroke — the published skill teaches it and three showcase pages repeat it #14343); two cards on one list land as one PR with bothFixeslines (skills/README.md truth + routing sweep:OLD/NEW"evaluate tonullsince M9.5" is anchored nowhere and contradicts the formula skill; "AI tool params" is not a CEL site; the cross-skill routing list lacks the upgrade-vs-platform and objectui inbound decision points #14794 + [finding] Nothing routes an agent authoring object/field/view labels toobjectstack-i18n— the cross-skill routing list inskills/README.mdhas no labels-vs-bundles decision point #14566); a harvested ledger item is re-measured at currentmainbefore it becomes a card; a new gate's own first CI run on its PR is part of the ACCEPT evidence (Sweep the remaining "no runtime consumer" ledger notes that predate the previews-count-as-consumers ruling — datasource_note, permissionrowLevelSecurity.label, plus a mechanical pass #7427); a triage-graded card in the lane's domain is dispatched at the next check-in without waiting for a programme slot ([finding]AGENTS.md:1154post-task checklist tells the author to "UpdateCHANGELOG.md" by hand — butCHANGELOG.mdis generated from changesets at release and ships inside the npm package #14792, [finding] In the agent containers' shallow checkout,git log -Sreports the horizon commit as the introduction of far older text — exit 0, plausible sha, plausible date, no warning — and the os-dev contract carries no guard for dating history #14793, [finding]skills/objectstack-ai/SKILL.md:405-406calls a model-registrypromptTemplate.system/.user"a CEL predicate" — those keys are thetemplatedialect ({{var}}), and the AI domain has no CEL site at all #14797); a maintainer question about fleet health is answered from primary sources with the reading recorded on the relevant anchor (Queue-flake anchor: test/run-dev-unbuilt-workspace.e2e.test.ts #14648); a same-file payment is a strict restatement whose omission fails loudly, argued against the rejected candidates ([finding] In the agent containers' shallow checkout,git log -Sreports the horizon commit as the introduction of far older text — exit 0, plausible sha, plausible date, no warning — and the os-dev contract carries no guard for dating history #14793); a dev may refuse half of a ruled scope when that half would write a new false claim, and says so in the PR body ([finding]skills/objectstack-ai/SKILL.md:405-406calls a model-registrypromptTemplate.system/.user"a CEL predicate" — those keys are thetemplatedialect ({{var}}), and the AI domain has no CEL site at all #14797's cron)..claude/agents/os-dev.mdrule 1 lists the verify lock's four guarantees and no non-guarantee, one line above a wall-clock absolute — every dev agent reads exclusivity the brief never promised #12800) · docs(pm): encode the 2026-08-31 director rulings — ruling-record carrier, and cross-fire round continuation #14230 (→ [Decision] Is a maintainer ruling "recorded" when it exists only as a comment on a single card? — its durability is currently bounded by whoever happened to file that card #13766) · skills(pm): land the ruled REST-channel prescriptions and closed-inclusive dedup (ceiling 87 → 93) #14236 (→ [finding] The REST issues-listLink: rel="next"cursor silently returns 102 of 287 open issues — the dedup channelreferences/rest-channel.mdprescribes #13900) · fix(pm-dispatch): give the decision-facets marker a sanitizer-safe spelling #14264 (→ [finding] Theos-decision-facetsanchor is prescribed ONLY as an HTML comment, which this channel strips — every decision card written through MCP loses its machine-findable marker, silently #14237).data-hooks.mdlacksctx.session.positions—hook.zod.ts:674callssession.positions.includes(…)the anti-pattern, so this needs a source read first · thedriverid vocabulary row · automationSKILL.md:351-354and dataSKILL.md:747-749stdlib restatements beside their formula pointers — held for the programme closeout re-lock pass ·skills/objectstack-ui/references/react-blocks.mdis a generated file underreferences/that neither anatomy clause names — dedup against Seam (spec lane, ruled):gen:react-blocksstops emittingskills/objectstack-ui/contracts/react-blocks.contract.json— the markdown rendering becomes the single AI-facing output (#14296 item 3 = A) #14559 ·react-blocks.ts:167prescribes the deprecated ListView spelling — decided by [finding] The #11284 convergence shipped only its producer half: the react-blocks contract deprecatesobjectName/viewTypeon ListView in favour ofdata={{ provider: 'object', object }}/type, and the lint blesses that spelling — but objectui's ListView reads neither, so the canonical spelling validates green and renders an empty list #14791's fork ·skills/README.md:114overlaps the new objectui routing bullet ·skills/objectstack-ai/SKILL.md:396vs:332→ filed as [finding]skills/objectstack-ai/SKILL.md:396tells the author to runos validateafter "a model-registry entry" — a recordos validatecannot see, which:332in the same file already says (agents / tools / skills are the only AI stack collections) #14836 (04:41Z) · from the [Decision] Skills optimization program — batch 3 (5 items): DATA-F-07defineHook()vs the platform's own examples · #13597 Phase-2 — X0 quote policy ·CLAUDE.mdexcerpt form · the four-copy decision frame · cross-file line-budget moves #14685 flights: objectui'sCLAUDE.md(51 lines) carries the same hand-copied-excerpt shape item 3 collapsed → measured at2d3fe73and filed as objectui#7506 (13:44Z, dedup clean, seat-graded; governed; decision batch 6 candidate — the seat does not extend ruling 3B on its own) · objectuiAGENTS.md:234namesguard-main-checkout.shonly while.claude/settings.json:36also wiresguard-main-checkout-bash.sh— observed 13:42Z, not deduped, not carded · the same maintainer quote written out two or three times (SKILL.md:928/:929vslanes/director.md:8/:54;SKILL.md:645vsos-dev.md:320;SKILL.md:904/os-dev.md:418/decision-analysis.md:50) — waits for [Decision] Skills optimization program — batch 4 (1 item): #14685 item 2's replacement form — ruling C's "date + pointer to the authoritative GitHub comment" collides with the 2026-08-12 "numbers go" ruling thatcheck-skill-id-lintenforces on the same surface #14859, PR docs(pm-dispatch): keep two copies of the decision frame, not four #14862 removes theos-dev.md:418copy ·check-ratchet-remedy-authoritysweepsscripts/*.{mjs,mts}non-recursively, so everyscripts/pm/**gate is outside thecheck:engine-double-contractfires at CI time, not authoring time — four independent PRs tripped it on brand-new test files in one shift, and a pre-warning in the brief did not prevent it #8435 convention — a maintainer coverage question (batch 5 candidate) · three ceiling rows carry headroom for the re-lock pin PR:AGENTS.md1157/1162,spec-property-retirement/SKILL.md333/337 and its row pin 326/328 · F5 → The internal dispatch runbook has no step that pastes the decision frame into the dev prompt — after #14685 item 4 (PR #14862) the dev definition expects it there and has no copy of its own #14869, F1–F4 → [finding] Four gate-script comments still say the decision frame has "four" / "two enforced" copies after #14685 item 4 reduced COPIES to two —dispatch-gates.mjs:8090/:8095,check-skill-line-ratchet.mjs:455,check-skills-token-ratchet.mjs:334/:345/:359#14870 (filed 06:31Z after clean dedups) · platform notes from the flights: the zero-quota issue-page payload serves only the first 15 timeline items (frontTimelineItems 15 of 32, backTimelineItems empty) — a comment read-back on a long card must go through MCPget_commentswith paging; the PR page carries no label payload; a brace placeholder inside a fenced code block was eaten by the sanitizer while the same text in prose survived;issue_read get_labelsis issue-only (a PR number answers "Could not resolve to an Issue") · objectui Sweep the remaining "no runtime consumer" ledger notes that predate the previews-count-as-consumers ruling — datasource_note, permissionrowLevelSecurity.label, plus a mechanical pass #7427 follow-ups: the shrink-only decision on the marked population, the bare-anyassertion port, bounding root-devDependency resolution, widening to.claude/skills/**, 17jsonfences that are reallyjsonc, two pre-existing pin suites failing on a BUILT tree that CI's unbuilt shards never see · the eval-token oracle (objectui#7359 comment 5514262423) is its own gate, to file after Sweep the remaining "no runtime consumer" ledger notes that predate the previews-count-as-consumers ruling — datasource_note, permissionrowLevelSecurity.label, plus a mechanical pass #7427 lands ·.claude/agents/os-dev.mdcarries seven degenerate single-token wrap lines — a standalone density-repair candidate under the 2026-08-29 ruling ·check:doc-formula-expressionsderives for every.claude/**card and needs three package builds first · no package carries the pre-ADR-0019ApprovalProcess.createre-home table after AUTO-D-03 · FRM-D-06 · OUI-C-05 ·check-skill-examples.tsSURFACES cannot see@objectstack/core·check:pm-skill-id-lintbinds nothing in the four small internal skills ·os i18n extract/checkwalk none of i18n: three authored display surfaces have no bundle key at all (bulk-action defs, custom validation messages, dataset labels) #14253's three families (i18n-extract scaffolds none of the three key families #14253 adds, socheck:i18n-coverageis blind to them #14376) · internal SKILL.md 「条款②入队闸门」 calls a wrongno「假申报」 — a Phase-2 rider · the os-dev clause's closedskip-changesetlist omitsskills/**(open [finding] The os-dev contract statesskip-changesetas BOTH a closed path list and a publication test — asrc/file that never reachesdistsatisfies one and violates the other #13432) ·AGENTS.mdstatesOS_SKIP_DTStwo ways (:595-597vs:1153) ·AGENTS.md:1154's survivingROADMAP.mdhalf — the "delete item 6 outright" argument is in PR docs(agents): stop telling authors to hand-edit generated CHANGELOG.md #14802's body ·spec-property-retirement/SKILL.mdrow pin lowerable 328 → 326 · program closeout: the ratchet script's empty "remaining skills' eval notes" header,content/docs/ai/skills.mdx:78/:230placeholder sentences, and the ceiling re-locks once after the flights (formula 6,002 → 5,158, i18n 6,338 → 4,685, upgrade 8,333 → 7,199, ai 6,806 → 5,475, automation 12,768 → 12,269, query files, api 6,319 → 4,635, data 10,009 → 9,996, uilist-views.md3,011 → 3,010, pm-dispatch entry 9,708 → 9,702, spec-property-retirement 337 → 333, dogfood 157 → 147, checklist-author 62 → 53, checklist-test 238 → 234 among them) · objectui ObjectQL.delete's single-id cascade is not transactional — a refusal mid-cascade leaves earlier children deleted while the response says the delete failed #7413 (dev-filed,domain:devx) · dispatch-gates:--tier --residuesilently drops--residue— the neighbouring silent-flag-drop that #14294's repair does not reach #14753 (dev-filed) · objectuisection/boxabsent from ADR-0080PUBLIC_BLOCKSTier B — on open finding: check-agent-model-declared's header describes model resolution as three steps and omits CLAUDE_CODE_SUBAGENT_MODEL, which outranks all three #6879 · [Decision] Skills optimization program — batch 1 (4 items): new-file ceilings for splits · planned-eval stubs · react-blocks double rendering · published pm-dispatch scope #14296 item 2 option C recorded on Skills catalog optimization program (maintainer-directed): audit every skill on both roots, then optimize — program anchor #14292, not opened · platform notes:issue_read get_labels/list_issues/search_issues(GraphQL-backed) answer "rate limit exceeded" whileissue_read get/list_pull_requests(REST) succeed — read labels through the REST forms when the shared identity is throttled;api.github.com/rate_limitanswering "15,000 remaining" while the MCP path is exhausted is a decoy; the zero-quota page channel can lag a comment by seconds; the verify lock's slot is theOS_VERIFY_LOCK_SLOTenvironment variable; GitHub's sanitizer eats angle-bracket fragments in comments and PR bodies; acheck:*batch queued under the lock can hit the 10-minute foreground cap (exit 143); every container's checkout is shallow by default and a--unshallowdoes not travel between containers —git log -Sdating needs the guard [finding] In the agent containers' shallow checkout,git log -Sreports the horizon commit as the introduction of far older text — exit 0, plausible sha, plausible date, no warning — and the os-dev contract carries no guard for dating history #14793 lands; a two-refgit fetchleavesFETCH_HEADon the FIRST ref; the shared checkout'sgit fetch origin mainreturned a head about two hours stale between 09:10Z and 10:46Z (07:48Z while 08:53Z was onmain) — a patrol reading cross-checks the API'slist_commitshead in the same minute, andls-remote origin mainalso matcheschangeset-release/main, so ask forrefs/heads/main; theactions_list/get_job_logsMCP results overflow into files — parse with python; the harnessCo-Authored-Bytrailer is the accepted attribution (answer A on [finding] The os-devskip-changesetclause states a CLOSED surface list that omits repo-root tooling config — the criterion beside it, and the repo's own merged precedent on the SAME file, both cover it #13680) and briefs say "no model identifiers in the commit message body or the PR body". Out-of-scope cards filed by devs: objectstack [finding] The published skill reference index labelsdata/query.zod.ts— the whole QueryAST — "Sort Node", because its first JSDoc block isSortNode's #14441 · declared ≠ enforced (ADR-0049):RealtimeEventTypespellsrecord.*while the runtime emitsdata.record.*, andSubscriptionSchema.filtersisz.unknown()nothing reads #14446 · [finding]skills/objectstack-aitells authorsmetadata_assistantis "not vocabulary" while the platform's own Studio app pinsdefaultAgent: 'metadata_assistant'#14461 · [finding] Theobjectstack-aigenerated reference index advertises 6 schemas the SKILL.md never teaches and omits the one it names —SKILL_MAPinbuild-skill-references.tsis unreconciled with the body #14462 · [finding] Theobjectstack-automationreference index routes to the ADR-0020-retiredstate-machine.zod.tsand omits both per-nodeconfigschemas —SKILL_MAPinbuild-skill-references.ts#14466 · [finding]MCPServerPlugin's own docblock still teaches the deprecated stdio trigger —plugin.ts:112-122disagrees withplugin.ts:234-239twelve lines below it #14473 · [finding] Theobjectstack-formulareference index advertisesdata/date-macros.zod.ts, a surface the SKILL.md routes to objectstack-query —SKILL_MAPinbuild-skill-references.tsmaps it to both #14562 · [finding] Theobjectstack-i18nreference index routes 5 of its 7 transitive pointers at schemas unreachable from a translation bundle — the closure step inbuild-skill-references.ts#14565 · [finding] Nothing routes an agent authoring object/field/view labels toobjectstack-i18n— the cross-skill routing list inskills/README.mdhas no labels-vs-bundles decision point #14566 · [finding] SWEEP.md step 6 sends every sweep agent to land a run record underruns/, which is.gitignored with*— the instruction cannot be obeyed #14595 · [finding].claude/launch.jsonships apr3505-attach-3477config pointing at a worktree that does not exist — a checked-in launch entry outlives the tree it names #14596 · [finding] The one-value-site promise for CONTRACT_REVIEW_TIER (SKILL.md 「模型升级只改一行一个文件」) is held only by a manual grep — no self-test pins it, so the next model refresh can re-open the drift silently #14616 · finding: the role-word baseline is keyed by file path, so a pure file SPLIT trips the maintainer-only--updateeven when the occurrence count is unchanged #14659 · dispatch-gates:--tier --residuesilently drops--residue— the neighbouring silent-flag-drop that #14294's repair does not reach #14753 ·os explain flow's example teaches$currentUseras an assignment value, a spelling nothing resolves #14782; objectui Adopt PR #7328 (objectui#3569 showcase datetime fixture): one push + merge — everything else is done and verified #7358 · finding:ListRunsRequestSchema.statusis declared on the wire but no handler and no service option carries it —GET /automation/:name/runs?status=failedsilently lists every run #7359 · finding: a repeated?paradigm=/?source=/?category=/?type=on the automation descriptor routes silently empties the designer palette (200, zero rows) #7360 · fix(metadata-core): derive the ADR-0106 D4 read exemption from the #6603 write gate (#7020) #7361 ·/dataharness: thesuccessexit is still a stand-in, so a success-envelope regression cannot go red there either #7362 · fix(spec): discriminate FieldSchema.defaultValue (literal / runtime token / CEL envelope) and validate each shape on its own terms #7403 ·SharingRuleSchemais.strict()but declares no ADR-0010 protection envelope, while the metadata read path stamps_packageIdonto stored bodies type-blind #7404 · docs(spec,objectql,driver-sql): declare the unanchored autonumber readback boundary (#7287) #7405 · Rewrite the family-4 record in filter-logic-conformance.ts: the 2026-08-10 exclude ruling was withdrawn — include re-affirmed #7406 · ObjectQL.delete's single-id cascade is not transactional — a refusal mid-cascade leaves earlier children deleted while the response says the delete failed #7413; by the seat: Seam (spec lane, ruled):gen:react-blocksstops emittingskills/objectstack-ui/contracts/react-blocks.contract.json— the markdown rendering becomes the single AI-facing output (#14296 item 3 = A) #14559 (spec seam, open) · [Decision] Skills optimization program — batch 2 (1 item): does #14296 item 1's "≥10% off the package in the same PR" bind the split PR arithmetically, or is it the anti-growth guard? (ui split measured at −0.16%) #14568 (closed) · [finding] AGENTS.md says "Pure bug fixes do not require a changeset" — a pure bug-fix PR in a released package following it literally has no green path throughCheck Changeset#14647 (closed) · [finding] Catalog anatomy drift: hand-authored per-topic files live underreferences/(reserved for generated pointers) in objectstack-platform and objectstack-data, unlinked or linked only by path — PLAT-G-02 / thedata-hooks.mdshape, catalog-wide #14655 · [Decision] Skills optimization program — batch 3 (5 items): DATA-F-07defineHook()vs the platform's own examples · #13597 Phase-2 — X0 quote policy ·CLAUDE.mdexcerpt form · the four-copy decision frame · cross-file line-budget moves #14685 · [finding]selfTest()inscripts/pm/dispatch-gates.mjsbinds fixture values torelativeandresolve, shadowingnode:pathfor the whole function — a later case calling either dies at run time, invisible tonode --check#14688 · Census of dispatch templates and skills text for the unexecutable "report before acting" fence form, now that the executability criterion is landed #14768 · [finding] The #11284 convergence shipped only its producer half: the react-blocks contract deprecatesobjectName/viewTypeon ListView in favour ofdata={{ provider: 'object', object }}/type, and the lint blesses that spelling — but objectui's ListView reads neither, so the canonical spelling validates green and renders an empty list #14791 · [finding]AGENTS.md:1154post-task checklist tells the author to "UpdateCHANGELOG.md" by hand — butCHANGELOG.mdis generated from changesets at release and ships inside the npm package #14792 · [finding] In the agent containers' shallow checkout,git log -Sreports the horizon commit as the introduction of far older text — exit 0, plausible sha, plausible date, no warning — and the os-dev contract carries no guard for dating history #14793 · skills/README.md truth + routing sweep:OLD/NEW"evaluate tonullsince M9.5" is anchored nowhere and contradicts the formula skill; "AI tool params" is not a CEL site; the cross-skill routing list lacks the upgrade-vs-platform and objectui inbound decision points #14794 · [finding]skills/objectstack-ai/SKILL.md:405-406calls a model-registrypromptTemplate.system/.user"a CEL predicate" — those keys are thetemplatedialect ({{var}}), and the AI domain has no CEL site at all #14797 · [finding]KnowledgeSourceSchema.cronis documented as a 5-field cron expression but typedz.string()— the spec's ownCronExpressionInputSchemais not used, so'not a cron'parses green #14825 · [finding]skills/objectstack-ai/SKILL.md:396tells the author to runos validateafter "a model-registry entry" — a recordos validatecannot see, which:332in the same file already says (agents / tools / skills are the only AI stack collections) #14836 · Migrate the two in-repo hook examples (app-crmOpportunityStageHook, app-todotaskHook) todefineHook()so the platform's own examples match what the published data skill teaches (#14685 item 1, ruled A) #14850 · [Decision] Skills optimization program — batch 4 (1 item): #14685 item 2's replacement form — ruling C's "date + pointer to the authoritative GitHub comment" collides with the 2026-08-12 "numbers go" ruling thatcheck-skill-id-lintenforces on the same surface #14859 · The internal dispatch runbook has no step that pastes the decision frame into the dev prompt — after #14685 item 4 (PR #14862) the dev definition expects it there and has no copy of its own #14869 · [finding] Four gate-script comments still say the decision frame has "four" / "two enforced" copies after #14685 item 4 reduced COPIES to two —dispatch-gates.mjs:8090/:8095,check-skill-line-ratchet.mjs:455,check-skills-token-ratchet.mjs:334/:345/:359#14870 · [Decision] Skills optimization program — batch 5 (2 items): objectuicheck-skill-examples.mjs— where the root-devDependency resolution bound lives (objectui#7463 item 2), and whether the marked-fence population becomes shrink-only (objectui#7359 step 3) #14909 · [finding]check-skill-examples.tsdescribeAnyPositionlabels an index signature'sanyasreturn type(isFunctionLikematchesIndexSignatureDeclaration) and flags a function type's returnanyeven inside a type argument — the objectui port (PR objectui#7490) inherits both #14910 · [finding] After ruling B (#14859),AGENTS.md:12-13and thescripts/pm/check-skill-id-lint.mjsheader still describe the pm-dispatch provenance form as "date + verbatim quote" — the two off-surface sentences PR #14911 could not touch #14913 · objectui#7493 · objectui#7494 · objectui#7497 · objectui#7506.Restart-when: closed #13597unless noted): Make check:generated's "not run here" source-audit list a hard obligation in the os-dev contract — disposition 2 of #13207, routed to the skills lane #13300 [finding] The os-dev contract statesskip-changesetas BOTH a closed path list and a publication test — asrc/file that never reachesdistsatisfies one and violates the other #13432 [finding] 撤回的卡以state_reason: completed关闭 —— 查重时它伪装成「已修复」,已实测差点让一个真实缺口被永久丢弃 #14081 · [finding] MCPsearch_issuesis returning FALSE ZEROS — reproduced on three seats across two repos, and it DEGRADED mid-session, so every dedup that rode on it passed vacuously #13326 [finding] The zero-quota payload channel silently drops the NEWEST timeline items once an issue outgrows the SSR first window — measured 3 of 5 comments, both 2026-08-30 dispatch comments missing #13373 [finding] The zero-quota payload channel renders only the FIRST 15 timeline items and returns an EMPTY tail — so a read-back of a just-posted comment reads byte-identical to sanitizer damage #13385 [finding] An issue body ending in a---rule followed by the attribution footer loses EVERYTHING FROM THE RULE ONWARD on create — 5 measured instances, silently stripping the required footer #13384 [finding] The zero-quota issue-page payload is CDN-CACHED and can be minutes-to-hours stale — cache-busting and no-cache did NOT defeat it, and one seat asserted a half-state about another seat's work on that stale read #13387 Record the agent-created-Routine transport facts in references/platform-readings.md — fired sessions get no GitHub MCP tools, and self-binding trades new-session recoverability for tool availability #13257 [finding] MCPissue_read get_labelsfails on a FRESH PR number whilelist_pull_requestsreturns its labels — misread as "no labels", the mandated RMW fallback strips concurrent bot labels #13141 [finding] MCPissue_read get_labelscannot resolve a PR number ("Could not resolve to an Issue") whilepull_request_read getreturns the same PR's labels — one wasted call per misread #13583 [finding] "The MCP write rate limit" is not GitHub’s quota — GitHub read 14888/15000 core while MCP writes were refused, and GitHub’s reset field predicts nothing about the block #14014 [finding] LIVE:os-elonis no longer assignable on this repo — every seat's claim protocol silently loses its assignee half, mid-session #13561 [Decision] The shared GitHub identity's GraphQL quota is being burned to 2× — MCP writes go through GraphQL, so seats are silently write-blocked while reads keep working #11742 [finding] MCPissue_readsilently truncated an issue body to 20.8% — 1,720 of 2,173 chars dropped with no marker, and REST returns it whole #13573 [finding] The HTML-comment marker loss on the COMMENT surface is a READ-path artifact, not the write-side strip platform-readings records — both channels read on one specimen, bytes present in storage #14265 · Promote H21 (negation-window closing-keyword detection) from report-only patrol row to the blocking PR gate, once the patrol baseline is long enough #10947 (09-04) · [finding] A contract-review PASS leaves ZERO trace on the PR itself — verdict on the card, label cleared, no review object — so a legitimate un-park is indistinguishable from an intruder from the PR side #13417 · skills(ui) + examples: retire the deprecatedobjectName/viewTypeListView spelling in one stroke — the published skill teaches it and three showcase pages repeat it #14343 (Blocked-by: #14791).pm:queue+ an assignee from the prior regime — read as held.MetadataFacadeobject writes now reach the map its reads use (#6725) #7211 / [internal skill] 新增 presales-tender-requirements:售前招标需求说明书编写打法 #6929 / Registry heal restores the metadata-map view but never re-registers a packaged contributor definition an overlay save replaced #6853 closed not-planned; [finding] 分片读取器 categoryOfDefKey 对「非字符串条目」抛裸 TypeError:被外层 catch 兜住,但消息不报文件名/不报条目/无 issue 锚点(三个分片产物共用) #6751pm:retriage; [finding][spec] Thedashboard.widgets[].ariatombstone sends the author toapp.ariaas a surviving live surface —App.ariais itself aretiredKey()tombstone removed in the same major #6756 CLOSED by merge; fix(spec): scope themodifyAllRecordsbypass declaration to what sharing enforces (#6698) #6852 stays blocked on [finding] MCPsearch_issuesis returning FALSE ZEROS — reproduced on three seats across two repos, and it DEGRADED mid-session, so every dedup that rode on it passed vacuously #13326; [cloud half] Declare the environments deep-link via the navrunActionslot; retire cloud#1048's transitional pin (#4848 follow-up) #7251 / Adopt PR #7328 (objectui#3569 showcase datetime fixture): one push + merge — everything else is done and verified #7358 / finding: a repeated?paradigm=/?source=/?category=/?type=on the automation descriptor routes silently empties the designer palette (200, zero rows) #7360 / fix(spec): discriminate FieldSchema.defaultValue (literal / runtime token / CEL envelope) and validate each shape on its own terms #7403 /SharingRuleSchemais.strict()but declares no ADR-0010 protection envelope, while the metadata read path stamps_packageIdonto stored bodies type-blind #7404 / Rewrite the family-4 record in filter-logic-conformance.ts: the 2026-08-10 exclude ruling was withdrawn — include re-affirmed #7406 / docs(spec,objectql,driver-sql): declare the unanchored autonumber readback boundary (#7287) #7405 / finding:ListRunsRequestSchema.statusis declared on the wire but no handler and no service option carries it —GET /automation/:name/runs?status=failedsilently lists every run #7359 CLOSED by merge, label-clean; fix(metadata-core): derive the ADR-0106 D4 read exemption from the #6603 write gate (#7020) #7361 //dataharness: thesuccessexit is still a stand-in, so a success-envelope regression cannot go red there either #7362 bare (fix(metadata-core): derive the ADR-0106 D4 read exemption from the #6603 write gate (#7020) #7361 isdomain:ui's); ObjectQL.delete's single-id cascade is not transactional — a refusal mid-cascade leaves earlier children deleted while the response says the delete failed #7413 bare-with-domain:devx; fix(example-showcase): route external-datasource fixture through the sqlite fallback #2890 (pm:on-hold·domain:spec) is the consumer-half carrier [finding] The #11284 convergence shipped only its producer half: the react-blocks contract deprecatesobjectName/viewTypeon ListView in favour ofdata={{ provider: 'object', object }}/type, and the lint blesses that spelling — but objectui's ListView reads neither, so the canonical spelling validates green and renders an empty list #14791 names. Filed 06:58Z after PR Sweep the remaining "no runtime consumer" ledger notes that predate the previews-count-as-consumers ruling — datasource_note, permissionrowLevelSecurity.label, plus a mechanical pass #7427 landed (dedup 06:57Z clean): fix(cli): pass unrecognisedfunctionsentries through the lowering (#7318) #7461 (dispatched 07:42Z; CLOSED by merge 09:00Z, label-clean) (the eval-token oracle gate —must_containtokens vs the guides, per-guide vs bundle-wide, whole-token vs substring; the class finding: a repeated?paradigm=/?source=/?category=/?type=on the automation descriptor routes silently empties the designer palette (200, zero rows) #7360 / docs(spec,objectql,driver-sql): declare the unanchored autonumber readback boundary (#7287) #7405 cleaned by hand) · refactor(runtime):PermissionDeniedErrorhas ONE declaration again (#7270) #7462 (dispatched 07:42Z; 17jsonfences that are reallyjsonc: 12guides/schema-expressions.md, 4rules/protocol.md, 1rules/styling.md; no gate reaches fence tags inskills/) · QA run · api-backend (FULL area) · a86db175 · 2026-08-10 · 6 PASS / 2 PARTIAL / 3 FAIL #7463 (dispatched 09:13Z; delivered 09:50Z as PR fix(spec,runtime,service-automation,client):GET /automation/:name/runs?status=filters instead of being dropped (#7359) #7490 with items 1 + 3, mergedac8d523, landed 10:21Z; back topm:queue10:47Z for item 2 → [Decision] Skills optimization program — batch 5 (2 items): objectuicheck-skill-examples.mjs— where the root-devDependency resolution bound lives (objectui#7463 item 2), and whether the marked-fence population becomes shrink-only (objectui#7359 step 3) #14909) ·assertControlledByParentWriteanswers a metadata defect and a missing row with the same403 PERMISSION_DENIED"requires edit access to its master record" #7474 (filed 08:06Z from the refactor(runtime):PermissionDeniedErrorhas ONE declaration again (#7270) #7462 flight, dedup clean; graded by the seat 09:12Zdomain:skills+priority:p3, waits behind PR docs(spec): make submitBehavior's TSDoc state the mode-aware default #7473: 11 JSON fences that parse under no dialect — 8 multi-document listings, 2...elisions,schema-expressions.md:206keptjson— plus 7 retaggedjsoncfences now eligible for theos:checkmarker; one content-edit flight) · pm-dispatch SKILL: the file-at-destination ruling (#7165) putstarget:v17cards into cloud, which the 发版板 section says can never happen — a live v17 card was invisible to both prescribed queries for ~10h #7493 (10:00Z, bare:ComponentInput.defaultValue?: anyatpackages/types/src/base.ts:550, the reason baseline row 1 exists) · updateViewConfig stores "per-view personal config" as ONE org-wide metadata item — sort/hiddenFields/columnState/rowHeight written by any user apply to every user of the view #7494 (10:00Z,domain:skillsp3;pm:queue10:47Z → dispatched 10:53Z → delivered 11:14Z as PR spec: rule the submitBehavior.url semantics — objectui#4190 dead-ends on it #7496 → ACCEPT 11:30Z, at the governed terminal) · Design: does approver routing imply record read visibility? (#7345 model half) #7497 (11:19Z, bare:QueryParams[key: string]: anyatpackages/types/src/data.ts:133— the index signature that let the guide'sfiltertypo compile and be dropped; contract-first candidate, size M) · fix(plugin-security)!: split controlled_by_parent write refusals by true semantics #7506 (13:44Z,documentation·domain:skills· p3, seat-graded: theCLAUDE.mdtwin of [Decision] Skills optimization program — batch 3 (5 items): DATA-F-07defineHook()vs the platform's own examples · #13597 Phase-2 — X0 quote policy ·CLAUDE.mdexcerpt form · the four-copy decision frame · cross-file line-budget moves #14685 item 3 — 51 lines, two hand-copied excerpts ofAGENTS.md:234-243, a charter line that says one rule while two are inlined; governed; waits on the maintainer extending ruling B — batch 6 candidate). Recorded, not carded, from the two flights:guides/project-setup.md:115(a genuinejavascriptpostcss config) is the whole cost of any future decision to point a doc gate atskills/;evals/protocol.jsonhas no basename-matching guide (its guide isrules/protocol.md) — the fact that decided the bundle-wide oracle;page-builder.jsoneval 3chartis taught only in sibling guides; thecreate-as-mocked-method class (docs(spec,objectql,driver-sql): declare the unanchored autonumber readback boundary (#7287) #7405) is semantic and no token-level gate can close it. Dropped after dedup: the two pin suites failing on a BUILT tree are already open as [finding][devx] Docs Drift Check is package-granular, so any PR touching @objectstack/spec lists ~112 docs — an advisory that large is one every reader learns to skip #6893 (check-sdui-registration-pins) and fix(rest): drop a nav group DECLARED empty, not just one the gate emptied (#7380) #7460 (check-readme-exports). The shrink-only decision on the marked population (finding:ListRunsRequestSchema.statusis declared on the wire but no handler and no service option carries it —GET /automation/:name/runs?status=failedsilently lists every run #7359 step 3) is [Decision] Skills optimization program — batch 5 (2 items): objectuicheck-skill-examples.mjs— where the root-devDependency resolution bound lives (objectui#7463 item 2), and whether the marked-fence population becomes shrink-only (objectui#7359 step 3) #14909 item 2 (batch 5); the remedy-authority coverage question and fix(plugin-security)!: split controlled_by_parent write refusals by true semantics #7506 are batch 6 candidates.Hot-file serial queue
scripts/check-skills-token-ratchet.mjs: free.scripts/pm/dispatch-gates.mjs: free (PR #14765 landed 07:48Z; #14870 waits on PR #14860 only).scripts/pm/check-skill-line-ratchet.mjs: PR #14860 at the terminal (the map's single writer until it lands; the re-lock pin PR waits behind it).AGENTS.md: #14789 and #14802 landed (:1154released; line count to re-measure at the re-lock)..claude/skills/pm-dispatch/SKILL.md: #14779 and #14784 landed (:166-171released); PR #14911 at the terminal (quote sites +:25).CLAUDE.md: free (PR #14855 landed).references/platform-readings.md+lanes/cli.md+lanes/services.md+rest-channel.md+scripts/check-ratchet-remedy-authority.mjs: PR #14860 at the terminal.scripts/check-skill-frame-sync.mjs+scripts/check-skill-frame-freshness.mjs+ the two former dev-side frame blocks: free (PR #14862 landed; COPIES = 2)..claude/agents/os-dev.md: #14779 and #14862 landed; PR #14808 (:232+:303) and PR #14911 (:23+ quote sites) at the terminal on disjoint hunks..claude/skills/pm-dispatch/references/decision-analysis.md+contract-review.md+dispatch-runbook.md+landing-operations.md+lanes/director.md+seat-post-protocol.md: PR #14911 at the terminal (#14869's runbook bullet waits behind it and PR #14860);skills/objectstack-pm-dispatch/SKILL.md: free.skills/objectstack-data/SKILL.md: free (#14777 landed).skills/objectstack-ui/rules/list-views.md: free (#14781 landed);rules/pages.md+ the three showcase pages: released;SKILL.md: free.skills/objectstack-ai/SKILL.md: PR #14819 landed; PR #14953 (:396,:404) at the terminal.skills/README.md: free (PR #14786 and PR #14795 landed 02:35Z).skills/objectstack-api/**: free. objectuiskills/objectui/**fence tags (guides/schema-expressions.md,rules/protocol.md,rules/styling.md): PR #7473 at the terminal (#7474 waits behind it); objectuiscripts/check-skill-eval-tokens.mjs+.github/workflows/skill-eval-tokens.yml+scripts/dependabot-merge-gate.mjs+merge-queue-reporting.test.ts+content/docs/guide/ci-cd-pipeline.md: landed (e307c98); objectuiscripts/check-skill-examples.mjs+scripts/__tests__/check-skill-examples.test.ts+content/docs/guide/ci-cd-pipeline.md: landed (ac8d523);scripts/check-skill-examples.mjs:385-387+skills/objectui/guides/testing.md: PR #7496 at the terminal; #7463 item 2 (the bound) waits on #14909; the shared harnesscheck-doc-snippet-types.mjs: free until #14909 item 1 is ruled;scripts/check-doc-fence-languages.mjs: free (widening declined by measurement in PR #7473); objectuiCLAUDE.md: #7506 waits on a ruling (batch 6). Program rules: one flight per published package; splits add ceiling rows pinned at landed counts and never edit other rows;check:role-wordreds on any deletion of a baselined occurrence; ceiling re-locks happen once, after the flights; a Leg-2 binding is keyed by file path + heading;check:skill-frame-syncreads its copies by file path; the line ratchet is never edited by a programme flight; only.objectui-shais a declared single-writer path.Notes
Standing facts: value gate + reject authority from #13597 in force;
scripts/docs-audit/handwritten-docs.jsonNON-governed by ruling; publishedskills/**governed in objectui too (ui#6866 批 #7). Contract-review fuse: served model readclaude-fable-5-1at 06:08Z, 16:48Z, 19:0xZ 09-02, 2026-09-03T01:13Z and 05:33Z (get_session:session_context.model=last_served_model; the 05:33Z read also showsrate_limit_infoseven-dayallowed_warning); since PR #14644 mergedCONTRACT_REVIEW_TIERonmainnames that same value — reading = constant; every review this shift done at that tier in-seat before any human review request (clause ② on #14139 and #14797, clause ① on #12911).scripts/pm/check-clause2-carriers.mjscannot reach the API from this container (403) — carrier pairs are read by hand and recorded in each ACCEPT. Governed-merge audit window for the next round, exactly:--since-ref objectstack=6aea1f559267 --since-ref objectui=ad3d4029abb9 --since-ref objectos=376b29e23a01; cloud has no checkout here (NOT MEASURED). Dev gate logs are not retained in worktrees —UNRECOGNISEDlines NOT MEASURED this shift. Source facts re-verified this shift are on the ACCEPT / review comments of each card. Cross-wall lessons recorded: briefs require a push after every commit; dev turns that wait on a monitor notification stall — briefs say poll the log; at ≥ 90% quota the seat orders checkpoint + push + stop and resumes the same devs after the reset. Timers: check-in #44 at 2026-09-03T14:43Z (60-min cadence after two silent rounds). Prior body revisions carry earlier running states.