Skip to content

Follow-up: tighten process algebra authorities - #2809

Merged
briansrls merged 9 commits into
mainfrom
fix/process-algebra-timestamp-authority
May 13, 2026
Merged

briansrls merged 9 commits into
mainfrom
fix/process-algebra-timestamp-authority

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Summary

  • remove duplicate event timestamp authority from Attestation; ProcessEvent.timestamp remains the single event time coordinate
  • replace staged List<ProcessNodeEntry> graph rows with Map<ProcessNodeId, ProcessNodeFacts> using the existing std keyed carrier
  • drop the now-unneeded ProcessNodeEntry scaffold

Test plan

  • cargo test -p v3-compiler handwritten_parser_accepts_process_algebra_dag -- --nocapture

Context

Follow-up for post-merge PR #2779 review relays that arrived after #2779 was squash-merged.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: openai-pro / gpt-5-5-pro
  • Commit: 3a32e872 · Trigger: manual
  • Comparison: main @ 41ecece9 ... fix/process-algebra-timestamp-authority @ 3a32e872
  • Conversation: View conversation

1. Story of the diff

This PR tightens std.process_algebra by moving two facts back to their natural authorities. First, Attestation no longer owns event time: the new comment says event time belongs to ProcessEvent.timestamp, while Attestation remains only the staged human/process intent carrier for author, text, and evidence (dsl/std/process_algebra.dag:76-78). Second, process-node identity stops being a sibling field inside a list row; ProcessGraph.nodes is now keyed directly as Map<ProcessNodeId, ProcessNodeFacts> (dsl/std/process_algebra.dag:32, dsl/std/process_algebra.dag:309-312, dsl/std/process_algebra.dag:322). Net effect: the PR deletes the temporary ProcessNodeEntry { id, facts } carrier and makes the graph key, not a record field, the identity authority.

2. Invariant categories

  1. LAYER MODEL — Compliant. This touches the modeled std surface, not Rust implementation code, and it uses an existing Map type rather than introducing a new substrate connective or behavior (dsl/std/process_algebra.dag:32, dsl/std/process_algebra.dag:322). The model also keeps identity outside ProcessNodeFacts, matching the stated rule that facts should not treat ProcessNodeId as another mutable sibling field (dsl/std/process_algebra.dag:309-312).
  2. INVARIANTS.md + modeling-discipline.md — Compliant. Boundary discipline / single-authority metadata is strengthened: event time is explicitly assigned to ProcessEvent.timestamp (dsl/std/process_algebra.dag:78), and graph identity is assigned to the ProcessGraph.nodes map key rather than duplicated in each facts row (dsl/std/process_algebra.dag:309-312, dsl/std/process_algebra.dag:322). That aligns with the project principles that every fact lives in exactly one authoritative place and that duplicate metadata is a modeling violation. chatgpt-review-6ed90a63-a42b-40…

chatgpt-review-d1fbd2c3-dc3e-46…

  1. CODING.md — N/A. The diff contains no Rust implementation, helper functions, method surfaces, error/result shapes, or hidden-state changes; it is .dag model authority only.
  2. TESTING.md — N/A. The diff does not add executable behavior or a regression-fix path that needs a new focused test; it is a structural authority cleanup in dsl/std/process_algebra.dag. I would not ask for a Rust test here, especially given the project’s trajectory toward .dag-native tests and zero residual hand-authored Rust tests. chatgpt-review-0c5fc1b0-41a1-40…
  3. LOCKED DESIGN DECISIONS — N/A. I do not see the diff altering a locked design target such as the six type connectives, five behaviors, Pure Bootstrap floor, or target-emission split; it stays within existing modeled type vocabulary by importing and using Map (dsl/std/process_algebra.dag:32, dsl/std/process_algebra.dag:322).
  4. TRACKED vs UNTRACKED DEBT — Compliant. The PR removes one staged scaffold rather than adding one: ProcessNodeEntry dissolves into the shared keyed carrier shape via ProcessGraph.nodes: Map<ProcessNodeId, ProcessNodeFacts> (dsl/std/process_algebra.dag:322). The remaining staged Attestation record still has a bounded dissolution trigger, and that trigger is now narrower because timestamp is no longer part of the handwritten payload (dsl/std/process_algebra.dag:76-78).

2.5. Top-down PM intent review

Compliant. The high-level PM intent is preserved: process algebra should be a modeled authority surface where facts are not split across parallel carriers. This diff moves in that direction by making event time single-authority through ProcessEvent.timestamp (dsl/std/process_algebra.dag:78) and by replacing list-entry identity duplication with a keyed graph map (dsl/std/process_algebra.dag:309-312, dsl/std/process_algebra.dag:322). I do not see semantic dilution of the thesis direction—no must-have target is deferred, no permanent scaffold is introduced, and no hand-written implementation is added where .dag data should be authoritative. The thesis and invariants emphasize no dual representations and one authoritative place for facts; this PR is consistent with that intent. chatgpt-review-53336e0e-d5ce-4b…

chatgpt-review-6ed90a63-a42b-40…

3. Verdict

APPROVE. The diff is a focused authority-tightening change: it removes duplicate timestamp ownership from Attestation and dissolves the temporary node-entry carrier into a keyed map. I found no diff-cited invariant violation and no test or PM-intent gap worth blocking.

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Review metadata

  • Provider / model: codex / unknown
  • Commit: 3a32e872 · Trigger: schedule
  • Thinking: 147s wall

Non-blocking — Strengths

  • dsl/std/process_algebra.dag Removing Attestation.timestamp and replacing the keyed entry scaffold with Map<ProcessNodeId, ProcessNodeFacts> tightens single authority for event time and node identity.

✅ No blocking concerns; the PR is a clean process-algebra authority tightening.

@briansrls

Copy link
Copy Markdown
Contributor Author

Verified dashboard cursor review 10621 on current head acd6fb8e. It is non-actionable: the artifact reports Findings: None and Verdict: APPROVE; its optional note about later prose cleanup in docs/design-decomposition-algebra.md is explicitly outside this diff and not a formal violation. Dashboard parsed that artifact as UNKNOWN, so I am treating it as non-blocking but not merge credit. I will not merge until dashboard readiness shows two distinct parseable approvals, no request-changes, clean mergeability, and green checks. — sent from witty-hawk-471

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Review metadata

  • Provider / model: codex / unknown
  • Commit: 87e946be · Trigger: schedule
  • Thinking: 95s wall

✅ The .dag-only process algebra change composes from the existing Map substrate and I found no blocking concerns.

@briansrls
briansrls merged commit 5bc6ad4 into main May 13, 2026
5 checks passed
@briansrls
briansrls deleted the fix/process-algebra-timestamp-authority branch May 13, 2026 02:04
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