Agent/kernel primitives only - #134
Draft
dollspace-gay wants to merge 85 commits into
Draft
Conversation
DESIGN SOURCES THIS ITERATION:
- .design/build/kernel-primitives.md (Modules, packages, and receipts) —
"one canonical package manifest with package identity and explicit roots",
"a complete transitive `.th` source closure", "Package support must not be
implemented by concatenating files without preserving source identity and
diagnostic spans", "Other source-oriented Forge commands remain single-file
and are the remaining package integration work."
- .design/reqs/registry.toml REQ-KPRIM-3 — "Extend the remaining
source-oriented Forge commands (check, audit, TV, goal/edit/fill) to
operate on packages without losing module-local diagnostics."
- goal.md (R-CHAR-3, R-CITE-2b)
- reference: stdlib/kernel-primitives/{ownership,atomics,collections}.thpkg.json
DIVERGENCE PINNED:
thermite_package::load is consumed only by forge/src/verified_build.rs. The
eight commands REQ-KPRIM-3 names read their argument with
std::fs::read_to_string and lex it as Thermite source, so a canonical
.thpkg.json manifest dies on its opening brace.
VERIFICATION:
cargo test -p forge --test divergence_package_commands: 0 passed, 10 failed
cargo clippy -p forge --test divergence_package_commands -- -D warnings: PASS
cargo fmt -p forge --check: PASS
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
forge/tests/divergence_registry_v4_matrix.rs pins three divergences from
the kernel-primitives authority chain:
1. Registry v1 (same_crate) admits a `fx platform(atomic)` boundary whose
registry row self-declares `"concurrency": "sequential"`, binds it to a
safe `{ value }` direct-Verus body, and publishes assurance=L3 /
scope=end_to_end / `L3-direct-refinement` with 0 residual machine
assumptions. `.design/build/frozen-primitive-registry.md` §"Schema v3"
states a machine crossing "is never laundered into an end-to-end L3
artifact".
2. The same laundering through the v2 `separate_verus_crate` linkage, which
`.design/build/platform-primitives.md` §"Consumer refinement rule" says
"must reject them rather than laundering their contracts through a safe
Rust model".
3. No tracked frozen-primitive registry fixture exercises the
`shared_borrow` / `consume_sealed` / `mint_sealed` ownership arms that
`.design/build/frozen-primitive-registry.md` §"Schema v1" freezes, even
though 62 of the 74 tracked platform machine doors carry a sealed
parameter or result and 22 take a shared borrow. The
`.design/build/kernel-primitives.md` §"Acceptance matrix" synthetic
test-platform bullet is therefore unrealized.
Tests only; no production file is modified. Crosslink issue creation is
currently blocked by the pending hub-v3 migration, so the failing tests are
the tracking artifact.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
DESIGN SOURCES THIS ITERATION:
- .design/build/fixed-collections.md "Remaining collection closure" —
"4. quantified framing and equality for aggregate collection states;
5. quantified aggregate body TV and strict aggregate receipt/runtime
fixtures;"
- .design/build/fixed-collections.md "Fixed bitset" — "Generic capacities
and a quantified all-indices public contract remain future work."
- .design/build/kernel-primitives.md "Fixed-collection package" — "Full
collection exports remain gated by quantified aggregate-state framing and
dedicated aggregate receipt/runtime coverage."
- .design/build/kernel-primitives.md "Completion rule" — L3-or-L4 floor
- .design/build/aggregate-array-relations.md "Validation" — the shipped
relation family requires named-array operands
- reference: stdlib/kernel-primitives/collections/bitmap.th,
stdlib/kernel-primitives/collections.thpkg.json
DIVERGENCES PINNED (both #[ignore]d; crosslink writes refused by the legacy
v2 hub layout, so authority is carried inline):
- item 4: a quantified all-index frame and equality over the FixedBitmap256
collection state certify at L0 "postcondition not satisfied" instead of
the design's L3 floor. Owning crates: thermite-lower (`lower_inv_expr`
knows only `array_eq`/`array_same_except`/`array_same_except_two`) and
thermite-spec (`check_array_relation_call` requires `Type::Array`
operands).
- item 5: `forge build --export fixed_ring_push` is refused at the `exports`
stage — "export `fixed_ring_push` has a type outside the verified public
Rust ABI" — so no strict aggregate-rooted collection receipt exists.
Owning crate: forge (`plan_exports` / `supported_public_return_type`).
VERIFICATION:
cargo test -p forge --test divergence_aggregate_collection_state
-- --ignored: 2 failed (both fail for the pinned reason)
cargo test -p forge --test divergence_aggregate_collection_state:
0 failed, 2 ignored
cargo clippy -p forge --test divergence_aggregate_collection_state: PASS
rustfmt --check: PASS
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
DESIGN SOURCES THIS ITERATION:
- goal.md (R-SPEC-1 "one way to do everything", R-SPEC-4, R-DEFER-2,
R-CITE-2b, R-TONE-1)
- .design/build/fixed-collections.md "Fixed bitset" — "Generic capacities
and a quantified all-indices public contract remain future work."
- .design/build/fixed-collections.md "Assurance and adversarial evidence" —
"Quantified all-index aggregate-state framing remains open"
- .design/build/kernel-primitives.md "Fixed-collection package" — "Full
collection exports remain gated by quantified aggregate-state framing"
- .design/build/aggregate-array-relations.md "Validation" — the shipped
family requires named-array operands
- reference: stdlib/kernel-primitives/collections/{bitmap,ring,open_map,
slab}.th, forge/tests/divergence_aggregate_collection_state.rs
SURFACE DEFINED (specification ahead of implementation):
- `#[logical(bound = "CONST", observe = "spec_fn")]` declares a struct's
logical index space `0 <= i < bound` and its one-index observer.
- `.logical_eq(other)`, `.logical_same_except(other, except)`, and
`.logical_same_except_two(other, first, second)` mirror the three storage
relations over that space. Typing is disjoint: a `[T; N]` receiver takes
the `array_*` family, a `#[logical]` struct receiver takes `logical_*`.
- `left.logical_same_except(right, except)` is true exactly when, for every
`i: usize` with `i < C` and `i != except`, `obs(&left, i) == obs(&right, i)`.
Out-of-bounds and equal-exception conventions match the storage family.
FAIL-CLOSED: sealed receivers, recursive receivers, duplicate declarations,
unresolvable/non-`usize`/oversized bounds, inadmissible observer results,
enums, key-addressed views, non-path operands, mismatched nominal operands,
executable positions, and a frame relation over a derived-index observer all
fail before lowering.
DISCHARGEABILITY: lowering emits one first-order `forall` per relation with
frozen observer triggers, replacing the depth-256 recursive encoding that
certifies L0. `logical_eq` closes by congruence from field value equality for
any observer. The frames close by congruence plus one instantiation when the
observer is index-transparent. A packed observer's frames need Euclidean
literal-divisor facts and a proof-position bit-preservation witness that the
lowerer does not emit; that is REQ-AGGREL-5, not this increment.
REQ STATUS:
- REQ-AGGREL-1 SHIPPED — `fn check_array_relation_call` in validator.rs;
consumer `fn lower_inv_expr` in lower.rs and collections/bitmap.th
- REQ-AGGREL-2 NOT-STARTED — open prereq blocker #131
- REQ-AGGREL-3 NOT-STARTED — open prereq blocker #131
- REQ-AGGREL-4 NOT-STARTED — open prereq blocker #131
- REQ-AGGREL-5 NOT-STARTED — open prereq blocker #132
VERIFICATION:
tooling/reqs check: 524 requirements, 126 views, clean (exit 0)
python3 tooling/req-status.py: clean, 0 rows (exit 0)
python3 tooling/doc-drift.py: .design/tooling/req-registry.md re-pinned to
dbfbe59c…; the 9 remaining DRIFT rows are identical at HEAD (verified in a
detached HEAD worktree) and come from other agents' commits to the
governed forge/thermite source files, so they are not re-pinned here.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
DESIGN SOURCES THIS ITERATION:
- .design/build/frozen-primitive-registry.md §"Source-derived minimum
machine class" — "A safe linkage, `same_crate` in v1 and
`separate_verus_crate` in v2, admits `e` only when `effective_class(e)`
is `sequential`." and "No atom maps to `sequential`."
- .design/build/kernel-primitives.md §"Sealed authority and platform
effects" — the closed twelve-atom platform effect family
- .design/build/sealed-atomics.md §"Registry and machine refinement" —
"Both therefore reject every entry whose concurrency is `atomic`,
`volatile`, or `privileged`."
- reference: conformance/verified-composition/frozen_primitive_registry.json,
conformance/verified-composition/machine_atomic_registry.json
WHAT CHANGED:
`fn plan_from_bytes` read `entry.concurrency`, a string the registry author
writes, so a registry spelling `"concurrency": "sequential"` over a
`fx platform(atomic)` door took the safe v1 or v2 path and published
assurance="L3", scope="end_to_end", residual_machine_assumptions=0.
`fn source_machine_class` now derives the class from the function's own
effect row through the total twelve-atom map, the gate takes
`source_class.max(declared_class)`, and a safe linkage admits only
`sequential`. The diagnostic names the Thermite function, the atom, and the
class. Machine linkage is held to the atomic class its v3 evidence models.
The map places `platform(clock)` at `volatile`, so the shipped v1/v2
synthetic primitive was a second instance of the same laundering. Its door
`fn platform_identity` in conformance/verified-composition/frozen_primitive.th
moves from `fx platform(clock)` to `fx pure`, the effect-row shape
`.design/build/frozen-primitive-registry.md` names as the safe-linkage
domain, and both registry fixtures carry the recomputed contract and effect
digests. The acceptance tests needed no change.
tooling/spec-discipline.py records reads under `stdlib/`. Routes already
declare stdlib references, and the recorder dropped those reads, so every
such route's gate was unsatisfiable.
REQ STATUS:
- REQ-KPRIM-11 SHIPPED — `fn source_machine_class` and the
`effective_class` gate in `fn plan_from_bytes`
(forge/src/verified_build/primitive_registry.rs); production consumer
`fn load_from_evidence` on every `forge build --primitive-registry` and
on validation and replay. Gate rule 4, recording the effective class in
the plan next to the declared concurrency, is a `PlannedPrimitiveEntryV1`
schema change in verified_build.rs and stays open; it is named in the
doc's Remaining work.
VERIFICATION:
cargo test -p forge --bin forge primitive_registry: 8 passed, 0 failed
cargo test -p forge --test divergence_registry_v4_matrix: 2 passed,
1 failed — the pinned laundering pair passes;
`divergence_no_registry_fixture_exercises_the_sealed_ownership_transition`
is a separate unfixed divergence and stays red
cargo test -p forge --test verified_composition: 5 passed, 0 failed
cargo test -p forge --test platform_primitives: 1 passed, 0 failed
cargo fmt --all --check: PASS
cargo clippy -p forge --all-targets: 0 warnings in forge
CONCURRENT TREE STATE:
Another agent holds uncommitted work in forge/src (body_tv, build, check,
cli, goal_repl, thermite_package), thermite-syntax, and thermite-spec.
`cargo test -p forge` therefore reports failures outside this change:
body_tv::divergent_teeth::dependency_reference_grounds_bounded_arithmetic_results,
four fixed_* mutation-count assertions, and a large verified_build set whose
cause is `target/debug/forge (deleted)` while a concurrent cargo rebuilds
the binary mid-replay. Only divergence_registry_v4_matrix.rs and
verified_composition.rs reach the registry code path; both are accounted
for above. .design/reqs/registry.toml, .design/reqs/status.md, and
.design/build/kernel-primitives.md carry the REQ-KPRIM-11 flip in the
working tree and are held out of this commit because they also carry that
agent's staged REQ-KPRIM-3 edits.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
DESIGN SOURCES THIS ITERATION:
- goal.md
- .design/build/kernel-primitives.md §"Acceptance matrix" — "Compose a
synthetic test platform whose bodies are tiny direct-Verus adapters. This
exercises the registry/refinement machinery without booting or implementing
a kernel."
- .design/build/frozen-primitive-registry.md §"Schema v1" (parameter and
result ownership), §"Source-derived minimum machine class" (a door whose
effect row carries no platform atom reaches sequential), §Acceptance
- reference: conformance/verified-composition/frozen_primitive_registry.json
- mirrored declarations: stdlib/kernel-primitives/platform/api.th
(fn raw_address_from_region, fn raw_address_advance)
REQ STATUS:
- REQ-KPRIM-7 SHIPPED (synthetic test platform) —
conformance/verified-composition/synthetic_platform.th declares sealed
SynRegion/SynAddress and the fx pure doors fn syn_address_from_region and
fn syn_address_advance; synthetic_platform_shell.rs supplies their
direct-Verus adapters; synthetic_platform_registry.json binds them through
same_crate linkage. Consumer: fn syn_platform_observation reaches both doors
from one composition root.
- REQ-KPRIM-11 SHIPPED — unchanged; the synthetic doors carry no platform
atom, so the source-derived class gate admits them at sequential.
VERIFICATION:
cargo test -p forge --test verified_composition: 6 passed, 0 failed
cargo test -p forge --test divergence_registry_v4_matrix: 3 passed, 0 failed
cargo test -p forge --bins primitive_registry: 9 passed, 0 failed
ownership vocabulary reaching the frozen plan:
shared_borrow, consume_sealed, mint_sealed, by_value
bundle: assurance L3, scope end_to_end, 2 reachable primitives,
6 discharged refinement obligations, 0 residual machine assumptions
tooling/primitive-only-gate.py: exit 0 (tracked=828, pinned_fixtures=2)
tooling/doc-drift.py at this commit: 0 drifted docs
tooling/reqs check: clean; tooling/req-status.py: clean
cargo clippy -p forge --all-targets -- -D warnings: PASS
cargo fmt --all --check: PASS
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
DESIGN SOURCES THIS ITERATION:
- .design/build/aggregate-array-relations.md (5 REQs) — "Declaring a
logical view", "Surface", "Meaning", "Index-transparency", "Admitted
shapes and fail-closed boundary", "Lowering the relation", "What makes
the form dischargeable"
- .design/build/fixed-collections.md — "Remaining collection closure"
items 4 and 5; "Fixed bitset"; "Fixed FIFO ring"
- reference: stdlib/kernel-primitives/collections/{bitmap,ring}.th,
conformance/verified-build/aggregate_array_relations.th
REQ STATUS:
- REQ-AGGREL-2 SHIPPED — `fn parse_logical_body` in parser.rs reads
`#[logical(bound, observe)]` onto `StructItem::logical`;
`pub fn logical_views` in validator.rs resolves and admits it;
consumer `pub fn logical_relation_defs_for_program` in lower.rs
- REQ-AGGREL-3 SHIPPED — `fn check_logical_relation_call` in validator.rs;
consumer `pub fn validate`, the gate lowering and forge call
- REQ-AGGREL-4 NOT-STARTED — open prereq blocker #131. The three per-view
`forall`s and both method-name arms landed; TV index-space derivation,
L1 bounded-loop evaluation, and the observer's weave into a checked
`spec fn` sub-program remain
- REQ-AGGREL-5 NOT-STARTED — open prereq blocker #132; frames over a
derived-index observer are refused before lowering
VERIFICATION:
cargo test -p thermite-syntax: 8 new passed (127 total), 0 failed
cargo test -p thermite-spec: 15 new passed (110 total), 0 failed
cargo test -p thermite-lower: 6 new passed (177 total), 0 failed
forge --test divergence_aggregate_collection_state: 2 passed,
2 named red pins (github #132; REQ-KPRIM-2 item 5)
cargo test --workspace: no new failure outside those two pins
cargo clippy --workspace --all-targets -D warnings: PASS
cargo fmt --all --check: PASS
doc-drift / reqs check / req-status / primitive-only: PASS
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
DESIGN SOURCES THIS ITERATION:
- .design/build/static-storage.md — "Translation validation": the
annotated bounded integer type is propagated "through every `if` and
`match` result arm" and bare literals are cast "at the leaves"
- .design/verified/exec-tv.md (5 REQs) — REQ-2, the exec-fn-wrapped
obligation and its enclosing `requires`
- .design/build/adt-match-lifecycle.md — "Contract, exec, and body
ownership"; .design/build/owned-aggregate-lifecycle.md,
named-record-lifecycle.md, mutable-call-effects.md,
aggregate-array-relations.md, kernel-primitives.md (the other docs
governing forge/src/exec_tv.rs)
- reference: stdlib/kernel-primitives/storage/static_storage.th,
conformance/sum.th, conformance/verified-build/{aggregate_storage,
aggregate_array_relations,named_record_lifecycle,
owned_aggregate_lifecycle,mutable_call_effect}.th,
conformance/verified-composition/probe.th
`ExecEnv::bind_local_relation` hoisted a typed `let` into a `requires`
equation and cast the whole right-hand side, so a conditional initializer
reached Verus with untyped branch literals:
requires (reason == (if (capacity == 0) { 1 } else { ... }) as u8),
Verus aborted the obligation with `error[E0283]: type annotations needed
... cannot infer type of the type parameter
hint_please_add_suffix_on_literal_like_100u32_or_100int_or_100nat declared
on the function spec_literal_integer`, and the exec-TV row
`static_storage_claim_reason.tail` came out divergent, rejecting the
static-storage package at stage `translation-validation`. The declared
type now descends into every branch result:
requires (reason == (if (capacity == 0) { (1) as u8 } else { ... })),
Casting each branch result denotes the same value as casting the whole
conditional, so the recorded equation keeps its meaning. `Expr::If` is the
one branching value node the exec reference encoder admits; `Expr::Match`
stays an honest `Unsupported` and records no equation.
REQ STATUS:
- REQ-TV-EXEC-FORGE-PLUGIN SHIPPED — `fn bounded_local_reference` in
forge/src/exec_tv.rs; consumer `ExecEnv::bind_local_relation`, reached
from `fn exec_tv_fn` and `pub fn exec_tv_file`
VERIFICATION:
cargo test -p forge --test static_storage_primitives: 1 passed, 0 failed
(the pinned divergence; failing before this commit)
cargo test -p forge --bin forge: 553 passed, 0 failed
cargo test -p forge --test exec_tv_conformance: 8 passed, 0 failed
cargo test -p forge --test body_tv: 28 passed, 0 failed
cargo test -p thermite-tv: 166 passed, 0 failed
cargo test -p forge --test verified_build: 22 passed, 2 failed
(owned/nested aggregate pipeline; both reproduce byte-identically at
clean HEAD in a detached worktree — pre-existing, not this change)
cargo test -p forge --test synchronization_primitives: 1 failed
(epoch-ack mutation total 97/101 against an expected 96/100; also
reproduces at clean HEAD — pre-existing, a different cause)
cargo clippy -p forge -p thermite-tv --all-targets -D warnings: PASS
cargo fmt --all --check: PASS
doc-drift: PASS (7 docs governing forge/src/exec_tv.rs re-pinned)
tooling/reqs check: 529 requirements, 126 views clean
python3 tooling/req-status.py: clean
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
DESIGN SOURCES THIS ITERATION:
- .design/build/mutable-call-effects.md — Decision: the separate path
admits a bodyful pure callee with finite named-record value formals
"when a direct call actually consumes a logical record overlay";
"Production and expression fidelity": the body-owned rule applies
"because an isolated expression frame has no caller lifecycle overlay
from which to build the actual native record", while "surrounding pure
initializers and the tail retain their normal exec-TV rows"
- .design/build/owned-aggregate-lifecycle.md — "Frozen source surface"
states this composition verbatim (`open_then_replace` calling
`replace_generation(initial, next)`); acceptance item 4 requires "a
caller composes through an independently generated pure value-callee
specification"
- .design/verified/exec-tv.md (5 REQs) — REQ-5, the four-way
Faithful/Divergent/Unverifiable/Skipped report over each body's exprs
- .design/build/adt-match-lifecycle.md, named-record-lifecycle.md,
aggregate-array-relations.md, kernel-primitives.md (the other docs
governing forge/src/exec_tv.rs)
- reference: conformance/verified-build/owned_aggregate_lifecycle.th,
nested_aggregate_lifecycle.th, record_after_indexed_call_effect.th,
named_record_lifecycle.th, aggregate_array_relations.th,
aggregate_storage.th, conformance/sum.th,
conformance/verified-composition/probe.th
`is_direct_record_value_call` routed a call to body TV whenever the callee
took any admitted finite record by value, so `owned_state_pipeline` lost two
exec rows with no skip and no diagnostic:
let advanced: OwnedState = owned_state_mix_generation(initial, next);
owned_state_mix_second(advanced, replacement)
The bundle carried `exec:owned_state_pipeline.let#1` and
`wrapper_guard:owned_state_pipeline.export_guard` and nothing for `let#2` or
`tail`. `expected_tv_inventory` consulted the same predicate, so the strict
inventory check agreed with the omission and the build published.
`nested_state_pipeline.tail` vanished the same way.
The design scopes the handoff to a call that consumes a logical record
overlay: the caller holds a record reaching a native fixed array as a
complete sequence, and the isolated frame cannot rebuild the native record
from it. The predicate now asks that question of the record, walking nested
record fields and tuple components to a fixed-array leaf and recording the
names it has entered so a declaration cycle terminates:
matches!(¶meter.ty, Type::Named(type_name)
if admitted.contains(type_name)
&& record_reaches_sequence_leaf(program, type_name))
`OwnedState` and `NestedState` reach no fixed array, so the exec frame binds
them as ordinary native parameters and both rows return, discharged faithful
against the callee's independently generated `when_used_as_spec` reference.
`RecordAfterIndexedBank` carries `slots: [u64; 2]`, so
`record_after_indexed_observe_snapshot.let#3` stays body-owned and that
fixture's 141 rows are unchanged.
REQ STATUS:
- REQ-TV-EXEC-FORGE-PLUGIN SHIPPED — `fn record_reaches_sequence_leaf` in
forge/src/exec_tv.rs; consumer `fn is_direct_record_value_call`, reached
from `fn exec_tv_fn`, `pub fn exec_tv_file`, and
`fn expected_tv_inventory` in forge/src/verified_build.rs
VERIFICATION:
cargo test -p forge --test verified_build: 24 passed, 0 failed
(owned_aggregate_pipeline and nested_aggregate_pipeline both failing
before this commit; one cause, both green)
cargo test -p forge --bin forge: 554 passed, 0 failed
cargo test -p forge --test exec_tv_conformance: 8 passed, 0 failed
cargo test -p forge --test body_tv: 28 passed, 0 failed
cargo test -p forge --test contract_tv_conformance: 9 passed, 0 failed
cargo test -p forge --test verified_composition: 6 passed, 0 failed
cargo test -p thermite-tv: 166 passed, 0 failed
cargo test -p forge --test fixed_collections: 1 passed, 0 failed
cargo test -p forge --test fixed_slab: 1 passed, 0 failed
cargo test -p forge --test fixed_freelist: 1 passed, 0 failed
cargo test -p forge --test fixed_intrusive: 1 passed, 0 failed
cargo test -p forge --test ownership_primitives: 1 passed, 0 failed
cargo test -p forge --test static_storage_primitives: 1 passed, 0 failed
cargo test -p forge --test platform_primitives: 1 passed, 0 failed
cargo test -p forge --test synchronization_primitives: 1 failed
(mpsc mutation total 100/120 against an expected 100/119; reproduces
byte-identically at clean HEAD in a detached worktree, an in-flight
mutation pin, a different cause)
cargo clippy -p forge -p thermite-tv --all-targets -D warnings: PASS
cargo fmt --all --check: PASS
doc-drift: PASS (7 docs governing forge/src/exec_tv.rs re-pinned)
tooling/reqs check: 529 requirements, 126 views clean
python3 tooling/req-status.py: clean
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.