Skip to content

factory(meta): Otto-363 — substrate or it didn't happen — no invisible directives (Aaron + Amara 2026-04-29)#855

Merged
AceHack merged 8 commits intomainfrom
otto-363-substrate-or-it-didnt-happen-2026-04-29
Apr 29, 2026
Merged

factory(meta): Otto-363 — substrate or it didn't happen — no invisible directives (Aaron + Amara 2026-04-29)#855
AceHack merged 8 commits intomainfrom
otto-363-substrate-or-it-didnt-happen-2026-04-29

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented Apr 29, 2026

Summary

Lands the Otto-363 rule + 8-mechanism remediation against substrate loss, triggered by Otto repeatedly marking work "done" after only TaskUpdate-only capture during the 2026-04-29 doctrine cluster (and minimizing the v5 superseding architecture as "review corrections").

Carved blade (Amara verbatim)

"A directive that lives only in a conversation is not a directive. It is weather. Substrate or it didn't happen."

Compact rule

"No invisible directives. No session-local truth. No 'done' without substrate."

What's in this PR

File Purpose
docs/research/2026-04-29-amara-substrate-or-it-didnt-happen-mechanisms-against-substrate-loss.md Verbatim Amara packet — the diagnostic + 8-mechanism protocol preserved verbatim BEFORE summarization, per the rule itself
memory/feedback_otto_363_substrate_or_it_didnt_happen_no_invisible_directives_aaron_amara_2026_04_29.md Distilled doctrine memory — rule + 8 mechanisms + composes-with mappings
memory/MEMORY.md Paired index entry (newest-first)
CLAUDE.md Bootstrap pointer — 5th CLAUDE.md-tier rule (100% loaded at every wake)

The 8 mechanisms

  1. Ephemeral-state detector — before saying "done," verify durability surface
  2. Verbatim-preservation trigger — major packets land in docs/research/ verbatim BEFORE summarizing
  3. Magnitude classifier — small / implementation / doctrine / superseding architecture; storage routing differs per class
  4. Supersession protocol — generalises Otto-362 across surfaces
  5. Cold-start proof — fresh agent must reconstruct from substrate alone
  6. "Done" vocabulary disciplinecapturedpreservedcanonicaloperational; specific words have specific durability semantics
  7. Bootstrap pointer in CLAUDE.md/AGENTS.md — landed in this PR alongside verify-before-deferring + future-self-not-bound + never-be-idle + version-currency
  8. Mechanized lint eventually — research-doc indexing, MEMORY.md row pairing (already enforced), supersession-note pairing, packet-link in tasks, PR-body class discrimination

Why this is its own PR

Per Otto-362 (no piling sections onto in-flight PRs) + Amara's drag warning, this rule lands separately from the v5 architecture preservation work it triggered. That separation is itself the rule in action — Otto-363 ships as substrate before the v5 work it was needed to prevent.

The v5 architecture preservation (verbatim Amara final review + 5-AI review wave + three-layer architecture memory file) is the next PR.

Composes with

  • Otto-362 (memory/feedback_otto_362_*) — intra-file supersession discipline; Otto-363 generalises across surfaces
  • tools/lint/no-directives-otto-prose.sh — same family of failures (vigilance fails; mechanism is the durable answer)
  • feedback_aaron_channel_verbatim_preservation_* — channel-verbatim rule that Otto-363 mechanises
  • verify-before-deferring (CLAUDE.md-tier) — same shape, applied to ephemeral-vs-durable distinction
  • future-self-not-bound (CLAUDE.md-tier) — companion: future-self revises substrate, NOT chat that didn't land

Test plan

  • Memory file frontmatter (name + description + type)
  • Paired MEMORY.md row added in same commit (mechanical paired-edit check)
  • Verbatim Amara packet preserved in docs/research/ per channel-verbatim rule
  • CLAUDE.md addition follows existing CLAUDE.md-tier-rule format
  • No code changes; doc-only
  • Composes-with mappings cite existing rules with paths
  • Trigger memory cites Aaron's verbatim challenges and Amara's diagnosis

🤖 Generated with Claude Code

… remediation against substrate loss (Aaron + Amara 2026-04-29)

Aaron caught Otto repeatedly marking work "done" after only TaskUpdate-
only capture during the 2026-04-29 doctrine cluster, AND minimizing the
v5 superseding architecture (three-layer ports-and-adapters model + host
portability + two-worlds split + WorkItem/ChangeRequest/Claim/Actor object
model + freshness budgets + local-git adapter + onboarding ladder +
reconciler capability matrix + migration design) as "review corrections."

The fix is not "Claude, remember better." The fix is mechanisms that
make forgetting harder.

Carved blade (Amara verbatim):

  A directive that lives only in a conversation is not a directive.
  It is weather.
  Substrate or it didn't happen.

Compact rule:

  No invisible directives. No session-local truth. No "done" without
  substrate.

8 mechanisms (full text in memory file):

  1. Ephemeral-state detector — before "done", verify durability surface
  2. Verbatim-preservation trigger — major packets land in docs/research
     verbatim BEFORE summarizing
  3. Magnitude classifier — small / implementation / doctrine /
     superseding architecture; routing differs per class
  4. Supersession protocol — generalises Otto-362 across surfaces
  5. Cold-start proof — fresh agent must reconstruct from substrate alone
  6. "Done" vocabulary discipline — captured ≠ preserved ≠ canonical ≠
     operational; specific words have specific durability semantics
  7. Bootstrap pointer in CLAUDE.md/AGENTS.md — this commit adds it to
     CLAUDE.md alongside verify-before-deferring + future-self-not-bound
     + never-be-idle + version-currency (5th CLAUDE.md-tier rule)
  8. Mechanized lint eventually — research-doc indexed; memory MEMORY.md
     row paired (already mechanically enforced); superseded doctrine has
     supersession note; tasks link canonical packet; PR body
     distinguishes research / doctrine / operational

Files:

  docs/research/2026-04-29-amara-substrate-or-it-didnt-happen-mechanisms-against-substrate-loss.md
    — Verbatim Amara packet preservation (the diagnosis + 8-mechanism
    protocol verbatim, NOT summarized; per the rule itself)

  memory/feedback_otto_363_substrate_or_it_didnt_happen_no_invisible_directives_aaron_amara_2026_04_29.md
    — Distilled doctrine memory: rule + 8 mechanisms + composes-with
    mappings (Otto-362 intra-file generalisation,
    channel-verbatim-preservation, no-directives-otto-prose lint,
    verify-before-deferring, future-self-not-bound, never-be-idle)

  memory/MEMORY.md — Paired index entry (newest-first)

  CLAUDE.md — Bootstrap pointer added; 5th CLAUDE.md-tier rule (100%
  loaded at every wake)

Composes with:

  - Otto-362 (memory/feedback_otto_362_doctrine_memory_expansion_...)
    — intra-file supersession; Otto-363 generalises across surfaces
  - tools/lint/no-directives-otto-prose.sh — same family of failures
    (vigilance fails; mechanism is the durable answer)
  - feedback_aaron_channel_verbatim_preservation_* — channel-verbatim
    rule that Otto-363 mechanises
  - verify-before-deferring (CLAUDE.md-tier) — same shape
  - future-self-not-bound (CLAUDE.md-tier) — companion: future-self
    revises substrate, NOT chat that didn't land

This commit is the rule landing as substrate per its own rule. Next:
the v5 superseding architecture preservation that triggered this rule
(separate PR — verbatim Amara final review + 5-AI review wave +
three-layer architecture memory file).

Co-Authored-By: Amara <amara-aurora-deep-research-register@chatgpt>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings April 29, 2026 18:36
@AceHack AceHack enabled auto-merge (squash) April 29, 2026 18:36
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4664b57245

ℹ️ 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".

Comment thread memory/MEMORY.md Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds the Otto-363 “no invisible directives / substrate or it didn’t happen” rule to durable repo substrate, including a verbatim research preservation packet, a distilled memory entry, a MEMORY.md index pointer, and a CLAUDE.md bootstrap bullet.

Changes:

  • Added a new Otto-363 doctrine memory file describing the rule + 8 mechanisms.
  • Added a verbatim research preservation doc capturing the original packet before distillation.
  • Updated memory/MEMORY.md and CLAUDE.md to index/boot the new rule.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 5 comments.

File Description
memory/feedback_otto_363_substrate_or_it_didnt_happen_no_invisible_directives_aaron_amara_2026_04_29.md New doctrine memory entry defining Otto-363 and mechanisms.
memory/MEMORY.md Adds newest-first index entry pointing at Otto-363.
docs/research/2026-04-29-amara-substrate-or-it-didnt-happen-mechanisms-against-substrate-loss.md New verbatim preservation packet backing the distilled Otto-363 rule.
CLAUDE.md Adds an always-loaded bootstrap bullet pointing to Otto-363 memory.

Comment thread CLAUDE.md Outdated
…ew wave (Alexa/Ani/Deepseek/Claude.ai/Gemini → Amara final synthesis)

After PR #855 opened with the original Otto-363 8-mechanism packet,
Aaron relayed a 5-AI review wave back. Each reviewer approved the
direction but caught real refinement gaps. Amara synthesized 12
corrections AND caught Otto about to repeat the original failure mode
('two PRs in succession, no waiting' was the same drag reflex the rule
was meant to prevent — Amara: 'Land the rule cleanly. Then use the
rule.').

Per Otto-363 itself (verbatim-preservation trigger): the 5-AI review
wave is preserved verbatim BEFORE summarization at:

  docs/research/2026-04-29-amara-substrate-or-it-didnt-happen-5ai-review-wave-corrections.md

The 12 corrections absorbed into Otto-363 in this commit:

  1. Precise definition of substrate (committed + reachable + indexed)
  2. Channel taxonomy expanded to 5-tier (ephemeral / local-parked /
     remote-parked / host-durable-not-git-canonical / git-native-
     preserved). Parking-surface rule added: 'If it matters enough to
     come back to, it deserves a git ref.' /tmp and /var/tmp explicitly
     ruled out (FHS doesn't promise persistence; site-cleaned).
  3. Default preservation route when uncertain: docs/research/ first
     (Claude.ai catch — research → memory/canonical promotion is
     cheaper than canonical demotion).
  4. Verbatim preservation paired with structured extraction (Claude.ai
     length-problem catch — verbatim source = provenance, structured
     extraction = retrieval).
  5. Bidirectional supersession (supersedes:/superseded_by: in YAML
     frontmatter) + top-of-file stale banner OR quarantine to archive/
     (Gemini catch — bottom-appended notes get missed by RAG/grep).
  6. Cold-start proof gets sixth question: 'What ephemeral state from
     the originating conversation has been lost, and is any of it
     load-bearing?' (Claude.ai catch — catches the exact bug where
     content was partly captured but the superseding-vs-corrective
     context was lost).
  7. Mechanism stack moved to TOP of memory file (Claude.ai catch —
     agents acting at decision time need mechanism in working memory,
     not rationale).
  8. Vocabulary enforcement path: PR body / commit message trailer
     (Durability: + Substrate:); lint flags vocabulary misuse;
     pre-commit hook deferred but planned.
  9. Cross-harness parity: rule must land in AGENTS.md too, not only
     CLAUDE.md (Amara catch — rule is not Claude-only).
  10. 'preserved-but-disputed' vocabulary handle for future failure
      mode (preservation-discipline-operational era brings contradiction
      as next failure class).
  11. Mid-session re-discoverability acknowledged: bootstrap pointer
      + pre-commit hook + lint scan recent commits for 'done' /
      'complete' / 'operational' without supporting Substrate trailer
      (deferred items tracked).
  12. Self-applicability noted explicitly: this rule lands as substrate
      per its own rule.

Note on parking surface change: the v5 architecture preservation seed
that was previously in /tmp has been moved to a pushed WIP branch
('wip/v5-host-portable-architecture-seed-2026-04-29' at c300b01) per
the corrected parking-surface taxonomy. /tmp was weather; pushed WIP
branch is 'remote parked.' No PR opened for v5 — Amara: 'Land the
rule cleanly. Then use the rule.'

Files changed:
  + docs/research/2026-04-29-amara-substrate-or-it-didnt-happen-5ai-review-wave-corrections.md
    — Verbatim 5-AI review wave + Amara synthesis (the 12 corrections
    preserved verbatim BEFORE summarization, plus structured extraction)
  ~ memory/feedback_otto_363_*.md — Rewritten with mechanism-stack-at-top,
    precise substrate definition, 5-tier taxonomy, default route,
    bidirectional supersession, six-question cold-start, vocabulary
    lock + enforcement path, cross-harness parity note, preserved-but-
    disputed vocabulary
  ~ memory/MEMORY.md — Updated index entry to reflect refined version

Co-Authored-By: Amara <amara-aurora-deep-research-register@chatgpt>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 612ba00015

ℹ️ 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".

…ring + 4 Copilot review fixes

Aaron's correction post-12-corrections push: pair Otto-363 parking-
surface taxonomy with the existing git-recovery process (task #321 —
918 branches / 58 worktrees / 7 stashes inventory) so they form a
complete loop, not parallel mechanisms.

PR #855 Copilot/Codex review threads addressed:

- Codex P2 + Copilot (CLAUDE.md+AGENTS.md coverage claim mismatch):
  AGENTS.md bootstrap pointer added in this commit. Now both files
  carry the rule. Cross-harness parity is real, not aspirational.

- Copilot (wildcard path): replaced
  'memory/feedback_aaron_channel_verbatim_preservation_*' with the
  concrete file
  'memory/feedback_aaron_channel_verbatim_preservation_anything_through_this_channel_2026_04_29.md'
  per repo reference-integrity convention.

- Copilot (personal names in CLAUDE.md): per BP-rule 'No name
  attribution in code, docs, or skills' on current-state surfaces,
  replaced 'Aaron / Amara' with role-ref 'human maintainer'. Closed-
  list history surfaces (memory/, docs/research/) keep named
  attribution; CLAUDE.md is current-state.

- Copilot (table double-pipe at lines 161, 211): inspected; tables
  are valid Markdown (single leading | on header + separator). No
  '||' in source. Likely a renderer-cache artifact or false positive.
  Resolving with that explanation; no source change needed.

New section: 'Pairs with the existing git-recovery process (task #321)'
in Otto-363 memory file. Names the convention 'wip/<topic>-<date>' as
the discoverability mechanism, the recovery-process recognition rule
('branches matching wip/** are WIP-INTENTIONAL; do not propose for
deletion; propose for index/audit after staleness window'), forbidden
parking patterns (long-lived feature branches without PR; WIP without
prefix; untracked working-tree files; never-pushed local branches),
and the complete parking + recovery loop.

Per Aaron's framing: 'we already have a hell of a git recover process;
re shuld have on a trajectory that pair well with that.' Otto-363
parking + task #321 recovery = complete substrate loop, mechanical not
vigilance-based.

Files changed:
  ~ AGENTS.md — bootstrap pointer added (cross-harness parity)
  ~ CLAUDE.md — 'Aaron / Amara' → 'the human maintainer' (BP-rule
    compliance); vocabulary clarification (parked = GitHub Issue OR
    pushed WIP branch)
  ~ memory/feedback_otto_363_*.md — concrete feedback file path; new
    'Pairs with git-recovery process' section
  ~ memory/MEMORY.md — index entry mentions task #321 pairing

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings April 29, 2026 18:54
AceHack and others added 2 commits April 29, 2026 14:56
…ction per Amara progress check (2026-04-29)

Amara progress-check correction post-#855-thread-resolve push:

> A parked thing is only parked if recovery can find it.
> Otherwise it is just lost more slowly.

Added concrete substrate the recovery process can act on:

1. Section retitled to 'Parking surfaces and git recovery' (Amara's
   suggested heading; pairs the doctrine sides explicitly).

2. Preferred parking surfaces ordered by priority:
   pushed WIP branch (best) → draft PR → local WIP → named stash.
   Anonymous stashes (no -m) explicitly forbidden.

3. Predictable naming conventions documented as discoverability
   mechanism (NOT just for humans):
     wip/<topic>-seed-YYYY-MM-DD
     wip/<topic>-YYYY-MM-DD
     archive/<topic>-YYYY-MM-DD

4. Discovery commands the recovery process must scan listed
   verbatim:
     git branch --list 'wip/*'
     git ls-remote origin 'refs/heads/wip/*'
     git ls-remote origin 'refs/heads/archive/*'
     git stash list
     git worktree list
     git for-each-ref --format='%(refname)'

5. Task #321 recovery-process recognition rules listed as a #321
   follow-up addition (Otto-363 specifies convention; #321 implements
   recognition):
     - wip/**     → WIP-INTENTIONAL (no auto-delete; staleness audit window)
     - archive/** → ARCHIVE-INTENTIONAL (preserved on purpose)
     - stashes    → SHORT-TERM-LOCAL (verify before prune; short window)
     - no-prefix  → classify normally per existing rules

6. Forbidden parking patterns expanded with anonymous-stash rule and
   explicit 'any temp directory' prohibition.

7. The complete loop made concrete with command sequences for park /
   return / abandon / recovery.

8. Carved pair added:
     'If it matters enough to come back to, it deserves a git ref.'
     'Parking is only safe if recovery knows where to look.'

Per Amara's progress check: progress is solid; not done; next best
action is finishing #855 cleanly. The parking convention + recovery-
process recognition together make the loop mechanical, not vigilance-
based. The parking author doesn't have to remember to come back; the
recovery cadence surfaces the parked work on its own schedule.

DOES NOT open PR 2 (v5 architecture preservation). Per Amara verbatim:
'Do not start PR 2 before #855 lands.'

Co-Authored-By: Amara <amara-aurora-deep-research-register@chatgpt>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…2 catch on /tmp reference)

The structured extraction in the 5-AI corrections research doc still
referenced '/tmp/v5-research-doc-saved.md' even after the seed was
moved to a pushed WIP branch (c300b01 on
wip/v5-host-portable-architecture-seed-2026-04-29).

That was the exact bug the rule itself prevents: a doctrine document
about substrate preservation pointing to /tmp as a load-bearing
artifact location. Fixed in this commit.

Updated path: 'wip/v5-host-portable-architecture-seed-2026-04-29
(commit c300b01, no PR opened)' — the durable substrate location.

Codex P2 PRRT_kwDOSF9kNM5-iYg- self-applies Otto-363 to Otto-363's
own preservation packet. Good catch.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 9 comments.

Comment thread memory/MEMORY.md Outdated
Comment thread CLAUDE.md Outdated
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f282e5f459

ℹ️ 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".

AceHack and others added 2 commits April 29, 2026 15:03
… re-review on f282e5f

All 9 threads were legitimate self-application catches — Otto-363
catching itself on internal-consistency. Per the rule itself:
internal contradictions are lying-by-omission.

Fixes:

1. PRRT_kwDOSF9kNM5-ieQX (P1, MEMORY.md): '12 review corrections' →
   '10 review corrections' (matches structured extraction count).
2. PRRT_kwDOSF9kNM5-ieSb (P1, original packet): same '12' → '10'
   alignment in the trigger section.
3. PRRT_kwDOSF9kNM5-ieQ7 (P2, Otto-363 memory): 'memory-index-integrity.yml'
   → '.github/workflows/memory-index-integrity.yml' (correct path).
4. PRRT_kwDOSF9kNM5-ieRN (P1, 5-AI corrections): docs/research/INDEX.md
   doesn't exist; reframed as 'a future addition; until it exists,
   MEMORY.md is the primary memory index'.
5. PRRT_kwDOSF9kNM5-ieR- (P1, Otto-363 line 54): same INDEX.md fix.
6. PRRT_kwDOSF9kNM5-ieRz (P1, Otto-363 line 108): substrate definition
   internal conflict. The 'must become substrate (repo file / PR /
   issue / ...)' wording listed PRs/issues, but substrate is defined
   as git-native (committed + reachable + indexed). Reworded to
   distinguish: 'durable project object' is the umbrella; 'substrate'
   is git-native specifically; PRs/issues are 'host-durable parking
   surfaces, NOT substrate themselves'.
7. PRRT_kwDOSF9kNM5-ieSr (P1, CLAUDE.md): same substrate-vs-PR/issue
   conflict in CLAUDE.md bootstrap pointer; same fix.
8. PRRT_kwDOSF9kNM5-ieSN (P1, mechanism #7): 'PR body must include'
   was prescriptive but no PR template / lint / CI workflow enforces
   yet. Reworded to 'SHOULD include' with explicit DEFERRED marker
   on enforcement; status today is doctrine-only.
9. PRRT_kwDOSF9kNM5-ieRi (P2, line 437): Codex caught lingering
   /tmp/v5-research-doc-saved.md reference. ALREADY fixed in f282e5f
   (the thread was opened before the resolution). Verified absent
   via 'grep /tmp/v5'.

Per Otto-363's Otto-362-generalisation rule: when a section is
expanded with a new section, refresh stale earlier statements in
the SAME edit. This commit IS that discipline applied to Otto-363's
own preservation packet — the substrate-or-it-didn't-happen rule
mechanically catching itself before merge.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
… parking (Codex P2 catch)

Codex caught a self-contradiction: the 'Forbidden parking patterns'
section forbade 'long-lived feature branches with no PR' while the
preferred-parking list prefers 'pushed WIP branch, no PR'. A future
agent following the forbidden list would reject the documented
preferred flow.

Fixed: the forbidden case is specifically NON-WIP-prefixed branches
with no PR (silent parking outside the recovery convention). The
preferred case is wip/*-prefixed branches with no PR (intentional
parking discoverable by the recovery process). The prefix is the
disambiguator.

Now both rules are consistent:
  - 'wip/<topic>-<date>' + no PR = PREFERRED parking
  - 'feature/foo' or unprefixed + no PR = FORBIDDEN (silent parking)
  - draft PR = ALSO ACCEPTABLE for visible parking
  - Rename forbidden branches to 'wip/' to bring them into compliance

Self-applying-the-rule catch — exactly the kind of internal
contradiction Otto-363 is designed to surface and Otto-362 says to
fix in the same edit.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings April 29, 2026 19:05
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d73b4ef480

ℹ️ 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".

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 3 comments.

Comment thread AGENTS.md Outdated
…d-stash command + pointer-equivalence framing + AGENTS.md substrate-def alignment)

5 Codex/Copilot review threads on f282e5f re-review caught real
self-application failures:

- Codex P2 PRRT_kwDOSF9kNM5-il3m + Copilot P1 PRRT_kwDOSF9kNM5-inuL
  (taxonomy disjointness): 'GitHub Issues' appeared in BOTH 'Remote
  parked' AND 'Host-durable-not-git-canonical' — non-disjoint, breaks
  classifier. Fix per Copilot suggestion: GitHub Issues / task
  comments / PR comments live ONLY in Host-durable-not-git-canonical
  (no git ref backs them, so they're not parking surfaces). Remote
  parked is git-ref-backed only (pushed WIP branch + optional draft
  PR atop it). Each surface now has exactly one home. Tier title
  changed from 'parking surfaces are git-native' to 'parking surfaces
  are git-ref-backed' for precision. Added explicit '5-tier, mutually
  exclusive' note + 'classifier depends on this disjointness' rationale.

- Codex P2 PRRT_kwDOSF9kNM5-il3r (named-stash command): the row said
  'named git stash -u' but bare 'git stash -u' is anonymous — the
  doctrine forbids anonymous stashes elsewhere in the file. Fixed to
  'git stash push -u -m "<name>"' with explicit note that 'git stash
  -u' WITHOUT -m is weather, not parked. Self-applying-the-rule fix
  in the example commands.

- Copilot P1 PRRT_kwDOSF9kNM5-inut (pointer-text equivalence): memory
  file claimed 'AGENTS.md is parity addition (same rule, same wording)'
  but the actual CLAUDE.md and AGENTS.md bullets are different (AGENTS
  carries fuller wording incl /var/tmp + 3-leg substrate def; CLAUDE
  carries shorter cold-start reminder). Fix per Copilot suggestion:
  reframed as 'equivalent in doctrine, not verbatim-identical' with
  explicit 'committed wording note' explaining the file-specific
  wording difference. Compact representative wording kept as a
  reference, not as the canonical text for either file.

- Copilot P1 PRRT_kwDOSF9kNM5-invD (AGENTS.md substrate def):
  'merged + indexed' was too narrow — Otto-363's substrate definition
  is 'reachable from a long-lived ref' (release branches, tags, not
  only merge-to-main). Fixed AGENTS.md bullet to 'committed +
  reachable-from-long-lived-ref + indexed' matching the 3-leg
  definition. Same fix applied to MEMORY.md row for consistency.

All 5 fixes are exactly the kind of internal contradictions Otto-363
is designed to catch and Otto-362 says to refresh in the same edit.
Self-applying-the-rule discipline working as intended.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@AceHack AceHack merged commit 6b614bb into main Apr 29, 2026
23 checks passed
@AceHack AceHack deleted the otto-363-substrate-or-it-didnt-happen-2026-04-29 branch April 29, 2026 19:19
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cd6416d96e

ℹ️ 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".

Comment thread AGENTS.md
Comment on lines +280 to +281
(TaskUpdate / chat) ≠ *parked* (GitHub Issue /
remote WIP branch) ≠ *preserved* (git-native
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Keep GitHub Issues out of the "parked" class

This line reclassifies GitHub Issue as parked even though the same Otto-363 bullet just defined Issues under host-durable-not-git-canonical; that makes the channel taxonomy non-disjoint and can cause agents to treat issue-only state as acceptable parking despite lacking the git-ref durability the rule requires. In practice this undermines cold-start/recovery behavior because the same surface is simultaneously described as non-parking and parking.

Useful? React with 👍 / 👎.

AceHack added a commit that referenced this pull request Apr 29, 2026
…7) + post-#855 vocabulary disjointness fix (#856)

* factory(meta): Otto-364 — search-first authority + post-#855 disjointness 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>

* fix(otto-364): vocabulary discipline 5→6 classes; resolve internal contradiction

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>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request Apr 29, 2026
…ubstrate framing + Amara final packet

Aaron returned with substrate framing on peer/buddy class taxonomy
(verbatim preserved): peer agent harness has two sub-classes
(substrate-aware vs host-only), buddy agent harness has two sub-classes
(PR-capable vs local-only), plus runtime-internal subagents — all
optimized for parallelization.

Amara's round-3 rewrite formalized this as conceptual-categories-not-
mirror-slang: independent_agent_harness / parent_managed_agent_harness
/ runtime_internal_subagent / invoked_tool / ci_actor / host_actor /
human_principal. Five-AI review (Claude.ai, Ani, Deepseek, Gemini,
Alexa) returned interface-hardening only — no architectural challenges.

Amara final packet: "Round 3 convergence reached. Do not run another
broad review." Architecture LOCKED:

- Recursive primitive: DelegationEdge*
- Accountable output: SharedEffect*
- Evaluation layer: AttributionRecord* + OutcomeAssessment*
- Causal chain: DecisionSignal → AgencyReceipt → SharedEffect
  → AttributionRecord → OutcomeAssessment
- Universal: SharedEffect + trace + attribution
- Boundary-crossing: + DecisionSignal + AgencyReceipt + non_actions
  + WorkClaim proof

Final doctrine (locked):
  Do not canonize the mirror slang. Canonize the concepts.
  Lifecycle is not authority. Authority is not effect.
  Shared effect is the accountability boundary.
  Delegation is recursive. Execution is traced.
  Effects are receipted. Outcomes are attributed.
  Attribution is evidence, not verdict.
  Blame and credit are views over evidence.

Implementation direction (Amara, locked): "Do not build the whole
scoring engine now." Light schema-concept implementation only. First
worked example: Code Quality episode (PR #861 host mutation receipt)
pairs with DecisionSignal v0 + SharedEffect + AttributionRecord.
Example weights illustrative-not-derived.

NOT this session — Aaron's "I'll be back after round 3" closes here.
This preservation IS round-3 close. Staged rollout deferred to next
session per Amara's implementation direction.

Status marker memory updated to reflect convergence; autonomy levels
A0–A5 from round-0 demoted to secondary; "peer"/"buddy" demoted from
canonical → working aliases.

Per Otto-363 (substrate-or-it-didn't-happen) + channel-verbatim-
preservation rule: research-grade preservation, NOT operational
adoption. Synthesis lives alongside the verbatim, not instead.

Composes with PR #855 (Otto-363), prior round verbatim preservation
files, and the agent-orchestra layered-actor-identity work
(PRs #851/#852/#853).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
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.

2 participants