Repository navigation
Open
Open
Copy link
Labels
priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.A maintainer confirmed the item is real and in scope; ready to be worked.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.status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.A maintainer confirmed the item is real and in scope; ready to be worked.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
No fields configured for Task.
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.