Epic parent — reserved by pm:epic; the sub-issue tree is the queue for a dedicated epic PM session (/pm-dispatch epic:#1579), summoned by the maintainer. Domain seats do not take these cards. Director seat (objectstack#12708, summon #15) filed the structure on the maintainer's ruling; ⛔ the director seat does not dispatch.
Ruling
Maintainer, 2026-09-05, live director chat, verbatim: 「hotcrm#1579 是不是应该开一个专题卡处理啊」 → 「同意你的建议,你把卡片写好」, accepting the director seat's plan A′ as presented (comment 5552648775 carries the option analysis; the refined plan is below). Standing basis: AGENTS.md § "Scope — a pure metadata application (2026-08-31 ruling)", rule 3 — "Lint, validation, gates and diagnostics belong to the platform, uniformly … Tests in this repo pin this repo's own business facts and nothing else … ⛔ Do not grow a gate farm." Protocol baseline (maintainer 2026-09-05): 「本项目以协议为基准。所以开发应该对其协议,协议有问题应该立卡修改协议」.
Step 5 ruling (2026-09-05, later the same session, verbatim, in order): 「新增平台公开面」 → 「我认为平台的能力应该放在平台,但是平台该怎么设计提供这个能力,你需要完整的重新考虑」 → 「是不是 把执行能力并进 @objectstack/verify / os test 更合理?」 → design B′ (below) → 「同意」 → 「应该还是刚才 hotcrm 专题卡的子卡片吧」. Design B′: the execution capability goes into the already-published @objectstack/verify (ADR-0054 lineage) as an in-process handle on the stack bootStack already boots — real engine, zero re-implemented semantics; no new package; os test (HTTP JSON suites) untouched. Full reasoning: the ruling comment on this card.
Census (comment 5552607309, origin/main b1599507, read-only)
| bucket |
files |
lines |
| pure business-fact pin (stay) |
86 |
33,166 |
| pure platform-lint candidate |
62 |
19,614 |
| mixed (one row per class) |
35 |
20,422 |
| delete |
1 |
94 |
total (test/ 169 + scripts/ 15) |
184 |
73,296 |
Key finding: ~30 files re-implement rules @objectstack/lint@17.3.0 already ships (≈250 rules: 161 error / 119 warning / 11 advisory) because os lint exits 1 on error only — this repo reads 90 warnings, exit 0. The remedy is relocation to the platform, not deletion; exactly one file is deletable outright. Second finding (step 5 surveys, 2026-09-05T15:4xZ): the shared harnesses are half real (real AutomationEngine, real QuickJS runner, real wrapDeclarativeHook) and half fake (a ctx.api over arrays, hand-sorted hook dispatch, no permission check); the platform's @objectstack/verify already boots the real stack in memory but exposes no in-process way to invoke a hook / flow / action.
Program (sequenced; each step is a sub-issue, Blocked-by: lines are on the cards)
| step |
card |
repo |
gate |
| 1 |
objectstack#15935 — os lint --strict (warnings fail; default unchanged) |
objectstack |
platform first |
| 2 |
#1581 — enable strict in verify, zero the 90 warnings, delete scripts/wow1-live-schema.sh |
hotcrm |
Blocked-by step 1 published and pinned (install-surface probe on the card) |
| 3 |
#1582 F1 flow/predicate/readonly · #1583 F2 reference integrity · #1584 F3 analytics · #1585 F4 i18n + the severity gate · #1586 F5 security/sharing · #1587 F6 write shape |
hotcrm |
each Blocked-by #1581; delete only after an ablation proves the platform rule fires under strict; mixed files lose group A only |
| 4 |
objectstack#15936 — triage decides the live card for the null-guard / totality lint (#4763 closed vs #7219 open) |
objectstack |
decides whether the five totality files in F1 are "wait" or "delete" |
| 5a |
objectstack#15951 — @objectstack/verify in-process handle (hooks.run, flows.run/resume, actions.run, validate, seed/rows, metadata, tenancy option, shared boot) |
objectstack |
platform first; Clause-②: yes |
| 5b |
objectstack#15952 — plugin-spec.mdx stops promising @objectstack/testing; create-objectstack blank template gets a test story |
objectstack |
Blocked-by 5a |
| 5c |
objectstack#15953 — classify hotcrm's platform-semantics pins → derived proof families in verify (D) / platform regression tests (R) / keep (K) |
objectstack |
Blocked-by 5a |
| 5 |
#1595 — replace hook-harness / flow-harness / action-sandbox / metadata-fixtures / tenancy-probe with the handle; delete the stand-ins and their five self-proof suites (~4,069 lines); declare the platform packages tests import |
hotcrm |
Blocked-by 5a published and pinned |
| 6 |
docs↔metadata drift mechanics (19 files / 7,991 lines platform-candidate rows; repo-root / heading-label / docs-anchors helpers) |
— |
frozen: no new docs-drift tests; no card; revisit when a platform doc-lint exists |
| — |
tenant-scoped unique-index materialisation asserted by case-number-tenant-scope / account-name-tenant-scope group B |
objectstack |
folds into 5c's classification (expected (R)); if 5c files it elsewhere, the epic PM adds the Blocked-by on F5 |
Rules for the epic PM
- Cards touching
packages/spec go to the spec seat's queue with Blocked-by: back-links (none expected here).
- A platform rule that does not fire under strict on this repo is a platform gap: file upstream, keep the local assertion; never delete on the name of a rule alone.
- A behaviour the
verify handle cannot express is likewise a platform gap (rule 2): file upstream, keep that one helper path, never re-grow a stand-in.
- Business-fact pins (86 files) are not touched by this epic.
- Close-out: last sub-issue closed → summary comment here → close this card and remove
pm:epic.
Provenance of the census round
Filed by the director seat on the maintainer's instruction 「1543 选 F,普查卡同意开,你现在就派发处理」 (2026-09-05); the read-only census was delivered by an os-dev round (report 5552614013) and ACCEPTed (5552648775). The original census brief is preserved in this card's edit history. Step 5's two read-only surveys (hotcrm helper anatomy; platform test capabilities) were run by the director seat's own explore sub-agents on 2026-09-05T15:3x–15:4xZ; their findings are recorded on objectstack#15951 and #1595.
Refs: #1543 / PR #1580 (the first retirement) · objectstack#15922 (field-consumer diagnostic) · objectstack#13848 (2026-08-31 rulings) · objectstack#15929 (skills finding on the decision frame) · docs/audits/2026-09-hotcrm-handwritten-test-split.md (objectstack).
Epic parent — reserved by
pm:epic; the sub-issue tree is the queue for a dedicated epic PM session (/pm-dispatch epic:#1579), summoned by the maintainer. Domain seats do not take these cards. Director seat (objectstack#12708, summon #15) filed the structure on the maintainer's ruling; ⛔ the director seat does not dispatch.Ruling
Maintainer, 2026-09-05, live director chat, verbatim: 「hotcrm#1579 是不是应该开一个专题卡处理啊」 → 「同意你的建议,你把卡片写好」, accepting the director seat's plan A′ as presented (comment 5552648775 carries the option analysis; the refined plan is below). Standing basis:
AGENTS.md§ "Scope — a pure metadata application (2026-08-31 ruling)", rule 3 — "Lint, validation, gates and diagnostics belong to the platform, uniformly … Tests in this repo pin this repo's own business facts and nothing else … ⛔ Do not grow a gate farm." Protocol baseline (maintainer 2026-09-05): 「本项目以协议为基准。所以开发应该对其协议,协议有问题应该立卡修改协议」.Step 5 ruling (2026-09-05, later the same session, verbatim, in order): 「新增平台公开面」 → 「我认为平台的能力应该放在平台,但是平台该怎么设计提供这个能力,你需要完整的重新考虑」 → 「是不是 把执行能力并进 @objectstack/verify / os test 更合理?」 → design B′ (below) → 「同意」 → 「应该还是刚才 hotcrm 专题卡的子卡片吧」. Design B′: the execution capability goes into the already-published
@objectstack/verify(ADR-0054 lineage) as an in-process handle on the stackbootStackalready boots — real engine, zero re-implemented semantics; no new package;os test(HTTP JSON suites) untouched. Full reasoning: the ruling comment on this card.Census (comment 5552607309,
origin/mainb1599507, read-only)test/169 +scripts/15)Key finding: ~30 files re-implement rules
@objectstack/lint@17.3.0already ships (≈250 rules: 161 error / 119 warning / 11 advisory) becauseos lintexits 1 onerroronly — this repo reads 90 warnings, exit 0. The remedy is relocation to the platform, not deletion; exactly one file is deletable outright. Second finding (step 5 surveys, 2026-09-05T15:4xZ): the shared harnesses are half real (realAutomationEngine, real QuickJS runner, realwrapDeclarativeHook) and half fake (actx.apiover arrays, hand-sorted hook dispatch, no permission check); the platform's@objectstack/verifyalready boots the real stack in memory but exposes no in-process way to invoke a hook / flow / action.Program (sequenced; each step is a sub-issue,
Blocked-by:lines are on the cards)os lint --strict(warnings fail; default unchanged)verify, zero the 90 warnings, deletescripts/wow1-live-schema.shBlocked-bystep 1 published and pinned (install-surface probe on the card)Blocked-by#1581; delete only after an ablation proves the platform rule fires under strict; mixed files lose group A only@objectstack/verifyin-process handle (hooks.run,flows.run/resume,actions.run,validate,seed/rows,metadata,tenancyoption, shared boot)Clause-②: yesplugin-spec.mdxstops promising@objectstack/testing;create-objectstackblank template gets a test storyBlocked-by5averify(D) / platform regression tests (R) / keep (K)Blocked-by5ahook-harness/flow-harness/action-sandbox/metadata-fixtures/tenancy-probewith the handle; delete the stand-ins and their five self-proof suites (~4,069 lines); declare the platform packages tests importBlocked-by5a published and pinnedrepo-root/heading-label/docs-anchorshelpers)case-number-tenant-scope/account-name-tenant-scopegroup BBlocked-byon F5Rules for the epic PM
packages/specgo to the spec seat's queue withBlocked-by:back-links (none expected here).verifyhandle cannot express is likewise a platform gap (rule 2): file upstream, keep that one helper path, never re-grow a stand-in.pm:epic.Provenance of the census round
Filed by the director seat on the maintainer's instruction 「1543 选 F,普查卡同意开,你现在就派发处理」 (2026-09-05); the read-only census was delivered by an
os-devround (report 5552614013) and ACCEPTed (5552648775). The original census brief is preserved in this card's edit history. Step 5's two read-only surveys (hotcrm helper anatomy; platform test capabilities) were run by the director seat's own explore sub-agents on 2026-09-05T15:3x–15:4xZ; their findings are recorded on objectstack#15951 and #1595.Refs: #1543 / PR #1580 (the first retirement) · objectstack#15922 (field-consumer diagnostic) · objectstack#13848 (2026-08-31 rulings) · objectstack#15929 (skills finding on the decision frame) ·
docs/audits/2026-09-hotcrm-handwritten-test-split.md(objectstack).