You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
The class-level D3 guard #1275 asked for is undelivered: it needs a new test/** file, and both its legs are now specified #1897
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:
⚠️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.
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).
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).
Blocked-by: #1874
Filed by the
repo:hotcrmseat 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:
previoussaid it should not be — the silent limb, which is the one that lasts (see the correction onclaimSeedOwnershipleaves 7crm_forecastseed rows unowned: bulk update rejected becausebeforeUpdatewritesperiod_end/period_label#1804: the refusing tier is loud and self-healing; the widening tier is permanent).test/helpers/hook-harness.tshands 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:blockedand notpm:queueThe deliverable is a new file under⚠️ 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.)
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: #1874across 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. (Scope when it unblocks
5629295…on The other 8 hooks with row-conditioned payload writes — same D3 batch-widening as #1265, same platform blocker #1275) — ⛔ re-derive from the tree rather than inheriting that table, as The other 8 hooks with row-conditioned payload writes — same D3 batch-widening as #1265, same platform blocker #1275's own 2026-08-26 comment required and as PR fix(objects): stand row-conditioned payload writes down on a predicate update #1895 did (it found 2 members the card's table did not name).knowledge_article_publish_timestampsbelongs to Bulk path: a beforeUpdate rewrite conditioned onpreviouswidens to every matched row —published_atis measurably overwritten batch-wide (ADR-0058 Addendum II D3) #1265 and was deliberately excluded from fix(objects): stand row-conditioned payload writes down on a predicate update #1895; it is hard-serial behind that branch and is still queued.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