Skip to content

docs: participant history as a braid, with site-scoped settlement - #799

Merged
flyingrobots merged 7 commits into
mainfrom
docs/participant-history-as-a-braid
Oct 13, 2026
Merged

flyingrobots merged 7 commits into
mainfrom
docs/participant-history-as-a-braid

Conversation

@flyingrobots

@flyingrobots flyingrobots commented Oct 13, 2026 •

Copy link
Copy Markdown
Owner

What this adds

docs/architecture/participant-history-as-a-braid.md: an accepted design, not implemented, recording the owner's decision of 2026-10-13.

  • History from another participant is held as a strand in a braid. It is not merged on arrival.
  • Where it interferes with local history, the result is a recorded conflict on a bounded site.
  • A conflict must be settled before anything acts on the site it covers. Work on other sites continues, and a braid may stay plural elsewhere while its law allows.
  • Only the receiving authority settles, under its own law.

It refines continuum-transport.md, which already states what crosses the boundary and how an import is classified; this page does not restate that.

Vocabulary

The page says participant (the cross-project name is Kitten), receiving authority, and the four outcomes Derived, Plural, Conflict and Obstruction. It does not say "replica". Sources are cited as the origin of the terms and rules, not as evidence of implementation: Observer Geometry II (interference relation, use set, common frontier, suffix transport) and History Over State (the Kitten, the receiving authority's sole right to settle, the four-outcome algebra).

Current implementation section

Written from the code, not from memory. It states what exists (SettlementService compare, plan and settle for a local strand; export_suffix and import_suffix as classification only; braid events; per-tick footprint conflicts) and two gaps against the design:

  1. Settlement blocks by suffix: after the first conflict or plural entry, every later entry of the suffix is recorded as a conflict, whether or not it touches the same slots.
  2. An unsettled conflict stops nothing: no index of unsettled sites exists and the scheduler does not consult settlement results.

Checks

tests/docs/test_retired_component_refs.sh, test_knowledge_model.sh, test_documentation_model.sh and test_generated_rule_truth.sh pass locally. Prettier is not installed on this host, so hosted CI is the formatting check.

Not done

I read four sections of Observer Geometry II and the glossary and settlement lines of History Over State, not either work in full. The open-decisions section lists what the page leaves for the owner, including whether observed footprints (#716) are the trusted source for independence.

Refs #798.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Added an accepted, not-yet-implemented design for handling participant history as a braid, including how conflicts, plural outcomes, obstructions, and settlement are intended to work.
    • Documented current limitations, including that conflict artifacts do not block later ticks and that remote-strand weaving is not implemented.
    • Linked to the design from the architecture overview.

Record the owner decision of 2026-10-13. History from another participant is
held as a strand in a braid and is not merged on arrival. Interference leaves
a recorded conflict on a bounded site. A conflict must be settled before
anything acts on that site; work on other sites continues and a braid may stay
plural elsewhere while its law allows.

The page refines Continuum Transport, which already states what crosses the
boundary and how an import is classified. It uses the vocabulary of the
cross-project constitution (participant, receiving authority, four outcomes)
and cites Observer Geometry II for the interference relation.

Its current-implementation section states what exists: local strand
settlement, suffix classification without import execution, braid events and
per-tick footprint conflicts. It also states two gaps against the design:
settlement blocks by suffix rather than by site, and an unsettled conflict
stops nothing.

Refs #798.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 13, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-13T18:05:50.696429Z 25a5af3 New commits
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai

coderabbitai Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 50 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Repository: flyingrobots/echo/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 622a33f7-8ea4-4f81-84d6-08ac9b83c87a
📥 Commits

Reviewing files that changed from the base of the PR and between b8e2c02 and 25a5af3.

📒 Files selected for processing (1)
  • docs/architecture/participant-history-as-a-braid.md

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository: flyingrobots/echo/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 47233b01-f36c-4545-b74e-dc57f32fe89e
📥 Commits

Reviewing files that changed from the base of the PR and between a13e198 and b8e2c02.

📒 Files selected for processing (1)
  • docs/architecture/participant-history-as-a-braid.md

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

📝 Walkthrough

The pull request adds an accepted, unimplemented design for participant history as a braid. It documents proposed judging and settlement rules, unresolved design decisions, and current runtime behavior and limitations. The architecture index links to the design.

Changes: Participant history design

Layer / File(s) Summary
Design model and outcomes
docs/architecture/participant-history-as-a-braid.md, docs/README.md
The design defines its scope, terms, and four outcomes, and separates holding, judging, and applying. The architecture index links to the design.
Admission and settlement rules
docs/architecture/participant-history-as-a-braid.md
The design describes how ticks are judged across local history, how dependency-scoped barriers affect admission, and how settlement, authority, evidence, and determinism constrain outcomes.
Runtime behavior and open questions
docs/architecture/participant-history-as-a-braid.md
The document lists unresolved design decisions and describes current runtime behavior and limitations, including suffix settlement, conflict artifacts, import/export classification, and the absence of remote-strand weaving and network transport.

Priority: ⚪ Not assessed

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Other

Merge Risk: ⚪ Minimal · up to b8e2c

This PR adds an explicitly unimplemented design document and an index link without changing runtime behavior. No merge-blocking risk remains.

### Architecture Summary

Architecture risk: 🔵 Low · up to b8e2c

The change affects 1 system.

Changed systems: docs

Architecture concerns
No architecture-level concerns identified.

Review details

Systems and components

  • observed — docs (service) was modified; 2 changed files map to changed impact.

Before / after behavior

  • observed — Modified behavior in docs/README.md: Added a Current Architecture link to the accepted, not implemented participant-history-as-a-braid design.
  • observed — Modified behavior in docs/architecture/participant-history-as-a-braid.md: Adds the accepted, unimplemented design’s status and scope, defines participant/history terms and four outcomes, and separates holding, judging and applying; holding and judging leave application readings unchanged, while applying requires a witnessed commit.
  • observed — Modified behavior in docs/architecture/participant-history-as-a-braid.md: Defines judging from a common frontier and carrying ticks across local history: only non-interfering ticks whose meaning is preserved by law and evidence are Derived; interference yields Conflict or permitted Plural, and missing evidence or authority yields Obstruction. Specifies dependency-scoped barriers, holding dependent incoming ticks without treating their intended writes as barriers, rejudging them after settlement, and settlement outcomes’ effects on admission.
  • observed — Modified behavior in docs/architecture/participant-history-as-a-braid.md: Adds the design’s laws for justified admission, scoped barriers, settlement, determinism, trusted footprints and authority; illustrates these rules in a worked trace and records alternatives not chosen.
Pre-merge checks · Passed 5
Passed Passed checks (5 passed)
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title accurately identifies the main documentation change: participant history as a braid with site-scoped settlement.
Docstring Coverage Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

…braid page

Apply review notes the owner supplied.

Independent footprints make movement possible; they do not prove it. The law
and the evidence must also hold before the outcome is Derived.

A sender keeps authority over its own history. What it cannot do is decide the
outcome for another participant. The earlier wording, that a sender does not
settle its own history, was broader than the rule.

A settlement names the conflict it answers. Plural queues nothing for later
resolution. An obstruction names what was missing. Delivery, admission and
outcome are separate facts, and carriage grants no authority to settle.

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

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

Copy link
Copy Markdown

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: 409002b1fb

ℹ️ 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 CHANGELOG.md Outdated
Comment thread docs/architecture/participant-history-as-a-braid.md Outdated
Comment thread docs/architecture/participant-history-as-a-braid.md Outdated
Comment thread docs/architecture/participant-history-as-a-braid.md Outdated
Comment thread docs/architecture/participant-history-as-a-braid.md Outdated
Comment thread docs/architecture/participant-history-as-a-braid.md Outdated
Comment thread docs/architecture/participant-history-as-a-braid.md Outdated
Address seven review threads and an owner-supplied design review.

The site rule contradicted itself and could not be implemented. It refused
every tick that touched an unsettled site, which also refused the settlement
that answers the conflict. It said later incoming ticks were not carried,
which read as the suffix-wide blocking the design replaces. It said a
settlement releases the site, including one that ends in obstruction. It let
the intended writes of a refused tick enlarge the blocked site, so one
submission that claimed to write everywhere could stop a receiver.

The page now separates holding, judging and applying. A barrier refuses work
whose validated dependencies meet an unsettled site. Settlement passes it by a
path of its own. A held tick raises no barrier and is judged when the conflict
is settled. What a settlement does to the barrier depends on its result.

Also: the decision summary keeps the Plural outcome; interference is stated in
both directions and covers write-write and absence; the common frontier is a
set; a settlement planned on a basis that has moved is refused; determinism
names authority, evidence, law version and limits among its inputs; the first
law is limited to application readings. A worked trace is added. Decisions the
design still needs are listed, and the status line says the design is not yet
precise enough to implement.

Remove the changelog entry. CHANGELOG.md is for shipped behaviour.

Refs #798.

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

Copy link
Copy Markdown
Owner Author

Code Lawyer: activity summary

Head a13e198f. cc @codex for a second opinion on the reworked barrier rules.

# Sev Source Where Issue Outcome
1 P1 Codex Site rule Refusing every tick that touches an unsettled site also refused the settlement, so every conflict was permanent Fixed: settlement passes by its own narrow path
2 P1 Codex Site rule "Carries no later incoming tick" specified the suffix-wide blocking the design replaces Fixed: only ticks with validated dependence are held
3 P1 Owner review Site growth Intended writes of a refused tick enlarged the site, so one submission claiming to write everywhere could stop a receiver Fixed: a held tick raises no barrier; it is judged after settlement
4 P1 Codex, owner review Settlement "Releases the site" was unconditional, including for a settlement that ends in obstruction Fixed: release depends on the result (table)
5 P2 Owner review Model Holding, judging and applying were not distinguished Fixed: three named steps; only applying changes application readings
6 P2 Owner review Interference One-directional wording; write-write and absence not covered Fixed: both directions; write targets are in the use set; absence, ranges and membership named
7 P2 Codex, owner review Law: determinism Inputs omitted authority, evidence, law version and limits Fixed
8 P2 Owner review Frontier, staleness A single "latest" shared point was assumed; no rule for a basis that moves before commit Fixed: the frontier is a set; a stale settlement is refused and planned again
9 P2 Codex Decision Summary called every interference a conflict, erasing Plural Fixed
10 P3 Codex Law 1 "Any local reading" is false for braid membership readings Fixed: application readings
11 P3 Owner review Barrier "Everything outside the site is unaffected" was unconditional Fixed: a conditional promise; a global dependency can block global work, and must be explainable
12 P3 Codex CHANGELOG.md Entry advertised an unshipped design Removed
13 P4 Self Status line Said "Not implemented" only; the design also needs decisions before it can be implemented Fixed: status says so and links Open decisions

Added: a worked trace (interference, an independent later tick, a dependent later tick, a local write to a held tick's target, settlement, re-judging).

Design choices made in this rework that the owner should confirm. They follow from the review but were not stated by the owner:

  • A held incoming tick raises no barrier against local work; when the conflict is settled it is judged against the history of that moment.
  • A settlement whose basis has moved is refused and planned again (not revalidated in place).
  • Dependence of one incoming tick on another must come from validated causal evidence in the held strand, never from a footprint a sender merely claimed.

Left as open decisions on the page: footprint trust as a proof obligation (#716), what a footprint must record, overlapping conflicts, partial settlement, retries, accepting plurality with safe effects, the default plural law, delegation.

Deviations from the Code Lawyer procedure: one commit for the queue, not one per issue, because the findings overlap in the same sentences. No failing regression test per issue: this is a documentation change. Checks run instead: the four tests/docs scripts pass, and prettier@3 --check passes on the page and the index. Files were staged by name, not with git add -A.

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

Copy link
Copy Markdown

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: a13e198fa5

ℹ️ 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/architecture/participant-history-as-a-braid.md
Comment thread docs/architecture/participant-history-as-a-braid.md
Comment thread docs/architecture/participant-history-as-a-braid.md Outdated
… braid design

Address review. A tick that only deletes a slot in an unsettled site was not
refused, because delete targets are outside the use set. The settlement table
did not say what a settlement that itself ends in conflict does to the
barrier. The page calls the common frontier a set while the suffix bundle
names each frontier as one coordinate; state that gap and list it as an open
decision.

Refs #798.

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

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

Copy link
Copy Markdown

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: f741bfde66

ℹ️ 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/architecture/participant-history-as-a-braid.md Outdated
flyingrobots and others added 2 commits October 13, 2026 09:27
Address review. The page said every admission ends in one of four outcomes,
which left the Staged posture that suffix admission already returns outside
the design. Staged is history that is held and not yet judged; the four
outcomes are results of judging.

Refs #798.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… and that footprints are checked for completeness

Record three clarifications to the confirmed design choices. A barrier exists
from the moment a conflict is judged; holding raises none. A settlement
refused for a stale basis records that reason, and a new plan is a new
settlement with its own authorization. Authentic causal history does not
prove a footprint complete.

Refs #798.

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

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

Copy link
Copy Markdown

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: b8e2c02800

ℹ️ 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/architecture/participant-history-as-a-braid.md Outdated
Comment thread docs/architecture/participant-history-as-a-braid.md
Comment thread docs/architecture/participant-history-as-a-braid.md Outdated
Comment thread docs/architecture/participant-history-as-a-braid.md
Address review. Derived now requires that the tick interfere with no local
tick it is carried across, so one tick cannot be both Derived and in conflict.
Held history is retained while a claim or conflict depends on it; today a
strand is scoped to its session, and that gap is stated. An exact repeat of a
bundle is recognized by its identity, as Continuum Transport already requires;
only retries with new evidence stay open. The page states that an admission
response carries one outcome per bundle and lists a per-tick outcome artifact
as an open decision.

Refs #798.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@flyingrobots
flyingrobots merged commit ebb4c20 into main Oct 13, 2026
41 checks passed
@flyingrobots
flyingrobots deleted the docs/participant-history-as-a-braid branch October 13, 2026 18:05

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

Copy link
Copy Markdown

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: 25a5af3baa

ℹ️ 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 on lines +258 to +260
- **Retries with new evidence.** An exact repeat of a bundle is the same
question again: it is recognized by the bundle's identity, it weaves no
second member, and it returns the retained outcome.

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 Scope retry identity to the full admission question

When the same source bundle is proposed against another target worldline, target basis, or named law, it is not the same import question and may produce a different outcome. Fresh evidence in the current tree is that derive_causal_suffix_bundle_digest hashes only the source frontiers and suffix witness, while ImportSuffixRequest carries the target fields separately; therefore recognizing retries solely by bundle identity can return another target's retained outcome. Scope outcome reuse to the bundle plus the receiving basis/law posture, while retaining the bundle digest for shell equivalence and loop prevention.

AGENTS.md reference: AGENTS.md:L20-L28

Useful? React with 👍 / 👎.

Comment on lines +255 to +257
- **Outcomes for part of a bundle.** One bundle can hold ticks that end
Derived, in Conflict and Staged. The boundary needs an artifact that
reports an outcome for each.

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 Report outcomes per site rather than only per tick

When one incoming tick interferes at two disjoint sites, the receiving law can preserve the claims as Plural at one site while producing Conflict at the other. An artifact with only one outcome per tick still cannot encode both site-scoped judgments, so it would discard a lawful claim or barrier; define per-site results or an explicit deterministic aggregation rule instead of treating per-tick reporting as sufficient.

AGENTS.md reference: AGENTS.md:L20-L28

Useful? React with 👍 / 👎.

Comment on lines +68 to +72
2. **Judge.** The receiving authority carries each incoming tick across its
own history and records an outcome. Judging changes no reading of
application state. It can raise a barrier.
3. **Apply.** A Derived result becomes part of the receiving worldline only
through a witnessed commit on an explicit basis. Readings of application

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Emit Derived only after the commit succeeds

When the target frontier changes after Judge but before Apply, the explicit-basis commit can be refused, yet step 2 has already recorded a witnessed Derived outcome. AdmissionOutcomeKind::Derived denotes a result that was admitted, so this sequence can retain a success for an effect that never entered receiving history. Keep the pre-commit judgment as a nonfinal candidate posture and emit Derived only atomically with successful Apply, or make the two operations indivisible.

AGENTS.md reference: AGENTS.md:L48-L56

Useful? React with 👍 / 👎.

Comment on lines +63 to +67
as a member strand. Braid membership changes. No reading of application
state changes, and nothing becomes inadmissible. History that is held and
not yet judged is Staged. Held history and its evidence are retained for
as long as a claim or a conflict depends on them. They do not end with the
session that received them.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Gate holding on capability and retention budgets

When receiving untrusted remote suffixes, this Hold step unconditionally changes braid membership and promises durable retention before any judgment can obstruct the submission. A sender can therefore consume unbounded membership and evidence storage with oversized or repeatedly unique staged bundles; mentioning budgets only as later classification inputs does not protect the Hold itself. Require bounded-aperture, capability, and retention-budget admission before weaving, with a typed obstruction that leaves no membership when the gate fails.

AGENTS.md reference: AGENTS.md:L20-L28

Useful? React with 👍 / 👎.

Comment on lines +155 to +159
- A settlement is planned against a basis. If that basis has moved when the
settlement is committed, the commit is refused with an obstruction that
records the stale basis as its reason. A new plan is a new settlement and
needs its own authorization. An authorized settlement is never altered to
fit a basis it was not planned on.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Keep unrelated commits from invalidating settlement

When a conflict at X is planned and an admissible independent tick at Y commits before it, the receiving frontier moves, so this rule rejects the settlement even though Y cannot affect it. Allowed work outside the site can therefore invalidate every plan and starve settlement under sustained unrelated traffic, defeating the site-scoped barrier; revalidate only the settlement's named site dependencies, or pin/reserve its commit, rather than treating every frontier movement as stale.

AGENTS.md reference: AGENTS.md:L20-L28

Useful? React with 👍 / 👎.

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.

1 participant