Skip to content

spec(port): port the external proposal origin unbound guard (Refs #8883) - #9912

Merged
1 commit merged into
Trinity-S-AI-DNA:masterfrom
dmitrii-f-t27:port/cr-chat-03-h
Oct 17, 2026
Merged

1 commit merged into
Trinity-S-AI-DNA:masterfrom
dmitrii-f-t27:port/cr-chat-03-h

Conversation

@dmitrii-f-t27

Copy link
Copy Markdown
Contributor

The eighth CR-CHAT-03 ring target (W3, tracker #8883, epic Trinity-S-AI-DNA/trios#1812): port of crates/trios-chat/rings/CR-CHAT-03/src/external_proposal_origin_unbound.rs (Wave-33, L-CHAT-3-epou, R-CHAT-11, RFC 9420 12.1.8.2/6.2).

An external proposal is authored outside the membership — by a declared external sender or a prospective new member — and carries its origin. The gate rejects: a phantom origin the group never declared, a kind the origin may not submit (new members may only Add and external-init per RFC 9420 12.1.8.2; Update is forbidden from every external origin), a cross-group or cross-epoch splice, a replayed (origin, proposal_id) pair, a non-canonical signature length, and the all-zero Ed25519 sentinel. Rules, in the original's fixed order:

  1. origin_signature length == 64 (Ed25519, RFC 8032 5.1.6),
  2. origin ∈ declared_external_origins,
  3. (origin, kind) ∈ permitted_kinds_for_origin,
  4. group_id == expected_group_id,
  5. proposal_epoch == current_epoch,
  6. (origin, proposal_id) ∉ used_external_proposals,
  7. origin_signature not all-zero.

Carried as the D5 verdict — all seven original error variants carry no payload, so the code is the whole verdict.

Adaptations (t27 conventions): proposal/view structs → flat parameters; the ExternalOrigin enum (one carrying variant) → kind enum + record holding the sender index (unread by the unit kinds); declared-origins and permitted-pairs vectors → slices of records; the used-proposals vector → slice of records holding the origin and the proposal identifier at its declared maximum capacity (255) with the length; the original's three contains probes answered by scans.

All 10 original EPOU tests transcribed with exact asserts (the canonical acceptance is the ExternalSender-Remove path, the only one permitted Remove), plus 6 helper tests and a full rule-order ladder stacking each earlier rule's violation on the later ones (17 total).

Checks (conventions 0-14): t27b test 17 passed 0 failed, 0 blockers; t27c test-report 17/17, 0 vacuous; gen-rust output compiles under rustc (0 'static str, 0 Vec<const); coverage Untested 0; ASCII only; seal saved, all hashes MATCH; ledger row added to docs/reports/t27b_expectations.json.

Refs #8883

…nity-S-AI-DNA#8883)

The eighth CR-CHAT-03 ring target (W3, L-CHAT-3-epou,
R-CHAT-11, RFC 9420 12.1.8.2/6.2): the external-proposal
origin rules, in the original's fixed order - the canonical
signature length (sixty-four), the origin declared by the
group, the kind permitted for that origin (new members may
only Add and external-init; Update is forbidden from every
external origin), the group agreement, the epoch agreement,
the fresh (origin, proposal) pair and the non-zero signature
sentinel - as the D5 verdict (all seven original variants
carry no payload, so the code is the whole verdict), the
original's rule order, and all ten EPOU tests transcribed
plus helper and rule-order tests.

The original's proposal and view structs become flat
parameters; the origin enum with one carrying variant
becomes a kind enum plus a record holding the sender index
(unread by the unit kinds); the declared-origins and
permitted-pairs vectors become slices of records, and the
used-proposals vector a slice of records holding the origin
and the proposal identifier at its declared maximum
capacity with the length - the original's three contains
probes answered by scans.

Checks (conventions 0-14): t27b test 17 passed 0 failed; t27c
test-report 17/17, 0 vacuous; gen-rust output compiles under rustc;
coverage Untested 0; ASCII only; seal saved, all hashes MATCH;
@dmitrii-f-t27

Copy link
Copy Markdown
Contributor Author

All required checks green (validate, check-linked-issue, parse-ratchet, t27b-native-linux, t27b-native-macos); cli-tri / duplicate-bodies / t27b-native-ratchet are the known non-required reds. Steward READY. Eighth CR-CHAT-03 target (8/47 T-PORT) — requesting owner merge when convenient, Refs #8883.

This was referenced Oct 17, 2026
@gHashTag
gHashTag enabled auto-merge (squash) October 17, 2026 18:14
@gHashTag
gHashTag disabled auto-merge October 17, 2026 18:42
@gHashTag gHashTag closed this pull request by merging all changes into Trinity-S-AI-DNA:master in 12f5af8 Oct 17, 2026
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