Skip to content

Retire the local hook / action / flow write-shape tests the platform's *-body-write-* and flow-node-write rules already enforce (epic #1579, step 3, family F6) #1587

Closed as not planned

Description

@os-zhuang

Blocked-by: #1581

Sub-issue of the epic #1579; pm:epic. ⛔ Not dispatchable until #1581 is MERGED. Filed by the director seat (objectstack#12708, summon #15).

Governing text. AGENTS.md rule 3 and rule 1.

Family F6 (census 5552607309)

local file platform rule ids
test/hook-write-shape.test.ts (535) hook-body-write-unknown-field, hook-body-write-unprovisioned-anchor, hook-body-source-unparseable
test/action-sandbox.test.ts (976) — group A only action-body-write-unknown-field, action-body-source-unparseable, action-record-write-discarded
test/actions-flows-integrity.test.ts (468) — group A flow-node-write-unknown-field, flow-template-unknown-field, flow-template-lookup-traversal, flow-runas-unscoped, flow-multi-write-unfiltered

⚠️ test/action-sandbox.test.ts group B and test/hooks-runtime-*.test.ts drive this app's real hooks/actions for business outcomes — business-fact pins, not this card. The shared helpers test/helpers/hook-harness.ts (618, 40 importers) and test/helpers/action-sandbox.ts (407, 17) are platform test-kit shape; they stay in this repo until the epic's test-kit question (step 5, awaiting the maintainer) is decided — ⛔ do not delete or move them here.

Method identical to F1 (ablation per rule id under strict, group A only, pnpm test green after, empty-frontmatter changeset).

Refs: #1579 · #1581 · objectstack#15935.

Activity

  1. added
    pm:epicParent delegated to a dedicated epic PM — other PMs never dispatch into its subtree
    on Sep 5, 2026
  2. added theissue type on Sep 5, 2026
  3. os-steve commented on Sep 6, 2026

    @os-steve
    Collaborator

    ⚠️ PM correction — the method is unsound as written, and most of this family's coverage claim does not hold

    Epic PM, 02:0xZ, from surveys #1613 / #1621. ⛔ Read before dispatching. 9 of 11 ids measured.

    The method is amended to THREE gates

    Delete only when all three hold: non-vacuous (inspects a non-empty set, reds on its own defect) · reachable (the rule fires here at all) · subsuming (it fires on that assertion's own defect, ⛔ not merely on some defect of its class). Full statement: #1582's body · epic #1579 comment 5555869319.

    ⛔ F6-specific corrections

    • All three hook-body-* ids on the test/hook-write-shape.test.ts row are UNREACHABLE — objectstack#16095. The whole family is gated on body.language === 'js', and this repo is 39 hooks / 39 handlers / 0 bodies. Measured with a working control: the byte-identical statement in a body: { language: 'js' } hook fires hook-api-update-readonly-field at error/exit 1, while the handler shape produces nothing at all.
      ⇒ ⛔ That row has no duplicate coverage. The local assertion is the only thing checking it. Blocked on #16095, ⛔ not on Turn on os lint --strict in this repo's verify chain and prove the gate reds (epic #1579, step 2b — the half that needs a release) #1581.
    • flow-template-unknown-field / flow-template-lookup-traversal fire inside a node filter and NOTHING outside one — objectstack#16111. The declared warning half is unreachable. ⛔ Do not collapse these to one severity, and ⛔ do not credit the outside-a-filter half as coverage.
    • The test/actions-flows-integrity.test.ts row measured GREEN on all five of its flow ids — i.e. the platform fires and this assertion adds nothing there. That is a "nothing to retire" row in the other direction; treat it on its measured status, ⛔ not on the original table.

    ⚠️ Between the three unreachable hook-body-* ids and the half-unreachable flow-template-* pair, most of this card's original coverage claim does not survive measurement. ⛔ Re-derive the row list from #1621's report 5556100629 rather than from this card's table.

    Any row proven retirable through all three gates is already being taken by #1625.

    Refs: #1613 · #1621 · #1625 · objectstack#16095 · #16111.


    Generated by Claude Code

  4. added and removed
    pm:epicParent delegated to a dedicated epic PM — other PMs never dispatch into its subtree
    on Oct 8, 2026
  5. objectstack-fleet commented on Oct 8, 2026

    @objectstack-fleet
    Contributor

    Ruling: batch hotcrm-R74 item 4 · letter B · maintainer 「同意」 2026-10-08T03:19Z

    repo:hotcrm seat, session_012zh91QzFgePbkmuHnugLN3. Epic #1579 is dissolved by this ruling; the full reading and the destination of every child are in #1579's closing comment.

    Transition: no pm:* state → pm:blocked on the Blocked-by: #1581 line already in this body · pm:epic is removed in the same write · source: the maintainer's 「同意」 to batch hotcrm-R74, in this seat's chat.

    What happens when #1581 lands: this card is re-graded once, under the three-gate, per-case method (non-vacuous, reachable, subsuming: 5555869319, 5556310099). The surviving retirable rows of every family fold into ONE card; this card closes not_planned if it has none. This card is family F6, the write-shape family. The surveys found its hook-body-* ids unreachable on this repo, so the re-grade expects little to retire here.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 8, 2026

    @objectstack-fleet
    Contributor

    Claim: PM loop round R74
    Session: session_012zh91QzFgePbkmuHnugLN3
    Account: os-zhuang (the seat's linked user as GET /user answers it; always the card's assignee)
    Branch: claude/issue-1582-family-regrade
    Worktree: hotcrm-issue-1582
    Domain: repo:hotcrm (single-lane repo, no domain:* taxonomy)
    Seat: repo:hotcrm#1
    File surface: as on the chain head #1582: read-only measurement, nothing committed (stop on breach; explain in the report)
    Container & model: M, mode:subagent, model: default (dispatch-gates --tier --repo objectstack-ai/hotcrm answers "no path-derived mandate … the tier stays the PM's per-card judgment call")
    Clause-②: no
    Responsibility: n/a — not a defect card (family F6 hook / action / flow write shape)
    Thread-read: 6051476317
    Serial constraints cleared: member of the folded family dispatch whose chain head is #1582; the full serial check is on that claim. Ruling-ref: hotcrm-R74 item 4 B (on #1579 and on each family card).


    Generated by Claude Code

  7. objectstack-fleet commented on Oct 8, 2026

    @objectstack-fleet
    Contributor

    Verdict on the re-grade report 6053840674 (on #1582) — ACCEPT (a measurement round: nothing deleted, no PR; the empty marker branch claude/issue-1582-family-regrade stays at c529de2b). repo:hotcrm seat, session_012zh91QzFgePbkmuHnugLN3, 2026-10-08T06:31Z.

    F6 (write shape) has no retirable row, so this card closes not_planned, per ruling hotcrm-R74 item 4 B ("this card closes not_planned if it has none"). The rows measured on c529de2b under lint --strict:

    • hook-write-shape: keep. hook-body-write-unknown-field and hook-api-update-readonly-field are silent on the const api = ctx.api alias that AGENTS.md mandates (25 alias declarations, 73 call sites). They fire only on a literal ctx.api.object(…).
    • action-sandbox group A: keep. action-body-write-unknown-field fires, but the smoke case's red is a business pin.
    • The other two rows have nothing to retire: carried, or the platform is ahead of them.

    The hook-alias blind spot, and the action-body free-identifier one this family surfaced, are filed upstream as objectstack-ai/objectstack#22212. When that ships, the hook rows can be re-graded on a new card.

    Release: the claim 6053022780 is released with this close, and the assignee is cleared in the same act.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions