mirror of
https://github.com/razzant/ouroboros.git
synced 2026-10-03 04:07:04 +00:00
`plan_spec.resolve_constitutional` read every non-URL string in the spec's `affected_resources` list as a file path. On the live install that turned the prose item «Отдельный проект «TSMC — 10-летний инвестиционный анализ»» into "a path under the Ouroboros repository": the plan was marked constitutional and every reviewer of a deck-shaped plan received BIBLE.md plus ARCHITECTURE.md in full, ~470k tokens per cycle. Across the recorded history not one of the 14 constitutional verdicts came from a real file path in that list, and the model never once spelled a target as `file://` (0 of 186 locators). The spec now says the two things separately (owner decisions 8=A, 9=A, 16=A): * `affected_paths` — REQUIRED — is the files the work will CHANGE, and the only list the host resolves. `[]` is a real claim: "this work changes no files". A path under the system repository decides whether or not the file exists yet, because creating `ouroboros/new_module.py` IS self-modification. * `affected_resources` is prose: systems, services, projects, people. Nothing in it reaches the filesystem. * An `evidence` locator is something to LOOK AT. Reading a repository file is not changing it, so it no longer buys the pack on its own (16=A); when the work will also change that file, the file is in `affected_paths` and decides there. System-repo evidence reads are named in the disclosure note, so an author who expected the constitution can see why it did not come. Existence stopped deciding anything, so `_default_exists`/`evidence_exists` are gone with it. A NEW spec submitted in the old mixed form is refused before any dispatch with `PLAN_RESOURCE_FORM_REQUIRED`, quoting the field with a two-line example. The refusal deliberately does NOT carry the `PLAN_SPEC_INVALID` token: that family records a superseding attempt on the way out and would orphan an open wave, so this one writes nothing and, when a wave is open, names its fingerprint and the free `review_disposition` exit. Waves recorded under the old shape keep their identity: `affected_paths` is never defaulted onto stored input, so their `spec_hash` and `plan_fingerprint` are byte-identical (pinned against the three live examples) and they still close at $0. `spec_delta` reports the appearance of the key itself, because "stored before the field existed" and "changes no files" are different claims. No grace mechanism for the 31 open waves — already disclosed to the owner. Co-authored-by: Ouroboros <311266734+ouroboros-agent@users.noreply.github.com> |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| run_live_lanes.py | ||
| scenarios.py | ||
| stub_lane.py | ||
| ui_probe.py | ||