Commit Graph
8 Commits
Author SHA1 Message Date
v-openrig-build c8afda612c docs: repair public reference provenance and discovery 2026-09-09 11:10:02 +00:00
v-openrig-build 213e5a56e5 Honor authored startup proof selection 2026-09-07 04:30:05 +00:00
v-openrig-build f0a6b7b3dc fix(codex): refuse a config fragment whose keys precede its first table header
A fragment's leading root-level keys never reached document root. The managed
block is appended to the end of the user's config.toml, and TOML has no syntax
for reopening document root after a table has been declared — so a root key
silently joined whatever table the user's file ended inside:

    fragment:  matrix = [[1, 2]]
    user ends: [mcp_servers.other]
    result:    mcp_servers.other.matrix   (root.matrix absent, no warning)

Their own table gained a key they never wrote, the file stayed valid TOML, and
no guard or receipt reported anything.

Preserving the author's intent is not larger work inside this seam, it is
impossible: prepending the managed block inverts the same bug onto managed
content, and re-serializing the document destroys the user's comments and
formatting. So projection refuses, and the error names the author's fix.

Refusal is DETERMINISTIC and never inspects the user's file — including the case
where their document happens to end at root and the key would have bound
correctly. A fragment author cannot see user state, and a contract that passed or
failed on someone else's file is one they could never reproduce.

Detected from the fragment's preamble rather than from parsed value shapes. The
disposition ruling proposed the latter; the preamble is the same intent with a
tighter edge, because a root key holding an inline table (`x = [{a=1}]`) is
indistinguishable from an array-of-tables once parsed, and would slip through
while binding into the user's table like any other root key.

Two existing pins are AMENDED rather than rewritten to pass:

- R2's nested-array repro (OPR.0.5.8.12) placed its array at root, a shape now
  refused for an unrelated reason. The array moves inside a table — the only
  legal shape — and its depth claim is asserted unchanged, so the thing R2
  cleared is still pinned.
- The duplicate-root-key pin no longer claims WHICH guard fires, because that
  claim became false. The user-visible contract is unchanged and still pinned.

Also documented in docs/reference/agent-spec.md with accepted and refused
examples, since the public contract advertised TOML fragments without this
constraint.
2026-09-01 09:50:40 +00:00
v-openrig-build a2d9b750cf chore(skills): retire obsolete Obra SDLC chain 2026-08-31 22:01:23 -07:00
v-openrig-build 17a5040a0e feat(S20-P3): GREEN candidate — compaction_strategy wired: four canonical modes, A1 alias compat, most-specific-wins resolution
The reserved-era closed enum {harness_native, pod_continuity} becomes the four-mode
vocabulary {default-compaction, managed-compaction, handover, apprentice-handover}
via MAPPED SUPERSESSION per the locked A1 rule, never naive replacement:
- agent-manifest.ts: canonicalCompactionStrategy() is the ONE vocabulary site
  (exported; resolvers import it — one-shared-resolution-path). Deprecated aliases
  validate with a deprecation ADVISORY on the shipped fail-open
  ValidationResult.advisories channel (OPR.0.5.3.3 — the existing field, no schema
  change; disclosed design-cell revision from the drafted warnings[]).
  harness_native→default-compaction (same meaning, 0.5.2 source map §1/§4);
  pod_continuity→handover (derived: 'the handover practice is pod_continuity's
  implementation, not a new concept', source map §4). custom_prompt rejection
  BYTE-PRESERVED. normalizeLifecycle maps aliases; unspecified normalizes to
  default-compaction — today's behavior under the new name, F-6 authority; the
  seat-class default remains an open founder cell per A1.
- types.ts: LifecycleDefaults union widened to the canonical four;
  RigSpecPodMember gains optional compactionStrategy (the member override).
  ExpansionPodFragment deliberately NOT touched: that transform leg's traversal is
  slice 23's class-closure census territory (silent-erasure class) — named there,
  not absorbed here.
- profile-resolver.ts: resolveCompactionStrategy sibling — most-specific-WINS
  (spec default < profile < member), the restore-policy PATTERN without its
  narrowing lattice (the four modes are unordered; desk-concurred planner call,
  disclosed on baton bd7eef84). Invalid values error naming the level; aliases
  normalize at every level. ResolvedNodeConfig carries compactionStrategy.
- docs/reference/agent-spec.md: example rows, value table, and validation rule 13
  updated in lockstep (deprecated aliases documented with their targets).
Stale-literal sweep: zero harness_native/pod_continuity literals remain in src
outside the vocabulary site. NOT RUN: no install/test executed in this
authoring-only window — RED/GREEN execution rides the admitted test atom; the RED
commit (f6895c2af) precedes this one at the same base.
2026-08-30 00:18:01 -07:00
mvschwarz 2f561633ec curate bundled starter skills 2026-05-10 03:19:51 -07:00
mvschwarz d5f2156e6f feat(agents): make runtime config spec-driven 2026-04-26 18:30:08 -07:00
Mike SchwarzandClaude Opus 4.6 cfcd86ee1c Move reference docs to docs/reference/ as canonical source of truth
- Move reference docs from packages/daemon/docs/reference/ to
  docs/reference/ at the repo root — this is the authoring location
- Update .gitignore to track docs/reference/ alongside docs/as-built/
- Update build-package.sh to copy from docs/reference/ into the
  assembled CLI package (not from inside the daemon package)
- Daemon startup still copies the bundled docs to ~/.openrig/reference/
  on start for stable agent-accessible paths

Flow: docs/reference/ (edit here) → build → cli/daemon/docs/reference/
(npm package) → daemon start → ~/.openrig/reference/ (agents read here)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 13:55:43 -07:00