Context
Several conventions independently record "this fact was verified against upstream on date X; re-verify when Y happens", but the pattern has no owner doc — which is itself a violation of the one-owner-per-concern rule in docs/PLUGIN-PHILOSOPHY.md's convention registry ("A new cross-plugin convention lands in an owner doc before a second plugin adopts it").
Live instances:
docs/conventions/hook-config-delivery/README.md:138 — a ## Recheck triggers section, plus ":103 — is a recheck trigger, not a rewrite of history"
docs/conventions/ecosystem-commands/README.md:157 — "Revisit triggers (either fires → re-evaluate)"
docs/PLUGIN-PHILOSOPHY.md — per-row "Verified" dates in the component-stances table with a staleness disclaimer
docs/OFFICIAL-DOCS.md — per-row verified dates with an explicit warning that the file goes stale
docs/MIGRATION-PLAYBOOK.md — "Revisit trigger:" on each rejected-component decision record
Two different names (recheck vs revisit), no shared definition of what a trigger must contain, and no statement of what makes one checkable.
The mechanism question is already settled elsewhere and should be adopted rather than re-derived: there is no usable ETag on the docs site, and Last-Modified is a site-wide deploy stamp rather than per-page, so content hashing is the only viable drift signal. More important than the mechanism is the discipline: a dated verification stamp is an as-of record, never standing authority — anything restating a volatile specific needs a stated re-derivation event, not just a date.
This matters more as the fleet depends on more upstream surfaces. Claude Code changes its own conventions between releases, sometimes with no version bump on the surface in question (the session scratchpad is exactly that shape), and experimental surfaces churn outright — agent teams removed TeamCreate/TeamDelete and deprecated team_name in v2.1.178.
Cost of leaving it: every convention invents its own trigger wording, none are mechanically checkable, and a stale claim reads identically to a fresh one.
Proposed work
- Create
docs/conventions/upstream-drift/ as the owner doc: one name for the concept, the required parts of a trigger (what was verified, against which doc line or URL, on what date, and the observable event that obliges re-verification), and the rule that a date alone is not authority.
- Record that content hashing is the only viable drift signal, and whether the fleet stores hashes today or defers that.
- Add the registry row to
docs/PLUGIN-PHILOSOPHY.md's convention registry table.
- Migrate the existing instances to the single name and shape; leave their content intact.
- Classify enforceability per
melodic-software/standards conventions/engineering/enforceability-tiers.md and state which part, if any, is mechanically checkable — e.g. "every Verified <date> row carries a trigger" is a deterministic presence check, while judging whether a trigger has actually fired is reasoning-only.
Acceptance criteria
References
docs/conventions/hook-config-delivery/README.md:103,138
docs/conventions/ecosystem-commands/README.md:157
docs/PLUGIN-PHILOSOPHY.md — convention registry; component-stances staleness disclaimer
docs/OFFICIAL-DOCS.md — per-row verified dates and staleness warning
docs/MIGRATION-PLAYBOOK.md — per-decision revisit triggers
melodic-software/standards conventions/engineering/enforceability-tiers.md — deterministic / detect-then-judge / reasoning-only, and the routing rule
melodic-software/standards conventions/engineering/documentation-and-citations.md — read-on-demand over snapshots
Context
Several conventions independently record "this fact was verified against upstream on date X; re-verify when Y happens", but the pattern has no owner doc — which is itself a violation of the one-owner-per-concern rule in
docs/PLUGIN-PHILOSOPHY.md's convention registry ("A new cross-plugin convention lands in an owner doc before a second plugin adopts it").Live instances:
docs/conventions/hook-config-delivery/README.md:138— a## Recheck triggerssection, plus ":103 — is a recheck trigger, not a rewrite of history"docs/conventions/ecosystem-commands/README.md:157— "Revisit triggers (either fires → re-evaluate)"docs/PLUGIN-PHILOSOPHY.md— per-row "Verified" dates in the component-stances table with a staleness disclaimerdocs/OFFICIAL-DOCS.md— per-row verified dates with an explicit warning that the file goes staledocs/MIGRATION-PLAYBOOK.md— "Revisit trigger:" on each rejected-component decision recordTwo different names (recheck vs revisit), no shared definition of what a trigger must contain, and no statement of what makes one checkable.
The mechanism question is already settled elsewhere and should be adopted rather than re-derived: there is no usable
ETagon the docs site, andLast-Modifiedis a site-wide deploy stamp rather than per-page, so content hashing is the only viable drift signal. More important than the mechanism is the discipline: a dated verification stamp is an as-of record, never standing authority — anything restating a volatile specific needs a stated re-derivation event, not just a date.This matters more as the fleet depends on more upstream surfaces. Claude Code changes its own conventions between releases, sometimes with no version bump on the surface in question (the session scratchpad is exactly that shape), and experimental surfaces churn outright — agent teams removed
TeamCreate/TeamDeleteand deprecatedteam_namein v2.1.178.Cost of leaving it: every convention invents its own trigger wording, none are mechanically checkable, and a stale claim reads identically to a fresh one.
Proposed work
docs/conventions/upstream-drift/as the owner doc: one name for the concept, the required parts of a trigger (what was verified, against which doc line or URL, on what date, and the observable event that obliges re-verification), and the rule that a date alone is not authority.docs/PLUGIN-PHILOSOPHY.md's convention registry table.melodic-software/standardsconventions/engineering/enforceability-tiers.mdand state which part, if any, is mechanically checkable — e.g. "everyVerified <date>row carries a trigger" is a deterministic presence check, while judging whether a trigger has actually fired is reasoning-only.Acceptance criteria
docs/conventions/upstream-drift/README.mdexists and defines the trigger's required parts and the date-is-not-authority rule.docs/PLUGIN-PHILOSOPHY.md's convention registry has a row pointing at it.hook-config-delivery,ecosystem-commands,PLUGIN-PHILOSOPHY.md,OFFICIAL-DOCS.md, andMIGRATION-PLAYBOOK.mduse one consistent name and shape.References
docs/conventions/hook-config-delivery/README.md:103,138docs/conventions/ecosystem-commands/README.md:157docs/PLUGIN-PHILOSOPHY.md— convention registry; component-stances staleness disclaimerdocs/OFFICIAL-DOCS.md— per-row verified dates and staleness warningdocs/MIGRATION-PLAYBOOK.md— per-decision revisit triggersmelodic-software/standardsconventions/engineering/enforceability-tiers.md— deterministic / detect-then-judge / reasoning-only, and the routing rulemelodic-software/standardsconventions/engineering/documentation-and-citations.md— read-on-demand over snapshots