Conversation
…ness fix (Aaron 2026-04-29) Aaron's correction post-#855-merge: > we want atest for all those from searches to not historical truth > like the porject or your training data so search Two distinct sources of "historical truth" called out: 1. Training data (Jan 2026 cutoff) — Otto's parameters 2. Project state — what's in the repo today, may itself be stale, copy-cargo-culted, or never-current-to-begin-with Both are historical. Neither substitutes for current authoritative upstream sources. The test for any load-bearing claim is a fresh web search. This generalises Otto-247 (version-currency rule, narrowly scoped to version numbers) to ALL authoritative claims — tools, standards, APIs, runtimes, libraries, CI services, security policies, conventions. Carved blade: Training data is historical. Project state is historical. Current upstream docs are the test. Search first. Cite second. Assert third. ## Demonstrated by application Per Otto-363 (substrate-or-it-didn't-happen), this rule must itself land as substrate. Per Otto-364 itself, it must be demonstrated, not just asserted. Did both. Four web searches against current authoritative sources verified Amara's CI-classifier-design claims. Each search produced a sharper finding than training-data recall: 1. Bun ci/lockfile semantics Sources: bun.sh/docs/pm/lockfile, bun.sh/blog/bun-lock-text-lockfile Sharper: bun.lock (text) is v1.2.0+ default; legacy bun.lockb binary form is being phased out. Zeta has neither committed yet — first-implementation decision point. 2. GitHub Actions paths-ignore + required checks Sources: docs.github.com/en/pull-requests/.../troubleshooting- required-status-checks, github.com/orgs/community/discussions/54877, github.com/orgs/community/discussions/44490 Sharper: Required checks remain Pending (not Skipped) when paths-ignore matches. Three GitHub-blessed workarounds ranked: (1) conditional with success-on-skip — the classifier pattern, (2) dummy workflow same name + inverse path, (3) external dorny/paths-filter. 3. GitHub Actions cross-job outputs Sources: docs.github.com/en/actions/how-tos/write-workflows/ choose-what-workflows-do/pass-job-outputs, docs.github.com/actions/using-workflows/workflow-syntax- for-github-actions Sharper: 1 MB per-job output cap, 50 MB total per workflow. Load-bearing for classifier-output JSON design. 4. mise project config Sources: mise.jdx.dev/configuration.html, mise.jdx.dev/walkthrough.html Sharper: Both `mise.toml` and `.mise.toml` are valid; Zeta's dotfile form is fine. Verbatim packet + four search verifications preserved at: docs/research/2026-04-29-aaron-search-first-authority-not-training- data-not-project-memory.md ## Also fixed in this PR Codex P2 PRRT_kwDOSF9kNM5-i1UH (filed on closed #855 just before merge, caught real surviving disjointness violation): CLAUDE.md and AGENTS.md bootstrap pointers still listed "GitHub Issue" as *parked*, contradicting the mutually-exclusive 5-tier taxonomy the Otto-363 memory file established. The doctrine memory was correct; the cold-start entry points were not. Fixed: vocabulary lines in both CLAUDE.md and AGENTS.md now read: *captured* (TaskUpdate — ephemeral) ≠ *parked* (pushed WIP branch like wip/<topic>-<date>, optionally with draft PR — git-ref-backed; GitHub Issues are NOT parking surfaces, they live in the host-durable-not-git-canonical class) ≠ *preserved* (git-native repo, committed + reachable-from-long-lived- ref + indexed) ≠ *canonical* (accepted spec) ≠ *operational* (enforced by tooling) Now consistent with the canonical taxonomy. The 5-tier classifier the recovery process / future lints depend on no longer self-contradicts across CLAUDE.md, AGENTS.md, and the doctrine memory file. ## Files + docs/research/2026-04-29-aaron-search-first-authority-not-training- data-not-project-memory.md (verbatim packet + four search verifications) + memory/feedback_otto_364_search_first_authority_not_training_data_ not_project_memory_aaron_2026_04_29.md (distilled rule + composes-with map) ~ memory/MEMORY.md (paired index entry, newest-first) ~ CLAUDE.md (Version-currency bullet generalised to Otto-364 search-first-authority; vocabulary line fixed for taxonomy disjointness) ~ AGENTS.md (vocabulary line fixed for taxonomy disjointness) ## Composes with - Otto-247 (version-currency, narrower predecessor — NOT superseded; remains the version-specific instance) - Otto-363 (substrate-or-it-didn't-happen — search results in chat are weather; cited in research doc are substrate; same family) - Otto-362 (intra-file supersession — Otto-364 is upstream-vs-recall version of the stale-claims-must-be-refreshed family) - feedback_best_practices_evidence_lineage_survival_substrate_* (best-practice-evidence-lineage rule; Otto-364 is its search step) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: dec2647c36
ℹ️ 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".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Pull request overview
Introduces the Otto-364 doctrine: “search-first authority” for any load-bearing upstream/tooling/API/policy claim (generalizing the earlier version-currency rule), and fixes a taxonomy/vocabulary disjointness regression in the CLAUDE.md + AGENTS.md bootstrap pointers.
Changes:
- Adds Otto-364 as a new doctrine memory entry plus a research-grade source packet demonstrating the rule via four upstream verifications.
- Indexes Otto-364 in
memory/MEMORY.md(newest-first). - Updates CLAUDE.md and AGENTS.md bootstrap bullets to reflect the broader search-first-authority rule and to correct the “GitHub Issues” durability-class placement.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
memory/feedback_otto_364_search_first_authority_not_training_data_not_project_memory_aaron_2026_04_29.md |
New Otto-364 doctrine memory: rule, triggers, skip cases, citation hygiene, and composition links. |
memory/MEMORY.md |
Adds newest-first index entry for Otto-364. |
docs/research/2026-04-29-aaron-search-first-authority-not-training-data-not-project-memory.md |
Preserves the source packet and demonstrates Otto-364 via four cited upstream searches. |
CLAUDE.md |
Generalizes the version-currency bootstrap rule to search-first-authority and adjusts vocabulary wording to reflect the disjointness fix. |
AGENTS.md |
Aligns bootstrap vocabulary wording with the corrected durability taxonomy (Issues are host-durable-not-git-canonical, not “parked”). |
…ntradiction Three thread fixes from PR #856 review: 1. CLAUDE.md L320-338 (Codex P2 + Copilot P1): the same Otto-363 bullet contained two contradictory claims — "PRs and issues are host-durable parking surfaces" then "GitHub Issues are NOT parking surfaces". Resolution: promote host-durable-not-git-canonical to its own enumerated class (5 → 6), and reword the earlier line to "host-durable-not-git- canonical surfaces" so both lines tell the same story. 2. AGENTS.md L279-288 (Copilot P1): same 5-vs-6 inconsistency. The underlying 5-tier channel taxonomy at L270-277 already had host-durable-not-git-canonical as a distinct tier; the vocabulary layer was under-counting. Now matches. 3. docs/research/2026-04-29-aaron-search-first-authority-...md L5 (Copilot P1): "Status: Verbatim" was inaccurate because the document contains translation/analysis/demonstration sections beyond the verbatim Aaron quote. Reworded to clarify scope: "The quoted Aaron message is verbatim; the surrounding material is translation, analysis, and demonstration." No new doctrine added. Smallest sufficient substrate (Otto-362 + Otto-365 discipline). Operating-invariant maintenance, not a new lane. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: fa3beab895
ℹ️ 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".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| and GitHub Issues are host-durable-not-git-canonical | ||
| surfaces, NOT substrate; for doctrine-changing |
There was a problem hiding this comment.
Keep PR durability class mutually exclusive
This line assigns all PRs to host-durable-not-git-canonical, but the same bullet later defines parked as including a pushed WIP branch “optionally with draft PR.” Those two labels are declared mutually exclusive, so this reintroduces a taxonomy contradiction for the common draft-PR parking flow and can cause agents to apply the wrong preservation workflow for parked work.
Useful? React with 👍 / 👎.
Summary
Lands Otto-364 — generalises Otto-247 (version-currency, narrowly version-numbers) to all authoritative claims: tools, standards, APIs, runtimes, libraries, CI services, security policies, conventions.
Plus fixes a post-merge Codex P2 catch on closed #855 (vocabulary disjointness violation in CLAUDE.md + AGENTS.md bootstrap pointers).
Carved blade (Aaron verbatim)
What's in this PR
docs/research/2026-04-29-aaron-search-first-authority-not-training-data-not-project-memory.mdmemory/feedback_otto_364_search_first_authority_not_training_data_not_project_memory_aaron_2026_04_29.mdmemory/MEMORY.mdCLAUDE.mdAGENTS.mdCLAUDE.md(also)Demonstrated by application
Per Otto-363 (substrate-or-it-didn't-happen) AND Otto-364 itself, the rule must be demonstrated, not just asserted. Did both.
Four web searches against current authoritative sources verified Amara's CI-classifier claims. Each search produced a sharper finding than training-data recall:
Bun ci/lockfile — verified at bun.sh/docs/pm/lockfile + bun.sh/blog/bun-lock-text-lockfile. Sharper: text-based
bun.lockis v1.2.0+ default; binarybun.lockbis legacy. Zeta has neither — first-implementation decision point.GitHub Actions
paths-ignore+ required checks — verified at docs.github.com troubleshooting required status checks + Discussion #54877 + Discussion #44490. Sharper: required checks remain Pending (not Skipped); three GitHub-blessed workarounds ranked, with classifier-pattern matching option (1) (conditional with success-on-skip).GitHub Actions cross-job outputs — verified at docs.github.com pass-job-outputs. Sharper: 1 MB per-job cap, 50 MB total — load-bearing for classifier-output JSON design.
mise project config — verified at mise.jdx.dev/configuration.html + mise.jdx.dev/walkthrough.html. Sharper: both
mise.tomland.mise.tomlare valid; Zeta's dotfile form is fine.Disjointness fix (Codex P2 from #855)
Codex P2 PRRT_kwDOSF9kNM5-i1UH caught a real surviving violation: CLAUDE.md and AGENTS.md bootstrap pointers still listed "GitHub Issue" as parked, contradicting the mutually-exclusive 5-tier taxonomy the Otto-363 memory file established. The doctrine memory was correct; the cold-start entry points were not.
Fixed: vocabulary lines in both CLAUDE.md and AGENTS.md now read consistently with the doctrine memory — GitHub Issues live in host-durable-not-git-canonical, NOT in parked. The 5 classes are now mutually exclusive across all three surfaces.
Composes with
memory/feedback_version_currency_*) — narrower predecessor (version numbers only). NOT superseded; remains the version-specific instance.Test plan
🤖 Generated with Claude Code