Skip to content

doctrine(autonomous-loop): rediscoverable-from-main invariant — meta-property the every-tick checklist serves (2026-04-30)#969

Merged
AceHack merged 2 commits intomainfrom
doctrine/autonomous-loop-rediscoverable-from-main-invariant-aaron-2026-04-30
May 1, 2026
Merged

doctrine(autonomous-loop): rediscoverable-from-main invariant — meta-property the every-tick checklist serves (2026-04-30)#969
AceHack merged 2 commits intomainfrom
doctrine/autonomous-loop-rediscoverable-from-main-invariant-aaron-2026-04-30

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented Apr 30, 2026

Summary

Adds an "Invariant — rediscoverable from `main` alone" section to docs/AUTONOMOUS-LOOP.md, framing the every-tick checklist as a mechanism serving an invariant rather than the invariant itself.

Verbatim direction from the maintainer

"Six-step tick close (docs/AUTONOMOUS-LOOP.md) has a satisfying property that should be an invariant for all future changes to this file"

follow-up sharpening: "not six step the rediscoverable on main part"

What's in scope

  • New "Invariant" section before "The every-tick checklist"
  • Names the load-bearing property: a fresh agent reading main alone can pick up the next tick
  • Names four supporting properties (tick-history on main, PR queue on host, substrate precedes narration, cron-as-cadence-engine)
  • Explicit test for future revisions: does the change preserve or strengthen the invariant?
  • Verbatim quote from the maintainer at the end of the section

What's NOT in scope

  • The every-tick checklist itself is unchanged. The point is exactly that the count of steps is incidental — only the discoverability is load-bearing. Future revisions can restructure provided the invariant holds.
  • No memory file added; the invariant lives in the doc itself, where the maintainer asked it to live.

Composes with

  • Otto-363 substrate-or-it-didn't-happen
  • non-durable-means-does-not-exist (the maintainer, 2026-04-30)
  • Together: "if it isn't on main, the next tick won't see it" — the structural reason the invariant matters.

Test plan

  • markdownlint passes on the changed file
  • Section placement verified (before "## The every-tick checklist")
  • Role-ref discipline honored (the maintainer's quote uses "the human maintainer" framing in surrounding prose; the verbatim quote retains the directive content)
  • No checklist content changed — surgical addition only

🤖 Generated with Claude Code

Copilot AI review requested due to automatic review settings April 30, 2026 23:10
@AceHack AceHack enabled auto-merge (squash) April 30, 2026 23:10
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: 04a4b8afc6

ℹ️ 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 docs/AUTONOMOUS-LOOP.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 an explicit “rediscoverable from main alone” invariant to docs/AUTONOMOUS-LOOP.md, reframing the every-tick checklist as a mechanism that serves a cold-start continuity property for future sessions/agents.

Changes:

  • Add a new “Invariant — rediscoverable from main alone” section before the every-tick checklist.
  • Describe four supporting properties (tick-history shards, host-visible PR queue, substrate-first discipline, cron cadence independence).
  • Add a quoted maintainer directive anchoring the invariant.

Comment thread docs/AUTONOMOUS-LOOP.md Outdated
Comment thread docs/AUTONOMOUS-LOOP.md Outdated
Comment thread docs/AUTONOMOUS-LOOP.md Outdated
AceHack added a commit that referenced this pull request Apr 30, 2026
…nt + #936 stale-PR fix (#970)

Single-tick row for the autonomous-loop heartbeat at
2026-04-30T23:12Z. Captures:

- Maintainer-directed invariant landing on docs/AUTONOMOUS-LOOP.md
  (#969) — sharpening prior tick's "six-step" insight to the
  load-bearing "rediscoverable on main" property
- Stale-PR triage on #936 (Alexa B-0114 row) — rebase onto
  main resolving BACKLOG.md, 4 review-thread fixes, force-
  push, batch-resolve

Per the autonomous-loop tick-must-never-stop discipline.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request Apr 30, 2026
…rds (#971)

Per docs/hygiene-history/ticks/README.md schema, the first
column of each shard MUST be exactly an ISO-8601 UTC timestamp.
15 shards (April 28, 29, 30) carried a parenthetical context
appended to the timestamp in col1 — pattern caught by Copilot
on PRs #745-755 + #970.

The parenthetical content is preserved by each shard's body
column (col4) which already restates the tick context. The
fix removes the col1 violation without losing information.

Surface drift fix per the just-landed rediscoverable-from-main
invariant on docs/AUTONOMOUS-LOOP.md (#969): tick-history is
one of the four properties that makes the invariant true. If
shards drift in format on main, future agents see two
incompatible patterns and have to guess. Schema-uniform shards
make the read surface predictable.

Files affected (15):
- docs/hygiene-history/ticks/2026/04/28/{0408,0418,0433,0501}Z.md
- docs/hygiene-history/ticks/2026/04/29/{0235,0240,0320,0350,0400,0425,0430,0435,0440}Z.md
- docs/hygiene-history/ticks/2026/04/30/{2018,2312}Z.md

No data loss — only col1 prose drift removed; body context
fully preserved. Trailing newline added on 3 files where it
was missing.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request Apr 30, 2026
…g future tick-times — surface for maintainer decision before mass-fixing col1 (#973)

Codex P2 review on PR #740 caught a pattern across 14+ open
tick-history shard PRs from 2026-04-29: col1 tick-times are
40-80 minutes ahead of the commits' author-times. The shards
weren't recording past ticks — they were prefabricating shard
files for future tick slots.

Empirical sample:

| PR | PR opened | Claimed tick | Commit author | Gap |
|---|---|---|---|---|
| #728 | 02:05:49Z | 02:45:00Z | 02:05:42Z | +40m |
| #730 | 02:07:17Z | 02:55:00Z | 02:07:14Z | +48m |
| #734 | 02:14:15Z | 03:15:00Z | 02:14:12Z | +61m |
| #740 | 02:24:24Z | 03:45:00Z | 02:24:20Z | +81m |

The prior-tick col1 cleanup (PR #971) on 15 shards already
on main and the per-PR force-pushes on #745-755 + #968 fixed
the schema-violating parenthetical, but the underlying
prefabrication concern was buried under the more visible
Copilot-P1 col1 finding.

Two interpretations:

1. Mis-timestamped recording — agent computed col1 wrong
2. Intentional batch prefabrication of future-tick receipts

Either way, mechanically fixing col1 on the remaining 14 PRs
would launder the prefabrication: shards would look schema-
compliant but still claim factually-incorrect tick times.

Composes with the rediscoverable-from-main invariant landed
in PR #969: tick-history-on-main is one of four supporting
properties; false time-claims subvert the invariant.

Decision options for the maintainer (in the file):

- Close affected PRs (audit-trail integrity over evidence-
  density)
- Rewrite col1 to commit-time
- Add a note column for time-of-record vs time-of-event
- Accept prefab pattern as intentional

Filing this as substrate (per substrate-or-it-didn't-happen)
and explicitly NOT mass-fixing col1 on those PRs until
direction.

MEMORY.md index entry added; latest-paired-edit marker
updated.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request Apr 30, 2026
…catch col1 schema violations at write-time, not 2 days later via PR review (#975)

Per the structural-fix-beats-process-discipline pattern
(Otto-341) + the rediscoverable-from-main invariant landed
in PR #969: the check that catches col1 drift at write-time
is the mechanism that preserves schema uniformity on main.

What this checks:

1. Filename matches HHMMZ.md or HHMMSSZ-<hash>.md per the
   schema in docs/hygiene-history/ticks/README.md.
2. First non-empty line is a 6-column markdown table row
   starting with `| YYYY-MM-DDTHH:MM(:SS)?Z |` — exactly
   the ISO timestamp, no parenthetical, no extra prose.
   (Both with-seconds and no-seconds forms are valid
   ISO-8601; the schema doesn't pick a side.)
3. The col1 timestamp's date + HH:MM matches the filename's
   path date and HHMM.

What this does NOT check:

- Body content (cols 4-6) — intentionally free-form prose
- The prefab pattern (col1 timestamp ≫ commit-author time)
  — requires git-log access not available pre-push for the
  current commit; deferred per the memory file linked in
  the script header

Current-state on main: ~5 historical shards from April 28
violate this check. Those 5 are also implicated in the
prefab-shard finding (memory/feedback_tick_history_prefab*),
so fixing col1 mechanically would launder the body-level
prefab claim. The check therefore lands in DORMANT mode —
not yet wired into CI/pre-push. A future cleanup PR resolves
the prefab-vs-schema decision before the check goes binding.

Composes with B-0114 sub-item 1 (pre-push lint hook) — when
that lands, this check joins the pre-push run.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
AceHack and others added 2 commits April 30, 2026 20:37
…bearing meta-property the every-tick checklist serves (the maintainer 2026-04-30)

Adds an "Invariant — rediscoverable from `main` alone"
section before the every-tick checklist.

The maintainer 2026-04-30 sharpened my insight: not the
six-step count, but the rediscoverable-on-main part is what
should be an invariant for all future changes to this file.

The added section names:
- The invariant itself (a fresh agent reading main alone
  can pick up the next tick)
- The four properties that make it true today (tick-history
  on main, PR queue on host, substrate precedes narration,
  cron-as-cadence-engine-not-session-memory)
- The future-changes test (does the change preserve or
  strengthen the invariant?)

The every-tick checklist remains as-is; this section
explicitly frames the checklist as A mechanism serving the
invariant rather than the invariant itself. Future
revisions may restructure the checklist provided the
rediscoverable property is preserved.

Composes with substrate-or-it-didn't-happen (Otto-363) +
non-durable-means-does-not-exist (the maintainer, 2026-04-30)
which together establish "if it isn't on main, the next tick
won't see it" — the invariant's structural reason.

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


Four fixes:
1. HHMMz.md → HHMMZ.md (case consistency with rest of file + README)
2. minimised → minimized (US English, matches surrounding text)
3. Cron bullet rephrased — 'fires regardless of which session
   is active' was misleading per session-scoped task semantics;
   reframed to 'fires whenever a session is active to receive
   it' + cross-ref to Session-restart recovery section
4. Verbatim-quote claim resolved — added paraphrase note +
   preserved the bracketed gloss with explicit '(paraphrased)'
   framing for honest attribution

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@AceHack AceHack force-pushed the doctrine/autonomous-loop-rediscoverable-from-main-invariant-aaron-2026-04-30 branch from 04a4b8a to 33cce60 Compare May 1, 2026 00:38
@AceHack AceHack merged commit 8af34dd into main May 1, 2026
20 checks passed
@AceHack AceHack deleted the doctrine/autonomous-loop-rediscoverable-from-main-invariant-aaron-2026-04-30 branch May 1, 2026 00:41
AceHack added a commit that referenced this pull request May 1, 2026
…(6 fixes + 6 resolutions) (#992)

Per autonomous-loop tick-must-never-stop discipline. Closing tick early
per 'long conversation incoming' signal from maintainer.

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