Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
af272c2
WIP: §10.0 worksheet: TestClaimRun generic preservation in v2 Rust em…
briansrls Jun 1, 2026
896bce4
WIP: §10.0 worksheet: TestClaimRun generic preservation in v2 Rust em…
briansrls Jun 1, 2026
1b08392
WIP: §10.0 worksheet: TestClaimRun generic preservation in v2 Rust em…
briansrls Jun 1, 2026
486d469
WIP: §10.0 worksheet: TestClaimRun generic preservation in v2 Rust em…
briansrls Jun 1, 2026
5b6c5f5
WIP: §10.0 worksheet: TestClaimRun generic preservation in v2 Rust em…
briansrls Jun 1, 2026
177123c
WIP: §10.0 worksheet: TestClaimRun generic preservation in v2 Rust em…
briansrls Jun 1, 2026
1f026e8
WIP: §10.0 worksheet: TestClaimRun generic preservation in v2 Rust em…
briansrls Jun 1, 2026
44d7900
WIP: §10.0 worksheet: TestClaimRun generic preservation in v2 Rust em…
briansrls Jun 1, 2026
7b3354d
Merge remote-tracking branch 'origin/main' into session/keen-dove-294
briansrls Jun 1, 2026
83a6aed
WIP: §10.0 worksheet: TestClaimRun generic preservation in v2 Rust em…
briansrls Jun 1, 2026
fcb0663
WIP: §10.0 worksheet: TestClaimRun generic preservation in v2 Rust em…
briansrls Jun 1, 2026
050ad1c
WIP: §10.0 worksheet: TestClaimRun generic preservation in v2 Rust em…
briansrls Jun 1, 2026
1ee8493
WIP: §10.0 worksheet: TestClaimRun generic preservation in v2 Rust em…
briansrls Jun 1, 2026
618c26c
Preserve applied generic spines structurally
briansrls Jun 1, 2026
4294891
WIP: §10.0 worksheet: TestClaimRun generic preservation in v2 Rust em…
briansrls Jun 1, 2026
4161a17
WIP: §10.0 worksheet: TestClaimRun generic preservation in v2 Rust em…
briansrls Jun 1, 2026
5fb8c8a
Merge remote-tracking branch 'origin/main' into session/keen-dove-294
briansrls Jun 1, 2026
04483f8
WIP: §10.0 worksheet: TestClaimRun generic preservation in v2 Rust em…
briansrls Jun 1, 2026
8628305
Preserve resolved generic param children
briansrls Jun 1, 2026
cf09922
WIP: Caretake #4182 TestClaimRun E0107 PR — hold/recheck after source…
briansrls Jun 1, 2026
0c87aa6
Merge remote-tracking branch 'origin/main' into session/nimble-crab-195
briansrls Jun 1, 2026
8f2c462
Classify source atom string fold state
briansrls Jun 1, 2026
9042f82
Merge remote-tracking branch 'origin/main' into session/nimble-crab-195
briansrls Jun 1, 2026
52cf6f5
WIP: Caretake #4182 TestClaimRun E0107 PR — hold/recheck after source…
briansrls Jun 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion dsl/gunbc/ci_github_actions_workflow.dag
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ data gunbc_ci_github_actions_workflow: Workflow = {
}, {
id: "affected",
name: none,
continue_on_error: true,
runner: SelfHosted { labels: ["self-hosted", "linux", "arm64"] },
steps: [RunStep {
name: Some { value: "Isolate toolchain dirs (srv1/srv2 shared-$HOME concurrent-rustup race)" },
Expand Down Expand Up @@ -179,7 +180,6 @@ data gunbc_ci_github_actions_workflow: Workflow = {
if_condition: Some { value: "github.event.pull_request.draft != true" },
strategy: none,
timeout_minutes: Some { value: 15 },
continue_on_error: true,
concurrency: none
}, {
id: "ci_floor",
Expand Down
106 changes: 82 additions & 24 deletions src/v4/std/target_model.dag
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,12 @@ import v4.std.node {
Instantiation,
Named,
Node,
NodeFold,
Positional,
Symbol,
TypeNode,
content_hash
content_hash,
fold_node
}
import v4.std.node_query { find_named_child, node_positional_child_targets }
import v4.std.logic { Bool }
Expand Down Expand Up @@ -219,37 +221,93 @@ fn source_atom_char_projection_from_node(source: Node) -> Optional<SourceAtomVal
}
}

// 🟡 gated — feature:free-monoid-node-projection — owner:Modeling DFS / std.algebra lane —
// dissolve-on: std.algebra exports a canonical `Node -> Optional<FreeMonoid<T>>` (or
// `Node -> Optional<String>`) projection over `free_monoid_type_node`'s encoded surface; replace
// this local encoded-node projection with that accessor. The local recursion is fail-closed and
// bounded to TS-ATOM-REALIZATION's String value-template bridge; forbidden: adding another
// FreeMonoid storage walker outside this receipt.
fn source_atom_string_projection_from_node(source: Node) -> Optional<SourceAtomValue> {
// 🟡 coproduct dissolution — local fold state for fail-closed encoded FreeMonoid<Char>
// projection; dissolve-on: std.algebra exports the canonical string/free-monoid projection
// named by the `free-monoid-node-projection` receipt below.
type SourceAtomStringProjectionFold

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.

BLOCKING: New substrate .dag coproduct SourceAtomStringProjectionFold has six variants but no required 🟢/🟡/🔴 classification tag, violating modeling-discipline Practices 4/9 and INVARIANTS P5.

= SourceAtomStringFoldInit
| SourceAtomStringFoldHeadSeen
| SourceAtomStringFoldTailSeen
| SourceAtomStringFoldChar
| SourceAtomStringFoldString
| SourceAtomStringFoldInvalid

fn source_atom_string_projection_fold_init(source: Node) -> SourceAtomStringProjectionFold {
match source.kind {
TypeNode { connective: Atom { identity: id } } =>
if id == free_monoid_variant_empty {
optional_present(source_atom_string(value: source))
SourceAtomStringFoldString
} else {
optional_absent()
match source_atom_char_projection_from_node(source: source) {
Present { value: _ } => SourceAtomStringFoldChar
Absent => SourceAtomStringFoldInvalid
}
}
TypeNode { connective: Conj } =>
match find_named_child(root: source, name: free_monoid_field_head) {
Accepted { value: head } =>
match find_named_child(root: source, name: free_monoid_field_tail) {
Accepted { value: tail } =>
match source_atom_char_projection_from_node(source: head) {
Present { value: _ } =>
match source_atom_string_projection_from_node(source: tail) {
Present { value: _ } => optional_present(source_atom_string(value: source))
Absent => optional_absent()
}
Absent => optional_absent()
}
Rejected { diagnostics: _ } => optional_absent()
if count(source.children) == 2 {
SourceAtomStringFoldInit
} else {
SourceAtomStringFoldInvalid
}
_ => SourceAtomStringFoldInvalid
}
}

fn source_atom_string_projection_fold_step(
acc: SourceAtomStringProjectionFold,
edge: Edge,
child: SourceAtomStringProjectionFold
) -> SourceAtomStringProjectionFold {
match acc {
SourceAtomStringFoldInvalid => SourceAtomStringFoldInvalid
SourceAtomStringFoldString => SourceAtomStringFoldInvalid
SourceAtomStringFoldChar => SourceAtomStringFoldInvalid
_ =>
match edge.label {
Named { name: ename } =>
if ename == free_monoid_field_head {
match child {
SourceAtomStringFoldChar =>
match acc {
SourceAtomStringFoldInit => SourceAtomStringFoldHeadSeen
SourceAtomStringFoldTailSeen => SourceAtomStringFoldString
_ => SourceAtomStringFoldInvalid
}
_ => SourceAtomStringFoldInvalid
}
} else if ename == free_monoid_field_tail {
match child {
SourceAtomStringFoldString =>
match acc {
SourceAtomStringFoldInit => SourceAtomStringFoldTailSeen
SourceAtomStringFoldHeadSeen => SourceAtomStringFoldString
_ => SourceAtomStringFoldInvalid
}
_ => SourceAtomStringFoldInvalid
}
} else {
SourceAtomStringFoldInvalid
}
Rejected { diagnostics: _ } => optional_absent()
_ => SourceAtomStringFoldInvalid
}
}
}

// 🟡 gated — feature:free-monoid-node-projection — owner:Modeling DFS / std.algebra lane —
// dissolve-on: std.algebra exports a canonical `Node -> Optional<FreeMonoid<T>>` (or
// `Node -> Optional<String>`) projection over `free_monoid_type_node`'s encoded surface; replace
// this local encoded-node projection with that accessor. The local recursion is fail-closed and
// bounded to TS-ATOM-REALIZATION's String value-template bridge; forbidden: adding another
// FreeMonoid storage walker outside this receipt.
fn source_atom_string_projection_from_node(source: Node) -> Optional<SourceAtomValue> {
match fold_node(
n: source,
algebra: NodeFold {
init: source_atom_string_projection_fold_init,
step: source_atom_string_projection_fold_step
}
) {
SourceAtomStringFoldString => optional_present(source_atom_string(value: source))
_ => optional_absent()
}
}
Expand Down
Loading