Repository navigation
Closed
Closed
Copy link
Labels
priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.A briefed fix or small feature; blast radius bounded by the brief, tests exist.
Milestone
Description
Refs #3465. Slice 3 of 3. Blocked by slice 2 (the disposition sweep).
Problem
#3465 ends with a convention engagement that fires at sweep completion, a narrow CI gate that keeps the cleaned state clean, and two items recorded at the same firing: the hash-store designed-issue trigger and the dead-pointer round-trip wiring. The engagement was drafted in docs/specs/provenance-convention-engagement.md, which #5719 deleted; its content survives only in the #3465 body ("The convention engagement"). The upstream-drift convention is now 2.0.0 with a new record shape.
Fix
Read the slice-1 and slice-2 comments on #3465 as the evidence. Then, in one PR:
- Convention entry. Add ONE entry to
docs/conventions/upstream-drift/CHANGELOG.md, graded against convention 2.0.0, with the three parts from the provenance sweep sub-topic: repo-wide sweep, upstream-drift convention engagement, and the cleaned-state gate #3465 body: (a) re-derive the chore(conventions): plugins restating upstream harness facts are not adopters of upstream-drift, so stale claims never surface #2273 adoption trigger ("a detector is demonstrated that separates an upstream restatement from an in-repo one without a suppression list") from the closure count, measured precision/recall at the stated n, and the carve-out record; if per-instance suppressions accumulated, record that the trigger has not fired, with the count; (b) the enforceability table: major bump only if an enforceability verdict changes, otherwise a minor entry with the as-of date refreshed; (c) the trigger-less-stamp row moves to "built, off-by-default, repo-override enabled". Never rewrite earlier entries, never declare the plugin-eval deferral trigger fired, never turn a report-only tier into a deterministic claim. - Hash-store trigger. In the same entry, evaluate the hash-store designed-issue trigger (
docs/conventions/upstream-drift/README.md, the deferred hash store) against the sweep's fetch telemetry, and state fired or not fired with the numbers. - Dead-pointer wiring. Route dead links found by
.github/workflows/maintenance-check-links-online-claude-code-plugins.ymlto the demotion path inplugins/attribution/skills/audit/reference/dispositions.md("The demotion path when a pointer later dies"), as consuming-repo integration (the plugin file says the consuming repo owns the trigger). - Cleaned-state gate. Add a narrow CI step in
.github/workflows/pr-require-checks.ymlthat runs the deterministic half of the attribution audit (stamps and fingerprint, no model call) on changed markdown and fails on a new fix-eligible finding. Keep it suppression-free; report-only tiers stay report-only.
Done when
-
git diff origin/main...HEAD -- docs/conventions/upstream-drift/CHANGELOG.md | grep -c '^+## 'prints1 -
actionlint .github/workflows/pr-require-checks.yml .github/workflows/maintenance-check-links-online-claude-code-plugins.ymlexits 0 - The new gate step's script has a
.test.shwith a fixture that fails the gate and one that passes;bash <that test>exits 0 -
ci-statusis green on the PR head
Metadata
Metadata
Assignees
Labels
priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.A briefed fix or small feature; blast radius bounded by the brief, tests exist.
Type
Fields
Work status
confirmed
Activity
github-actions commentedon Oct 24, 2026
Proposed work class: work-class: scoped
Basis: automated intake triage; the lanes App applied this class.
Size: Medium
Complexity: Medium
Uncertainty: Knowable
Flags: none
Understood: this is slice 3 of #3465. In one PR it adds a single upstream-drift CHANGELOG entry, which includes the hash-store trigger evaluation. It also routes dead links from the online link-check workflow to the demotion path, and adds a suppression-free CI gate step in pr-require-checks.yml with a pass fixture and a fail fixture. The issue says it is blocked by slice 2 (the disposition sweep), so the evidence from the #3465 slice comments has to exist first. No likely duplicates found among the open issues.
Automated triage, applied by the lanes App.
melodic-automation-lanes commentedon Oct 24, 2026
Not admitted to the issue lane yet: blocker #9755 is not closed as completed by a listed human or a merge.
kyle-sexton commentedon Nov 1, 2026
Cordoned until the disposition sweep in #9755 runs. Issue Triage session.
This slice's evidence is the slice-2 sweep comment on #3465: the closure count, the measured precision and n, and the carve-out record. Three of its four steps wait on that sweep:
Step 3, routing dead links to the demotion path, does not need the sweep:
reference/dispositions.mdmakes that wiring the consuming repo's integration, and #3465 ties it to the sweep only by scheduling ("recorded at the same firing"). It stays in this slice because the slice ships as one PR.The owner ruled on 2026-10-30 that no class is fix-eligible yet. The owner-decisions record (
docs/owner-decisions.mdin melodic-software/architecture, row "Q1 and Q2 (Backlog HITL numbering), 2026-10-30") records the owner's reply, verbatim: "go w/ recommended". The decision: "(a) not yet; re-measure on a larger sample before any class is declared fix-eligible". Until a class is fix-eligible, the sweep cannot run and the gate has nothing to fail on. #9755 is cordoned on that condition.What reopens this: #9755 closes as completed, and #3465 carries a comment headed
## Disposition sweep, <date>. Then take this issue offAfter zeroand send it back through intake with a**Decision recorded.**comment. Its blocked-by edge to #9755 stays as it is. At re-intake, also repoint the body's hash-store trigger fromdocs/conventions/upstream-drift/README.mdtodocs/contracts/upstream-drift/README.md, where that section now lives.3 remaining items
kyle-sexton commentedon Nov 5, 2026
Status. Out of After zero: both reopen conditions in the 2026-11-01T15:38Z cordon comment are met. Routed to Automation Lanes' builder, because Fix steps 3 and 4 edit
.github/workflowsfiles, which the issue lane cannot push. Stays atstatus: confirmed, noagent-ready.Agent choice, not an owner answer.
## Disposition sweep, 2026-11-04(2026-11-04T14:58:50Z).For the builder:
docs/conventions/upstream-drift/README.mdtodocs/contracts/upstream-drift/README.md, where that section now lives. Read the body's path as the contracts one.docs(upstream-drift): state #3567's reopen condition instead of claim…
docs(upstream-drift): say how the entry reads the undefined term flee…
kyle-sexton commentedon Nov 5, 2026
Owner decisions Q-9759-1 and Q-9759-2, 2026-11-05, in session. The owner pasted the question lines and wrote, verbatim:
Decided:
issues: writefiles them.fix(ci): label new dead-link issues needs-triage and say when to clos…
fix(ci): keep one rollup issue for dead links instead of one per link
test(ci): disable SC2016 file-wide in the dead-link filer test
fix(ci): never close the dead-link rollup on bad data, and cap its size
docs(upstream-drift): correct the gate deferral reason and trigger label
kyle-sexton commentedon Nov 5, 2026
Status: steps 1–3 shipped, step 4 deferred, and this issue stays open as the gate's tracker. Step 1 (the convention entry) and step 2 (the hash-store trigger) shipped in #13461. Step 3 (dead-pointer routing) shipped in #13549 with melodic-software/ci-workflows#993. Owner decision Q-9759-2 (b) defers step 4, the cleaned-state gate with its failing and passing
.test.shfixtures, until a disposition sweep applies at least one disposition. #13595 records that decision and its recheck trigger indocs/contracts/upstream-drift/README.md. pr-verify ruled that closing this issue would drop the tracked gate work, so it stays open until that trigger fires and the gate is built.kyle-sexton commentedon Nov 6, 2026
Closed: steps 1–3 shipped, and the step-4 gate moved to the hardening pass.
.test.shfixtures): owner decision Q-9759-2 (b) defers it until a disposition sweep applies at least one disposition. docs(upstream-drift): record the cleaned-state gate deferral and its trigger #13595 records that decision and its recheck trigger indocs/contracts/upstream-drift/README.md.The owner's 2026-11-05 direction, relayed by the GitHub Support hub: "If there are any issues that are tied to hardening, close them because we'll reopen and do those one at a time. That'll come from rediscovery." The deferred gate is recorded in the hardening seed list (
.work/gh-monitor/hardening-pass-seed.md, a local file), with that trigger event.