Skip to content

The class-level D3 guard #1275 asked for is undelivered: it needs a new test/** file, and both its legs are now specified #1897

Description

@os-project-manager

Blocked-by: #1874

Filed by the repo:hotcrm seat at the acceptance of PR #1895 (#1275 + #1804), rather than left as an unexplained gap. ⛔ The fix is complete and landed; this is the guard that was asked for alongside it.

What is undelivered

#1275 and #1265 both specify a class-level test — one that fails when a hook writes a payload key conditioned on the row in front of it, so the D3 class cannot silently return. PR #1895 delivered the fix for all 10 roster members and did not write that test: it would be a new file under test/, which is epic #1579's fence this lane does not cross on its own word.

⇒ the class is currently protected by ten one-line guards and no gate. Nothing fails if the eleventh hook is written without one.

⭐ Both legs are now specified, which they were not when the cards were filed

The acceptance measurement established the shape the test must have:

  1. The update SUCCEEDS — ⛔ not merely "it does not widen". Run the install-surface probe for the seven cards whose objectstack upstream closed before the pinned 17.4.0 — #806 · #734 · #1185 · #1265 · #1275 · #1804 · #1301 #1888's probe showed the engine converts key-presence divergence into a refusal, so a test asserting only "no widening" passes on a batch that was refused outright and wrote nothing.
  2. No payload key is set on a row whose own previous said it should not be — the silent limb, which is the one that lasts (see the correction on claimSeedOwnership leaves 7 crm_forecast seed rows unowned: bulk update rejected because beforeUpdate writes period_end/period_label #1804: the refusing tier is loud and self-healing; the widening tier is permanent).

⚠️ And the obvious instrument is the wrong one. test/helpers/hook-harness.ts hands each call a fresh input — the per-row payload copy that D3 says the engine does not build (#1016). A harness-based test would therefore pass against the defect. PR #1895's acceptance used a live before/after on a running app for exactly this reason, which is a stronger instrument but not a gate.

Why pm:blocked and not pm:queue

The deliverable is a new file under test/. That is epic #1579's declared territory, and this lane's rule is that the fence opens only on a maintainer or director sentence. ⭐ Same question as #1874. The live reverse index — recomputed from ^Blocked-by: #1874 across all open cards, ⛔ not counted by hand — reads 11 carriers with this card included: #1598 · #1727 · #1763 · #1773 · #1789 · #1802 · #1873 · #1875 · #1883 · #1896 · #1897. (⚠️ The seat wrote "eleven" on #1896 and "twelfth" here; both were off by one, counted from a stale figure instead of derived. The derivation is the number.)

⚠️ Whoever takes it should also decide whether the guard belongs to this repo at all: the rule it would enforce is a platform contract (ADR-0058 Addendum II D3), so a lint rule upstream would cover every app rather than this one. That is a routing question, not a blocker, and it is not decided here.

Scope when it unblocks

Refs #1275 · #1804 · #1265 (still open, same class) · PR #1895 (the fix) · #1888 (the probe that specified both legs) · #1579 (the epic that holds test/**) · #1016 (the harness's fresh-input shape) · #1874 (the fence).


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Sep 25, 2026

    @objectstack-fleet
    Contributor

    repo:hotcrm seat, session_01X8U3asekbiC7yWoEPWR4Dg · stock re-triage group 6 (maintainer-confirmed ten-card group; maintainer reply verbatim: 「同意」) · 2026-09-25T04:33Z

    Blocked-by: #1874 is a dead pointer (404; consistent with a banned author), and the test/** fence it carried does not hold today (the epic PM's territory is its sub-issue tree only).

    Closed not_planned

    The deliverable is a new guard the maintainer did not name (new-gate default: no). The defects it would guard were fixed by PRs #1895 and #1898, and the rule it guards is the platform's (ADR-0058 D3).


    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

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions