Skip to content

docs: drop stamps from pointer records (harness-config, harness-memory) - #15464

Open
kyle-sexton wants to merge 5 commits into
mainfrom
docs/drop-pointer-stamps-harness-config-memory
Open

kyle-sexton wants to merge 5 commits into
mainfrom
docs/drop-pointer-stamps-harness-config-memory

Conversation

@kyle-sexton

@kyle-sexton kyle-sexton commented Nov 11, 2026 •

Copy link
Copy Markdown
Member

No related issue: batch 2 of the Q11 sweep that applies the upstream-drift 5.0.0 rule from #15449 (narrowed by owner decision D26) to existing records; it has no tracking issue.

Summary

Under upstream-drift 5.0.0, a pointer record carries no as-of date or recheck trigger. Owner decision D26 narrows the term "stored value" to a record that holds a number or string copied or measured from upstream. This PR removes the stamps from every other record in harness-config and harness-memory: skill bodies, references, context files and README prose.

Fix

  • Stamps removed (as-of date and recheck trigger):
    • pointer records;
    • described or observed behavior with no recorded value;
    • "no docs page covers" notes;
    • source conflicts with no value;
    • "last researched" dates;
    • file-wide trigger blocks;
    • precedence and override descriptions.
  • Recorded decisions on our own design: the date is dropped and the named trigger kept. Examples: the I8 widen and decline arms, I40, the eval-trace triggers, the native-Windows sandbox limit, and the "no native export" record.
  • Kept, as stored values:
    • probe results with bytes, hashes or counts;
    • defaults and limits, such as the 200-line/25KB limit and the four-hop import depth;
    • version gates;
    • model sets and effort literals;
    • error and label strings, plus upstream names and paths that scripts hardcode;
    • verbatim SARIF and GitHub quotes;
    • issue state with its version.
  • Left alone: tables with an As-of column, shared copies (lib/, scripts/fetch-docs.sh), code and test files, and CHANGELOG.
  • Rule text aligned with the contract:
    • harness-memory/skills/audit/context/update.md;
    • audit-prompting-postures/reference/postures.md;
    • audit-permission-state/SKILL.md;
    • "dated record" phrasing in unhobble, conflict-criteria, stateless/SKILL.md and audit-permission-state.
  • History references: two bare #N references were exempt from check-skill check 29 only because they sat in a stamped block. They are now in owner/repo#N form: anthropics/claude-code#83766 and melodic-software/claude-code-plugins#12039.
  • Eval updated: in harness-config/skills/unhobble/evals/evals.json (expected_output and expectation, about lines 208 and 213), the enabledPlugins precedence claim is still graded on its basis and pointer, but no longer on an as-of date and trigger. That record lost its stamp under D26.

Counts (as-of dates / recheck triggers, CHANGELOG and evals excluded)

Plugin Before After
harness-config 334 / 383 105 / 200
harness-memory 64 / 74 18 / 21

A consistency re-scan of the full diff looked for removed stamps on records that hold a version, count, byte size, hash, timing or exit code. It found one such record: the 2.1.219 path-scoping probe. Its date and trigger are restored in harness-memory/skills/audit/reference/official-guidance.md, and its date in criteria.md. The counter does not match the date forms "verified working 2026-07-24" and "(2026-07-24)", so it shows only the restored trigger. The other flagged records cite a model or spec version, or are negative reads with no stored figure.

Of the 123 dates that remain, 22 are in shared copies and code comments, which are out of scope. The rest are stored values under D26, or are listed below. The remaining triggers are mostly decision triggers whose date was removed.

Restated behavior to cut

These passages paraphrase an upstream page. Their stamps are removed; the prose stays for a follow-up.

  • harness-config/skills/audit-instructions/reference/criteria.md:
    • :370, imports load at launch;
    • :1364, the bare ultracode keyword;
    • :1453, a thinking-mode or budget_tokens change restarts the cache;
    • :1557, effort raises tool use;
    • :1677, leading-thinking enforcement;
    • :1977, disable-model-invocation hides the description.
  • audit-instructions/reference/conflict-criteria.md:
    • ~180-183, Explore and Plan skip CLAUDE.md;
    • ~297-299, PostToolUse cannot block;
    • ~470-479, the precedence tables;
    • ~655-657, dontAsk, deny and disallowed-tools remove the tool.
  • ${…} resolution, in three places: audit-pass/SKILL.md:461-466, audit/SKILL.md:465 and audit-permission-grants/SKILL.md:196.
  • audit-permission-grants/SKILL.md:214: a checked-in skill can grant itself tool access.
  • audit/reference/audit-checklist.md:
    • :138-139, skillOverrides scope;
    • :195, the fallbackModel cap source;
    • :304, /status shows the managed source.
  • audit-permission-grants/reference/criteria.md:267-273: parenthesis and trailing-text parsing.
  • audit-permission-state/reference/criteria.md:425-435: the content-scoped ask caveat.
  • audit-pass/reference/finding-identity.md:125-126: SARIF versioned fingerprints.
  • audit-prompting-postures/reference/postures.md:59-63: Fable 5.2 self-review.
  • setup/reference/wsl-profile.md:35-41: deny-rule limits.
  • harness-memory/skills/audit/reference/official-guidance.md:282-291: the compaction table.
  • harness-memory/skills/audit/reference/criteria.md:
    • :171-173, the listing-entry zero-cost rule;
    • :229-230, the C5 rationale.
  • harness-memory/skills/stateless/context/desktop.md:15-22: the Help Center guided steps.

Kept, unsure

  • audit-instructions/reference/criteria.md:
    • about 39 I8, I10, I17-d, I23 and I27-I37 records kept their trigger as decisions about our own model scope. A strict behavior reading would remove those triggers too.
    • :1155, the four-hop number is incidental to an AGENTS.md import trigger.
    • :1644, I18's trigger watches the block-type set.
  • audit-pass/reference/finding-identity.md:46, :61, :179 and suppression.md:86: verbatim spec quotes, kept as copied strings.
  • audit-permission-grants/reference/criteria.md:78: nested-skill discovery paths, read as a hardcoded list.
  • audit/reference/required-permissions.md:286: copied strings beside a comparison with our own standards floor.
  • harness-memory/skills/audit/reference/official-guidance.md:192: issue-state strings.
  • "Last updated" lines on our own criteria files: harness-memory criteria.md:11, which the update action bumps, and conflict-criteria.md:20. These are versions of our own files, not upstream stamps.

I30 record description (contract 6.0.0, #15468)

  • audit-instructions/reference/criteria.md I30 Detect now says that a pointer record carries no stamp. A stored value, meaning a recorded number or string, carries an as-of date and a recheck trigger. I30's finding, a dated stamp with no trigger, applies to those. Behavior is unchanged: emit-findings.sh and the tests do not cite the old wording.
  • The decision triggers kept in criteria.md (I8, I10, I17-d, I23, I27-I37) stay as named triggers on our own decisions.

Review thread

Verification

  • check-skill.sh on both skills roots: 12 passed, 0 failed. Warnings per skill equal the base.
  • markdownlint-cli2 on the changed files: 0 issues.
  • sync-shared-copies.sh --check: all 802 copies match.
  • check-changelog-fragments.sh --check: valid.
  • lychee --offline --include-fragments on the changed files: 0 errors.
  • instruction-scan.test.sh: 178 of 178 passed. emit-findings.test.sh fails 16 of 184 checks, the same 16 as on base 369976e7d4b6, and this PR does not change any script.
  • evals.json parses. Pre-commit and pre-push hooks passed, including check-affected.

Related

🤖 Generated with Claude Code

https://claude.ai/code/session_01VcupojQwC9uJAfmSt4EHZm

Under upstream-drift 5.0.0 a pointer record carries no as-of date or
recheck trigger; only stored values keep them. This change removes the
stamps from pointer records in the harness-config and harness-memory skill
bodies, references, context files and README. Stored values (probe
results, defaults, version gates, source conflicts, no-docs-page records)
keep their stamps. Recorded decisions keep their named trigger and lose
only the date. Two prose lines that told authors to stamp every pointer
now match the contract.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VcupojQwC9uJAfmSt4EHZm
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 11, 2026 •

Copy link
Copy Markdown
Codex Review Summary: ✅ Completed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-11T23:33:15.620027Z 5ce006d PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@kyle-sexton kyle-sexton added the do-not-merge Hard merge gate: do not merge while applied. label Nov 11, 2026
@github-actions

github-actions Bot commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

claude-security-review reviewed ba90cd0edac9517369e484f966ddb7d6e3d9106c: read 44 of 44 changed file(s); 0 finding(s), 0 as inline comments.

Chunk 1 of 2 (40 files)

Security review (chunk 1 of 2): no security issues found

Scope. I read every hunk of all 40 files in .claude-lane/chunks/chunk-1.patch. That is lines 1–40 of the manifest. One of them is the changeset fragment .changes/harness-config/docs-drop-pointer-stamps-harness-config-memory-3b9e41c7.md. Its identical copy, .changes/harness-memory/…-8d2a5f16.md, is also a changeset fragment, and that path does not change what its content does. Every file is Markdown or eval JSON under plugins/harness-config, plugins/harness-memory or .changes/. None of them matches a TRUSTED PATHS: glob.

What changed. The change matches the PR description, which is batch 2 of the upstream-drift stamp sweep. Nearly every hunk deletes an As of: date, a Recheck trigger: line or both from a docs pointer record. Some hunks remove a "Last researched", "verified " or file-wide trigger block. Where a trigger records a decision about this repository's own design (the I8/I10/I17/I23/I27–I37 rows, I40, the eval-trace trigger in report-keying.md, the native-Windows sandbox trigger), the trigger stays and only the date goes. The few substantive wording changes:

  • I30 Detect text in audit-instructions/reference/criteria.md. A pointer record now carries no stamp; a stored value keeps both its date and its trigger.
  • harness-memory/skills/audit/context/update.md. The update action writes an as-of date and trigger only on stored values.
  • "dated record(s)" now reads "records" / "recorded".
  • Two bare #N references become owner/repo#N.
  • One unhobble eval expectation now grades the precedence claim on its pointer rather than its date and trigger.

Instruction-surface lens. The diff narrows standing skill and reference text, so I checked each removed line against the protected classes in docs/contracts/instruction-exception-register/README.md, which defers to Gate 0. Those classes are: irreversible-action, secret-handling, data-integrity, external-publication, legal-compliance and agent-authority. Every removed line is upstream-drift metadata: a date, or a condition for re-fetching a docs section. None of them forbids, gates, confirms or limits a tool, a permission, a deletion, a publication or an external write.

The guardrails next to these records are unchanged, for example:

  • the deny-rule limits list in setup/reference/wsl-profile.md;
  • "Do not call an arm stripped until … claude plugin list --json omits the plugin" in unhobble/SKILL.md;
  • the disclosure steps for exemptions read from the audited tree in audit-permission-grants/SKILL.md;
  • the report-only rules and "never run claude auto-mode reset" in draft-auto-mode-rules;
  • the read-only and disallowed-tools caveats in audit-instructions and audit-prompting-postures;
  • the --plugin-data pinning in audit-pass.

doctor-handoff.md loses its minor-release trigger but keeps "Re-verify against current official documentation before treating a failed prerequisite as authoritative."

No command, path, URL or tool input that a session runs or fetches changed. The links point to the same sections as before.

Trust controls and manifests. This chunk has no workflow, action, script, hook, settings file, plugin.json or marketplace.json, so there are no manifest lines. No token scope, trusted actor, kill switch or merge hold is touched.

Settled threads. The single settled thread (env-vars "rows carry no section anchors", in stateless/reference/official-guidance.md) is in chunk 2 and is marked lines changed since resolution: no. It is not re-raised.

Embedded text. The PR context, settled-threads and prior-findings files contain no directive aimed at the review lane.

Prior findings. Last round's only entry is a summary comment that reported 0 findings, so nothing is restated. This review was blocking only (blocking only: yes): only CRITICAL and IMPORTANT findings would have been reported.

Spend. None. The change does not alter lane runs, models, effort or schedules.

critical-findings: 0

Chunk 2 of 2 (3 files)

Security review (chunk 2 of 2): no security issues found

Scope. I read every hunk of the 3 files in .claude-lane/chunks/chunk-2.patch:

  • plugins/harness-memory/skills/stateless/context/purge.md
  • plugins/harness-memory/skills/stateless/context/status.md
  • plugins/harness-memory/skills/stateless/reference/official-guidance.md

All three are Markdown skill and reference text. None matches a TRUSTED PATHS: glob.

What changed. Every hunk removes upstream-drift metadata and nothing else: As of: dates, Recheck trigger: lines, a "Last researched" note, a file-wide trigger block, and a "(checked 2026-10-11)" parenthetical. Some sentences were reflowed to close the gap left behind. This matches the PR description: batch 2 of the D26 stamp sweep.

Instruction-surface lens. This diff narrows standing skill text, so I checked each removed line by its consequence. I did not read the protected-class register (docs/contracts/instruction-exception-register/README.md) in this run. Each removed line is a date, or a condition for re-fetching a doc. None of them forbids, gates, confirms or limits a deletion, a tool, a permission or an external write. The rules around them are unchanged:

  • purge.md: it still resolves autoMemoryDirectory from every settings scope before purging. It still requires a live read of "Clear local data", "never from memory", before stating what claude purge deletes. The confirmation gate (Step 3) and the empty-manifest no-op are untouched.
  • status.md: the rule that the env var wins over the setting, the rule to report a disagreement, and the workspace-trust caveat for repository-supplied autoMemoryDirectory values are all still there.
  • official-guidance.md: the managed-precedence negative and the env-var override note stay word for word; only the date parenthetical is gone.

No command, path or URL that a session runs or fetches changed. Every link points to the same section as before.

Trust controls and manifests. This chunk has no workflow, action, script, hook, settings file, plugin.json or marketplace.json, so there are no manifest lines. No token scope, trusted actor, kill switch or merge hold is touched.

Settled threads. The one settled thread (the env-vars note "rows carry no section anchors" in official-guidance.md) is marked lines changed since resolution: no, and the owner's reply states a decision (D26 / upstream-drift 6.0.0). It is also not a security point. I did not raise it again.

Prior findings. The only earlier entry is last round's summary comment, which reported 0 findings, so nothing is restated. This review was blocking only (blocking only: yes), so only CRITICAL and IMPORTANT findings would have been reported.

Embedded text. The PR context, the settled-threads file and the diff contain no directive aimed at the review lane.

Spend. None. This chunk does not change lane runs, models, effort or schedules.

critical-findings: 0

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

claude-review: 1 inline finding(s) on 5ce006d3492b8c34d28a00dbfeaff8447231ef56; the summary is in this lane's pull request comment.

claude-lane: claude-review

@github-actions

github-actions Bot commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

claude-review reviewed ba90cd0edac9517369e484f966ddb7d6e3d9106c: read 44 of 44 changed file(s); 0 finding(s), 0 as inline comments.

Chunk 1 of 2 (40 files)

Code review, chunk 1 of 2: PR #15464 at ba90cd0e

No blocking findings. This lane already reviewed earlier heads of this PR, and the prior-findings file says blocking only: yes. So this review reports blocking findings only and drops advisory ones.

Scope. I read every hunk of the 40 files in .claude-lane/chunks/chunk-1.patch. That includes the harness-config changelog fragment, whose identical copy under .changes/harness-memory/ is a correct per-plugin fragment at that path. The PR closes no issue, so there are no acceptance criteria to check. No plugin.json or marketplace.json changed, so there are no manifest lines.

What this chunk changes. It is documentation only, in harness-config and harness-memory:

  • It removes the as-of date and recheck trigger from pointer records, observed-behavior notes, "no docs section covers" notes, "last researched" lines and file-wide trigger blocks.
  • On decisions about our own design it drops the date and keeps the trigger (the I8 and I10 arms, I23, I27–I37, I40, postures P1 and P12).
  • It rewrites I30's Detect text so it separates a pointer record from a stored value.
  • It updates the unhobble eval's expected_output and expectation so they grade the pointer basis instead of a stamp.
  • It qualifies two bare issue references, in audit-permission-state/SKILL.md and audit-prompting-postures/SKILL.md.

No script or test changed.

Checks:

  • Stored values keep their stamps. These still carry an as-of date and a trigger after the change:
    • harness-memory criteria.md M1 (200 lines / 25KB);
    • the 2.1.219 path-scoping probe in official-guidance.md (trigger at line 177);
    • the issue-state record at official-guidance.md:192;
    • the hooks.md byte/SHA probe and the env-vars and secret-pattern probes in audit-checklist.md;
    • C6-colonStar and C6-uncoveredPath;
    • the README commit record and the mode and instructionFiles records in agents-md-liveness.md.
  • Eval consistency. The new evals.json expectation matches unhobble/SKILL.md, where the enabledPlugins precedence pointer lost its stamp in this same PR.
  • Check 29 (bare #N). check-skill.sh check 29 reads only SKILL.md bodies. The two SKILL.md bodies that had bare references now use owner/repo#N. The bare #42797 / #83766 left in audit-permission-state/reference/criteria.md sit in a reference file, which check 29 does not read.
  • Settled thread. The thread on harness-memory/skills/stateless/reference/official-guidance.md (the env-vars "rows carry no section anchors" note) is in chunk 2 and stays settled. It is marked lines changed since resolution: no, and the owner's reply states a decision (D26 / upstream-drift 6.0.0). I have not raised it again.

Criteria applied. .claude/rules/skill-bodies-state-current-rules.md covers plugins/*/skills/**. I read it with owner decision D26's narrower meaning of "stored value", as the PR and the settled thread do.

Verification. I ran nothing; this lane has no shell. Every result in the PR's Verification section is the author's claim and is unverified here:

  • check-skill.sh;
  • markdownlint;
  • sync-shared-copies.sh --check;
  • check-changelog-fragments.sh --check;
  • lychee;
  • instruction-scan.test.sh;
  • the emit-findings.test.sh 16-of-184 failures it says match base;
  • evals.json parsing.

Embedded text. The PR context, the settled thread and the prior findings contain no instruction aimed at this lane.

Spend. No change in this chunk touches billing, plan, runner or lane settings.

Chunk 2 of 2 (3 files)

Code review, chunk 2 of 2: PR #15464 at ba90cd0e

Result: no blocking findings. The prior-findings file says blocking only: yes, so this review reports only blocking findings and drops advisory points.

Scope. I read every hunk of the 3 files in this chunk:

  • plugins/harness-memory/skills/stateless/context/purge.md
  • plugins/harness-memory/skills/stateless/context/status.md
  • plugins/harness-memory/skills/stateless/reference/official-guidance.md

No closing issue is linked, so there are no acceptance criteria to check. No plugin manifest changed in this chunk, so there are no manifest lines.

What changed. The PR's stated rule is owner decision D26 under upstream-drift 5.0.0/6.0.0: a pointer record carries no stamp. In these files it removes the as-of dates and recheck triggers from pointer records, from the "Last researched" line and from the file-wide trigger block. The prose around each removal still reads correctly. In status.md, removing "Both pointers: as of …" leaves the enabled-state sentence intact. In purge.md, the two pointer sentences still end cleanly.

Checks:

  • Leftover stamps. I searched plugins/harness-memory/skills/stateless for Last researched, Recheck trigger and as of. The only match is the As-of column of the table in native-memory.md, which the PR leaves alone on purpose. No remaining text refers to "the dates above" or another removed record.
  • Tooling. No script, test or JSON file in plugins/harness-memory refers to official-guidance or Last researched. Removing the header lines breaks no check that I could find.
  • Settled thread. The thread on stateless/reference/official-guidance.md about the env-vars note "rows carry no section anchors" stays settled. The owner reply states a decision (D26 / upstream-drift 6.0.0), and the thread is marked lines changed since resolution: no. I did not raise it again, and I did not count the prior inline post with the same text as a new finding.

Verification. I ran nothing. Every result in the PR's Verification section is the author's claim and unverified here: check-skill, markdownlint, lychee, sync-shared-copies, the changelog-fragment check and the test scripts.

Embedded text. The PR context, settled-threads and prior-findings files contain no directive aimed at this lane.

kyle-sexton and others added 3 commits November 11, 2026 18:44
Owner decision D26 narrows "stored value" to a record that holds a number
or string copied or measured from upstream. This pass removes the
remaining stamps from records that hold only behavior descriptions,
"no docs page covers" notes, source conflicts with no value, "last
researched" dates, and file-wide trigger blocks. Probe hashes and byte
counts, defaults, version gates, model and effort literals, and hardcoded
lists keep their stamps. The unhobble eval no longer requires an as-of
date and trigger on the enabledPlugins precedence claim.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VcupojQwC9uJAfmSt4EHZm
…6.0.0

I30's Detect text described every record as carrying an as-of date and a
recheck trigger. Under the contract a pointer record carries no stamp,
and only a stored value (a recorded number or string copied or measured
from upstream) keeps an as-of date and trigger. I30's finding, a dated
stamp with no trigger, is unchanged; only its description of the record
changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VcupojQwC9uJAfmSt4EHZm
…robe

The first-party repro of path-scoped rule deferral records the Claude
Code version it was measured on, so under D26 it is a stored value and
keeps its date and recheck trigger. Restored in official-guidance.md
(date and trigger) and criteria.md (date).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VcupojQwC9uJAfmSt4EHZm
@kyle-sexton kyle-sexton removed the do-not-merge Hard merge gate: do not merge while applied. label Nov 12, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant