This is a synthesized, agent-facing changelog for the full history of franken_engine.
Scope window: project inception on 2026-02-18 through HEAD
cf700313c
(2026-08-31). The dated post-snapshot sections below record the post-b1f5bc91c
work (lockstep differential, evidence freshness, lint debt); the original
“Current window (2026-07-26 → 2026-08-19)” section above is kept verbatim as
the historical record at that point. Base synthesis covered inception through
d51f2715
(2026-05-15). Dated post-snapshot sections below carry the later release
history forward, including the current window after
7ec31d156
(2026-07-25).
The base synthesis was rebuilt from git history (4,446 commits and no published releases at that snapshot), the checked-in beads tracker (.beads/issues.jsonl), the in-tree docs/CLAIM_TO_PROOF_MATRIX_V1.md claim ledger, and the contemporaneous workstream notes left in docs/ and runbooks/; the dated sections below carry the later release history forward.
The first conventional release, v0.1.0, was published on 2026-05-29. Current main also uses artifact-bundle versions for individual decision, benchmark, and replay claims; those schema versions remain independent of Cargo package semver.
The earlier current-window catch-up below covers
7ec31d156
(2026-07-25) through
b1f5bc91c
(2026-08-19): 513 non-merge commits. There is still only one GitHub Release
(v0.1.0).
The post-b1f5bc91c work documented in the dated section below adds the
lockstep comparator fix, evidence-freshness restoration, seven clippy lints
closed, three dead CLI placeholders wired, and two product mock seams
evicted. Cargo frankenengine-engine / frankenengine-core remain on
the unreleased 0.2.0 compatibility-staging line; that number is not a tag
and not a Release.
After the sibling-gating correction of 2026-07-25, the next month is the product-authority and evidence-honesty wave: host effects stop being ambient, generated code gets its own realm, IFC labels survive the heap, and the engine finally consumes published sibling crates instead of /dp path deps. HEAD is
b1f5bc91c
(2026-08-19).
- Checkout-independent sibling isolation (
bd-gw4cg). The nine FrankenSuite siblings that used to be/dppath deps now resolve from crates.io. CI gained a standalone-release lane that must compile without a sibling checkout. This is the follow-through on the 2026-07-25 claim correction:--no-default-featuresstill requires manifests to exist, but those manifests are now registry crates, not local trees. - Evidence freshness and split signing authority. Claim freshness became risk-weighted (drift signals, tiers, a schedule) and fail-closed at release. Live orchestrator batches seal as chained artifacts. Runtime vs Lab signing authority split; the ledger schema moved to v2. Generated
Functionobjects got a realm-owned store with content-addressed provenance and isolated globals (bd-fw7zd.8). - Execution cells, adaptive routing, timers. A sealed Tier-I cell is now the authority boundary for interpreter instruction use, host I/O, and process spawn. Adaptive routing v2 binds profile selection before dispatch, with a SafeMode and a state budget (
bd-wftp1). Timers run through two-phase cell authority and refuse until an interpreter event-loop is bound. - Module load, EventEmitter identity, RandomRead entropy.
ImportModuleandrequireshare onemodule_loadcapability key (bd-iyp3h).EventEmitteris a constructible identity with authenticatedinstanceofso cluster identity works (bd-dspwz). Cryptographic entropy is its ownRandomReadgrant, lowered through typed hostcalls (bd-opsnv). Process spawn gained sealed verified-file identity (bd-m5p8q) and stable NotFound discriminators (bd-x85a7.3).require('url')helpers lower behind a usage gate (bd-4awsz). - Prepared Hybrid eval and interpreter hot-path cuts. Hybrid
evalcompiles once and reuses immutable IR3. Ordinary own-property reads skip proxy/IFC scans; dense array growth/pop skip length scans; ephemeral traces hand off without cloning payloads. Differential-oracle reports are v2 with honest lifecycles. - Janitor docs-reorg (2026-08-19). Root reports moved under
docs/planning/; skill-loop scratch is untracked. See the janitor wave below.
bd-gw4cg, bd-fw7zd.8, bd-wftp1, bd-iyp3h, bd-dspwz, bd-opsnv, bd-m5p8q, bd-x85a7.1 / .3, bd-padqo, bd-ojvo1, bd-4awsz.
5a40110e5—build(deps): resolve the nine sibling crates from crates.io, not /dp paths (bd-gw4cg)3526cf9d4—ci: enforce checkout-independent standalone release61d4d7591—feat(evidence): make freshness actually risk-weighted -- drift signals, tiers, schedule (BRIDGE-19.18)dedd88284—feat(evidence): split Runtime vs Lab signing authority; ledger schema v2ad2d6f176—feat(engine): isolate generated-function realm globals and rotate identities57dbc1d08—feat(cell): seal a Tier-I interpreter and effect authority boundaryfd7c61e5e—feat(engine): harden adaptive routing v2 — budgeted state, staged learn (bd-wftp1)4c06e8402—feat(timer): run interpreter timers through a two-phase cell authority0e4e1c20e—feat(capability): gate ImportModule and require on one module_load key (bd-iyp3h)75cf4822d—feat(events): give EventEmitter a constructible identity and authenticated instanceof (bd-dspwz)050b77e2c—feat(crypto): lower authenticated entropy through typed RandomRead hostcalls (bd-opsnv)9781a7dd1—feat(eval): compile Hybrid eval once and reuse immutable IR317c7fb24c—feat(url): lower usage-gated require('url') helpers (bd-4awsz)
Post-Snapshot Update — Lockstep Differential, Evidence Freshness, and Lint-Debt Catch-up (2026-08-20 → 2026-08-31)
A focused catch-up window. The “Current window” section above stops at
2026-08-19; the dated entries below it (Janitor docs-reorg) cover the
2026-08-19 cleanup. The work in this new section runs from 2026-08-20 through
HEAD cf700313c
(2026-08-31). It is not a full multi-agent synthesis of the window — that
belongs in a separate Standard-Rebuild pass — but documents the work this
reality check drove end-to-end and the real findings it surfaced. For other
workstreams in the window (TLS bd-il0d9 family, IFC capture-origins
- Theme 6 — lockstep comparator + parser fix verified at
a694fba6d. The new post-b1f5bc91cwindow in this same section also drove (a) the multi-engine harness redesign so the lockstep differential reports real signal instead of a vacuous 8/8 spurious, and (b) the parser fix that closed the one real drift (script_await, top-level await in script goal). With both fixes in, the default 8-fixture lockstep reports 8/8 equivalent, 0 divergences (verified 2026-08-31 in a clean worktree ata694fba6d; binaryfranken_lockstep_runnerbuilt release with the pinned nightly-2026-08-25 toolchain; fixture setcrates/franken-engine/tests/fixtures/parser_phase0_semantic_fixtures.json). - Lockstep comparator made honest (
bd-lockstep-canonical-ast-divergence-zq6lo, resolved). Thefrankenctl test lockstepcommand, thefrankenctl oracledifferential, and theparser_multi_engine_harnessall share one equivalence comparator. Before this work the comparator was blind: the Node/Bun adapter scripts emittedsha256(normalize-newlines(source))and franken_canonical emitted a canonical-AST digest, and the signature grouped them by hash, so the default 8 fixtures reported 8/8 spurious critical divergences with zero real signal. The fix: adapters now do compile-onlyvm.Script/vm.SourceTextModulesyntax validation and emit a realparseverdict; the comparator groups onparse-verdict + diagnostic digest; AST digests are compared only within their ownAstSpace(internal = golden ↔ franken; external = source fingerprint). Once the parser fix ata694fba6dlanded, the default 8-fixture lockstep returns to 8/8 equivalent, 0 divergences (verified 2026-08-31 — see Theme 6). - Seven pre-existing
clippy -D warningsfailures closed (5cdea2e30). The AGENTS clippy gate was red repo-wide since7291545a5(2026-07-20): oneneedless_boolinfranken-core/src/ts_normalization.rs, plus five in the engine lib (field_reassign_with_default,type_complexity+ new alias,needless_range_loop,manual_is_multiple_of,chunks_exact→as_chunks, plus anotherneedless_bool), plus the deadCODE_UNSUPPORTED_PLACEHOLDER_COMMANDconstant orphaned by the placeholder-wiring work. All fixed with the clippy-suggested forms; no behavior change.cargo clippy --release -p frankenengine-engine --lib --bin frankenctl --bin franken_lockstep_runner -- -D warningswas green at the time of these fixes; the gate remains red today only because of an in-progress unclosed-delimiter edit incrates/franken-engine/src/lowering_pipeline.rs:43553from another agent — that is not a regression in any committed change. - All 13 OBSERVED claim receipts refreshed at HEAD (
9174376c0). After the work in the prior tranche, the receipt-freshness check went fromfresh=0/13(the original reality-check finding) tofresh=13/13, stale=0, drift clean. All three tiers re-verified end-to-end viarun_evidence_refresh_schedule.sh: volatile 6/6 (FE-CLAIM-001, 006, 007, 015, 022, 024), standard 5/5 (002, 003, 004, 013, 025), frozen 2/2 (008, 009). Each receipt'srepro.lockpartner is present; theclaim_to_proof_matrix_gate.sh cici-mode check is clean. - Three dead CLI placeholders wired to real implementations (
365e430fd).frankenctl reports lowering-gapnow callslowering_gap_inventory::write_lowering_gap_inventory_bundlein-process (full replay-shaped bundle, 7 sites, deterministic hash).frankenctl gates signature-driftdelegates to the canonicalfranken_signature_drift_gatebinary via a new exe-relative/PATH sibling resolver;--configis explicitly refused (the canonical gate has no config input).frankenctl test lockstepdelegates to the canonicalfranken_lockstep_runner;--configmaps to--runtime-specs. The oldfail_closed_placeholder_command+ its error code constant were removed (clean cutover). - Two product-code mock seams evicted.
HostcallMigrationAdapter::new()default stack is now console-only;fs:read/fs:writeeffects fail closed (capability-gated) until a handler is installed; tests installMockFsHandlerexplicitly with a new fail-closed regression test.get_platform_environmentno longer fabricates"test"/"1.75.0"; host platform is really captured via a newLinuxX64EnvCapture(plus shared rustc-verbose parser deduped across all three platform captures), and remote platforms carry explicit"unavailable"markers instead of plausible fakes. - Placeholder-closure contract references repaired. Both copies of
docs/rgc_placeholder_closure_verification_v1.jsonand the MD companion previously referenced fourrun_placeholder_*.shscripts that did not exist; now they point to the real zero-placeholder gate surfaces (run_rgc_zero_placeholder_gate.sh ciandfrankenctl gates zero-placeholder).
bd-franken-parser-top-level-await-script-sapi0(P1, parser team — fixed bya694fba6d"feat(parser): enforce ES2020 await context rules across goals and async functions"). The first genuine drift the lockstep differential surfaced: fixturescript_await— franken_canonical accepted top-levelawaitin a classicscriptgoal (parse: ok), while Node and Bun correctly rejected it (parse: syntax_error). Per ECMA-262, top-levelawaitis only valid at the top level of a module (sourceType: "module"); inscriptit is a SyntaxError. The bead records the reproduction command + per-engine parse verdicts for posterity; with the corrected parser the default 8-fixture lockstep should return to 8/8 equivalent once re-verified.- Pre-existing test failure recorded (
bd-circular-dep-test-preexisting-5x3hy, P3).algebraic_effects_integration::test_circular_dependency_detectionasserts an impossibleCircularDependencyfrom an emptyHandlerStack(its own TODO admits the mechanism became untestable whendependency_pathwent private). Verified present and unchanged at parent08aa44884; filed per the repo's pre-existing-failure convention (bd-ggxm8/bd-y9p6y/bd-3ltox/bd-xuluspattern). Not fixed here; correct fix requires either a test-visible constructor fordependency_pathor moving the test into the lib's#[cfg(test)]where the private field is reachable. - Toolchain env-blocker documented. The pinned nightly-2026-08-25 + PATH-pinned toolchain combination is what makes
cargo clippyandcargo buildwork cleanly in this environment; without PATH pinning, cargo's clippy invocation pulls the floating-nightlyclippy-driverwhich carries a metadata-version skew and produces false E0514 cross-version artifacts. The rch fleet preflight refuses all workers (hard_preflight=12) despiterch doctorreporting 32/32 checks pass — an operator-side disagreement to triage.rustup component add i686-unknown-linux-linux-muslis currently broken on the sharedstablechannel (Scrt1.oconflict) — unrelated to this repo; operator fix isrustup toolchain uninstall stable && reinstallor manual removal of the stale files.
bd-lockstep-canonical-ast-divergence-zq6lo (comparator artifact root-caused and fixed; the residual 1/8 divergence is the script_await parser question above, filed separately).
bd-cli-wiring-mock-seam-honesty-d3e9s (full evidence trail in the bead close reason; 5/6 command-line surfaces wired, 6 mock/contract fixes, all verified at commit 365e430fd).
bd-three-feature-floor-owner-2fjbh (the only remaining unowned vision item after BRIDGE-02.5 turned out to already own the weighted-denominator rerun).
bd-franken-parser-top-level-await-script-sapi0 (script_await parser over-permit fixed by a694fba6d; re-verification pending the lower_pipeline WIP build to clear).
365e430fd—feat(engine,cli): replace operator placeholders with sibling resolution and fail-closed env capture5cdea2e30—fix(lints): resolve 7 clippy -D warnings failures blocking the AGENTS clippy gate63d8b7594—feat(lockstep,harness): add compile-only syntax verdicts to Node/Bun adapters and multi-engine harnessf876ef1c8—test(lockstep,harness): update multi-engine harness and lockstep integration tests for parse verdicts9174376c0—chore(evidence): refresh all 13 OBSERVED claim receipts at current HEAD
Note. The remaining
lowering_pipeline.rs:43553unclosed delimiter is from another agent's uncommitted in-progress edit. The committed state at80c26bf0fbuilds clean (cargo check --libexit 0); only NEW test invocations that re-link the lib are affected. Not a regression of any change documented here.
A separate, agent-recorded catch-up of the work other teams drove in the same window. This is a research-led summary, not an independently-verified synthesis — bead close-reasons and commit messages were sampled for thematic clustering; specific behavior claims are owned by the originating beads. For a full Standard-Rebuild pass with link verification and a coverage ledger, this section is the index, not the audit.
The wave that began with the 2026-08-19 product-authority push (charter §2, charter §7) closed into five cross-cutting themes during this window: (1) live-Node / live-bun hardening of TLS, crypto, and child-process boundaries, (2) a third-pass IFC summarize / capture-origins / flow-shape wave, (3) shadow-daemon no-mock adoption + evidence-receipt execution layer, (4) bridge-2026 program decomposition, and (5) a wide reality-check defect cluster against the rewritten CLI/replay surface.
- Theme 1 — TLS, crypto, child-process, Zlib. Peer-certificate metadata
extractor with bounded X.509 DER parsing and Node-oracle fixtures
(
bd-il0d9:5ee847e10,46c8d93c3,cf3612917); RFC 6125 wildcard matching + root bundle + connect positional overloads (c7024687c); X.509 / IFC fix for TBSCertificate tag parsing + flow labels (08aa44884); Node-compatibleprocess.nextTickqueue without exposing raw process authority, required by stream fixture 0013 (bd-8nrud); P-256 ECDSA detached signing + DER verification- crypto.sign/verify lowering with IFC labels (
42bd30256,a25c259e4,f7e303e6b); ed25519 sign/verify + generateKeyPairSync via typedRandomReadentropy + asymmetric key-lifecycle contract + zeroization lifecycle verification (fff2c4f7e,7faab498c,5fd27394b,2c28f7113f); AES-256-GCM variable-IV transform with GHASH on decryption (dd251eba7,99e5edf06); ChildProcess lifecycle bridge with bounded stdin + process effect errors retaining partial stdout/stderr on timeout / I/O / provider limits (bd-m42c2,bd-k709s); brotli runtime dispatch + sync-family closed-input flow + zlib / Buffer.equals IFC summaries (edd93e42b,0cfb17480,ac689bc72,f4afa45d9,e9f929a4b,e2490c45d,856a61de5); pull-based Brotli reader to throw on corrupt decompress input (89b926d4f,a6c2aea8e,b5fd26175follow-up); brotli sync result → authenticated BufferObject classification (f4afa45d9).
- crypto.sign/verify lowering with IFC labels (
- Theme 2 — IFC summarize, capture-origins, flow shape.
bd-dign3partials 2-5 closed-result summaries fortoString/valueOf/ArrayBufferallocations / crypto metadata (58203b48f,e1362cf6d,39696dc06,4d0f63435); the newEngineParsedAggregateflow shape forbuiltin:QuerystringParseresults, propagated through IFC summarization (80c26bf0f,9d4874057,151502548); ConstantsObject static-method + OwnKeyArray +matches!length/size recognition in flow labels (d8a84c418,c5b706838); FRANKEN_CAPTURE_DEBUG gate for capture-origins resolution (a7116c2fd). - Theme 3 — shadow + evidence layer. Authoritative shadow-daemon no-mock
lifecycle drill (posture advisory-only, all five adoption gates green) —
698b9ae0a,8b20e5f43,e8f58696e,129a2f0f6,b5fd26175; execution-derived receipt layer with recomputable seals + receipt-integrity gate in main body + bd-q0cwt / bd-8hh0g close (ad43cd2a0,675b3c232,68690399b,5ec3d7cb7,c432e530a); native promises in reaction completions, resolve, async returns (0bb43d4e7). - Theme 4 — BRIDGE-2026 program work. README structural-inventory drift +
three nonexistent module references + repo hygiene (
tu32j.1.8); restore repo-wideunsafe-codeprohibition in test builds (tu32j.1.9); generate the live coverage matrix from authoritative beads / claims / harness inventory (tu32j.22.1.1); BRIDGE-21.61 enforces decomposed-parent closeout and exact required-child completion (4e37b213d). - Theme 5 — reality-check defect cluster (bd-sxh8o).* Promise/async
then-handlers fix on
frankenctl run+ Array.prototype.toString prints[object Array]+ benign frankenctl run reportscontainment_action=challengeexamples/21verify.sh can green on usage errors + replay self-compares traces (bd-sxh8o.1..6,bd-25il9was false-closed).
Plus the other open wave: ESM async module-graph evaluation with owned compiled
IR per module, AsyncEvaluating dependency status, parent-import continuation,
and rejection propagation for imported top-level await (bd-yn3lv); full set
of [REALITY-2026-08-20] CLI defects resolved into the rewritten CLI; v0.1.0
release remains the only published GitHub Release.
bd-53l89 (asymmetric key-lifecycle, phases 1-2), bd-acwe9 (zeroization
lifecycle), bd-dign3 (crypto/IFC summarize, 5 partials), bd-nil04
(shadow no-mock drill, 5 gates), bd-q0cwt + bd-8hh0g (execution-derived
receipts), bd-ifc-internal-label-cell-transcript-hplvg, bd-hwjbi
(callback recursion), bd-fw7zd.9 / bd-fw7zd.13 (post-close / promise
ownership), bd-z1peg (static IFC source labels), bd-z1peg.1..3
(authority/provenance registry + delegation accounting), bd-zco6t (fs
compat residual), bd-8nrud (nextTick), bd-yn3lv (ESM async module-graph),
bd-pafik (stream/promise provenance), bd-qjh7y (static IFC function
summaries), bd-sblaq (lexical cells), bd-asw4m.3/.5 (lexical this / implicit
net), bd-36e01 (Reflect.construct), bd-ur3tk.21 (PromiseStore),
bd-i7cw8 (Readable reset), bd-sxh8o* (reality-check CLI cluster),
bd-m42c2 (ChildProcess), bd-k709s (process effect errors), bd-lmchj
(console hostcalls), bd-zyndq (BuiltinFunction new), bd-6o8kt (reduce
BuiltinFunction), bd-25il9 (false-close correction), bd-mpm0l
(per-iteration lexical), bd-es2ra (core for-of), bd-bscab (IR2 IFC
multi-arg), bd-cbsgh (static reads on unforgeable brands), bd-22e1y
(tls API fidelity), bd-2l1u2 (stream timers), bd-ur3tk (IFC
register-label), bd-bscab (IR2 HostCall label join), bd-3gs6q
(FullCapsHandler mock), bd-6a61n.2.7 (timer mock), bd-6wc97 (hostcall
placeholders), bd-l4t7n (TLS), bd-h7p1a (capture-origins), bd-znj5l
(Buffer.from over fresh aggregates).
80c26bf0f—feat(ifc): add FlowValueShape::EngineParsedAggregate for querystring parse results151502548—chore(engine,ifc): gated FRANKEN_CAPTURE_DEBUG diagnostic for capture-origins resolution08aa44884—fix(tls): correct X.509 TBSCertificate tag parsing and IFC flow labels for observation methods42bd30256—feat(crypto): implement P-256 ECDSA detached signing and verification with DER encodingfff2c4f7e—feat(crypto): implement ed25519_sign_detached and ed25519_verify_detached with unit tests7faab498c—feat(crypto): ed25519 generateKeyPairSync via typed RandomRead entropydd251eba7—feat(crypto): implement NIST SP 800-38D AES-256-GCM variable-length IV transform698b9ae0a—feat(shadow): authoritative no-mock lifecycle drill passes; no_mock_drill gate GREENad43cd2a0—feat(evidence): execution-derived receipt layer with recomputable seals and gate enforcement4e37b213d—feat(tracker): enforce BRIDGE decomposed-parent closeout via native gates5ee847e10—feat(tls): add bounded X.509 DER metadata extractor (bd-il0d9)
Root planning and audit leftovers left the repository root. HASHER_AUDIT_FIXED_LAYOUT_MIGRATION.md and REVIEW_SUMMARY.md now live under docs/planning/. audit_observed_claims.py and test_script_fix.sh moved into scripts/. Skill-loop scratch is gitignored. This is hygiene, not a behavior change.
49abf340d—chore(janitor): untrack skill-loop scratch; move root planning docs into docs/planning/b1f5bc91c—chore(janitor): relocate remaining root reports and planning docs
bd-ndpm2 was filed as a P0 build blocker: frankenengine-engine did not compile
in any feature configuration because a half-finished async migration in
/dp/frankensqlite broke fsqlite-btree. Re-measuring at HEAD found the
originally-named crate fixed upstream and the same migration breaking one layer
further down — /dp/sqlmodel_rust/crates/sqlmodel-frankensqlite, 32 errors. Chasing
a sibling's in-flight refactor crate-by-crate is not a fix, so the engine's own
coupling was cut instead.
Nine sibling path dependencies are now feature-gated, across three features that are all ON by default (a normal build in a full checkout is unchanged):
sibling-persistence—sqlmodel,sqlmodel-core,sqlmodel-frankensqlite, and through the last of those/dp/frankensqlite.cargo tree -e normal -i fsqliteproved that binding is the sole edge pulling fsqlite, so one cut drops two repos.sibling-service-api—fastapi-core(gatespolicy_controller::service_endpoint_template).sibling-dataframes— the fivefp-*crates (gates the Parquet evidence-export lane).
typed_persistence_models.rs looked atomic — six #[sqlmodel(table = …)] model
structs consumed by seven other modules — but TypedStoreRecord and
TypedStorageAdapterExt turned out to be pure serde traits with no ORM coupling.
Only the Model derive and the sqlmodel(…) attributes needed cfg_attr, so all
six consumer modules were left untouched. Where a runtime path would otherwise
degrade, it fails closed: Parquet audit export returns a typed error naming the
required feature rather than emitting another encoding under the Parquet name.
New gate lane: ./scripts/test_standalone_build.sh sibling-isolation (also inside
ci) asserts every /dp path dep is optional = true and that
cargo tree --no-default-features -e normal,dev names zero /dp paths. It keeps
enforcing under STANDALONE_BUILD_GATE_SKIP_REMOTE=1, since it needs no rch worker
and the skip flag would otherwise disable the guarantee exactly when the heavy lanes
are already skipped.
Two defects surfaced while gating. The self dev-dependency lacked
default-features = false, so feature unification re-enabled default for every test
target and cargo test --no-default-features silently rebuilt all nine siblings — the
standalone-test lane had been proving nothing. The same leak existed on the three
workspace crates that depend on the engine; fixing all four took the workspace sibling
count from 119 to 0. Separately, two integration tests still asserted the removed fake
FRANKEN_PARQUET_V1 header, directly contradicting the lib test that asserts its
absence; both now assert real PAR1 framing.
README correction. "Standalone Mode (no sibling repos required)" was false and
cannot be made true from inside this repository. Three experiments established that
cargo resolves an optional dependency's manifest whether or not a feature activates it
— for path, git, and unmatched [patch.crates-io] sources alike — and that the only
source kind genuinely skipped when disabled is a registry dependency. None of the nine
siblings is published. The README now states that --no-default-features links no
sibling crates but still requires the checkouts present, and registry publication is
tracked on bd-gw4cg. Claim-matrix spans were re-anchored and
run_claim_to_proof_matrix_gate.sh ci passes (28 claims, 0 failures).
bd-x85a7 adds the first host process-execution authority to the extension
host, as a fail-closed request/provider seam rather than an ambient capability.
ProcessSpawn becomes a typed RuntimeCapability; ProcSpawnEffect carries a
structured ProcessSpawnRequest instead of an untyped string tuple; and the
default provider is DenyAllProcessSpawn, so a runtime that does not explicitly
install a provider cannot spawn at all.
crates/franken-extension-host/src/process_spawn.rsimplements the typed request/response/error protocol and a bounded native provider that re-verifies the target executable by SHA-256 before every launch, clears ambient environment and admits only an allowlist, jails the working directory to a canonical path, refuses dangerous environment carriers (LD_PRELOAD,DYLD_*,BASH_ENV), applies per-child resource limits, and returns opaque scoped handles rather than PIDs. A detached reaper thread plusDrop-time containment prevents orphaned children. The module keeps#![forbid(unsafe_code)].crates/franken-extension-host/src/host_effect_journal.rsadds a globally ordered record/replay journal spanning host I/O and process effects. Reservation and completion preserve crossing order, because concatenating per-family transcripts would forge the ordering of interleaved effects and break replay identity.- The orchestrator gains
set_process_spawn(...), ahost_effect_journalresult field, andlast_failed_host_effect_journal; the capability stack treatsProcessSpawnas extraordinary authority that is absent from the ordinaryFullprofile, so it cannot be acquired by default composition. - Follow-up audit beads are tracked as
bd-x85a7.1–.4: temporal containment and per-effect expiry, journal completion-hole integrity, secret hygiene for env/stdin/stdout/stderr inDebugand diagnostics, and platform process-tree containment (cgroup or job object) beyond Unix process groups. This entry records the foundation only; those four remain open.
bd-093id makes synchronous generator invocation run its parameter
initialization before publishing the iterator, while suspending ahead of the
first body statement. Generator activations now retain their full isolated
execution context across yields; .next(value) injects the value and label at
the prior yield site, returns completion records with done: true, and
validates the generator receiver through the exposed next builtin.
- Core
IrSchemaVersion::CURRENTadvances from0.9.0to0.10.0because serialized IR1, IR2 (throughIr2Op::inner), and IR3 gain the semantics-bearingGeneratorBodyStartvariant. Schema gates now reject skipped peer-owned and future versions at lowering, verification, and execution entry points. IR1-to-IR3 lowering preserves a supported legacy header, so markerless0.9.xgenerator artifacts retain their historical first-.next()start timing; current generator bodies must contain exactly one boundary before yield/return. Older readers must reject0.10.xbefore decoding. - The engine mirror remains independently versioned at
0.7.0; this core-only checkpoint does not change the cross-seam ownership posture.
bd-uhf1m preserves source let/const identity when a function-local
binding is captured by a nested function and the parent body is detached for
deferred IR3 lowering. Captured declarations now create correctly typed
runtime cells, initialize them with InitBinding, and leave later assignments
on the checked StoreScoped path. This restores const-assignment and temporal
dead-zone behavior without changing synthetic, unresolved, inherited, or
uncaptured bindings.
- Core
IrSchemaVersion::CURRENTadvances from0.8.0to0.9.0becauseDeclareFunctionandCreateFunctiongain semantics-bearing persisted IR1 metadata. The optional vector is boxed so absent metadata does not enlarge the recursively loweredIr1Openum or consume an allocation; it is omitted when empty, so historical function-operation JSON and canonical bytes remain unchanged. - Core
0.9.0readers accept historical core0.8.xartifacts, whose missing metadata defaults to the legacy empty posture. Consumers must validate the header before decoding; older readers must reject a0.9.xartifact rather than ignore the new metadata and reinterpret captured lexicals as mutable. - Core minors
0.6.xand0.7.xremain rejected because they identify the incompatible engine-owned unresolved-name and follow-onContinuewires. The compatibility engine remains independently versioned at0.7.0.
bd-lfq44 closes the remaining UTF-8 projection in parsed ECMAScript module
sources. Imports and named re-exports now retain exact JsString code units
through parser AST metadata, the engine parser arena, IR1, and IR3 constant
pools. A source containing \uD800 therefore remains distinct from one
containing \uDC00; neither can silently alias through a replacement-character
projection during module lookup.
- The compatibility engine AST schema advances from v3 to v4 and its IR schema
from
0.2.0to0.3.0. The native core AST advances from v4 to v5 and its IR schema from0.3.0to0.4.0. Both Cargo packages remain on the unreleased0.2.0compatibility-staging line. ImportDeclaration::sourceandIr1Op::ImportModule::specifieruseJsString. Ordinary well-formed values keep their historical plain-string serde and canonical bytes; exact values use the established$wtf16unit representation.- Named exports separate their canonical binding head from an optional exact
module source. Source-free and well-formed clauses retain the historical
scalar
NamedClausepayload. Only a non-well-formed source uses the namespaced$module_sourcepayload, and readers reject that tagged form for well-formed content so the wire has one canonical encoding. - Runtime import dispatch carries the exact value to the existing filesystem conversion seam. A non-well-formed value is rejected there before path or cache lookup; the independent string-based resolver/ESM graph APIs are not reinterpreted or widened by this parser-path checkpoint.
- Current readers retain same-major historical AST/IR inputs. Existing well-formed parser hashes and phase0 semantic artifacts remain unchanged; only schema identifiers, compatibility vectors, and IR-header snapshots advance.
bd-4tt6s corrects the canonical SyntaxTree root span in both parser seams.
The root end_column is now the one-based UTF-8 byte column immediately after
the original source on its final physical line, rather than a hard-coded 1.
This covers single-line sources, non-empty multiline tails, trailing LF/CRLF,
and exact byte widths for non-ASCII source text.
- The compatibility engine AST schema advances from v2 to v3; the native core AST schema advances independently from v3 to v4.
- The AST contract, serde shape, SHA-256 algorithm, and hash prefix are unchanged, so historical tree JSON remains readable. Historical v1/v2 engine version vectors and pre-correction hashes remain pinned explicitly.
- Source-backed Parse Event IR materialization recognizes only the exact historical root-column defect, authenticated by its old tree hash; any other span or hash mismatch continues to fail closed.
- Parser-generated canonical hashes intentionally change when the old root column was wrong. The live phase0 fixture catalog and its content-addressed artifact bundle are regenerated under the new schema checkpoint.
bd-n8eta.4.6 moves only frankenengine-core and frankenengine-engine to an unreleased 0.2.0 line. This is a source-compatibility boundary, not a tag or publication: unrelated workspace packages stay at 0.1.0, and GA/release actions remain separately gated.
- Both public baseline-interpreter
Valueenums are now#[non_exhaustive]. Downstream matches must retain a fallback arm before the separately owned typed-Symbol runtime work appends a new variant. - The downstream audit found 57 cross-crate match expressions across 13 files; every match already had a wildcard, binding, or equivalent fallback.
/data/projects/franken_nodehad no direct construction, import, or match on either baselineValuetype. - Existing serde discriminants and payload bytes do not change. Focused historical-wire tests decode and re-encode all pre-migration variants byte-for-byte; the later Symbol children own any new wire values and execution-seed state.
IrSchemaVersion::CURRENTremains0.1.0because this migration adds no IR opcode or persisted IR shape. The separately trackedbd-f1ixzmust version its IR schema when itsCopyDataPropertiesvariants land on the unreleased0.2.0package line.
No Value::Symbol, typed executable property-key carrier, symbol_state, tag, or release is introduced here.
The subsequent core-first bd-vltnh slice advances
frankenengine-core::ir_contract::IrSchemaVersion::CURRENT to 0.2.0 and
the native core AST schema to franken-engine.parser-ast.schema.v3. Quoted
source literals, IR1 string literals, and the core IR3 constant pool now carry
exact JsString values, including lone UTF-16 surrogates. Historical
well-formed strings keep their prior leaf serde/canonical shape; exact values
use the tagged $wtf16 unit representation. At that checkpoint the duplicated
frankenengine-engine parser/IR mirror still remained at its prior schema;
the engine section below records the subsequent mirror landing. Neither
checkpoint is a release.
The engine mirror now advances IrSchemaVersion::CURRENT to 0.2.0 and its
live canonical AST schema to franken-engine.parser-ast.schema.v2. Quoted
expression literals cook directly into exact JsString code units, and that
carrier is preserved through the parser arena, AST serde/canonical values,
IR1 literals, IR3 constant-pool deduplication, and baseline LoadStr
execution. Ordinary well-formed strings retain their historical JSON and
canonical leaf shape; lone units use the tagged $wtf16 representation and
remain distinct through an end-to-end source parse, lower, and execute cycle.
The later bd-lfq44 checkpoint above completes exact module-specifier metadata
through the compiled parser/lowering path. Contextual legacy decimal escapes
remain tracked by bd-xcqzp. Neither schema landing creates a tag or release.
The core object-rest lane advances
frankenengine-core::ir_contract::IrSchemaVersion::CURRENT to 0.3.0 and
adds Ir1Op::CopyDataProperties { excluded_count } plus
Ir3Instruction::CopyDataProperties { target, source, excluded, value_dst }.
The frankenengine-core Cargo package remains on the deliberately unreleased
0.2.0 compatibility-staging line; this is an IR wire revision, not a package
release or tag.
Existing IR variant names and payloads retain their prior serde and canonical
representations. Core 0.3.0 readers accept historical 0.2.0 headers, while
older readers reject the new externally tagged variants instead of silently
reinterpreting them. The downstream source audit found only the engine
differential oracle directly matching the core IR3 enum outside the core
crate, and both matches already have fallback arms; /data/projects/franken_node
has no direct imports, constructions, or matches of either core IR enum.
The CEI epic (bd-sde5e, stated state must be provably ≤ commit) reached its capstone. Tracks A, C, E, F were already closed; this update lands Tracks B and G and the Track-H reflexive claim:
- B.2 (
bd-sde5e.2.2) — every OBSERVED claim now carries a realverification_result=passedreceipt from a live gate run (no backfill/pending). The last holdout, FE-CLAIM-022 (cross-runtime lockstep oracle), is re-emitted from a live run against real Node.js (/usr/bin/nodejsv20.19.4) with zero divergences across node/bun/franken; the latent bench bug behind its old backfilled receipt (the FrankenEngine lane exhausting the containment instruction budget on the 10k/20k-iter workloads) is fixed by sizing the comparative workloads tofrankenctl run's real default budget. FE-CLAIM-023 (cross-platform identical-hash reproducibility) is honestly downgradedobserved → target— it is unprovable on a single host and its receipt was backfill/pending (precedent: FE-CLAIM-012). Result: the A.3 bidirectional audit is 27/27 sound (100%),--blockingexit 0. - B.4 (
bd-sde5e.2.4) — fresh-clone committed-evidence verification (scripts/e2e/fresh_clone_evidence_verification_smoke.sh) is 16/16 offline against a cleangit worktreecheckout. - G.1 (
bd-sde5e.7.1) —scripts/run_claim_evidence_integrity_capstone.shcomposes the four CEI checks (claim-to-proof wording + A.1/A.3 bidirectional lattice, H.1 Merkle ledger, whole-document consistency, D.3 Test262 posture) into one fail-closed meta-gate, with an e2e replay wrapper anddocs/CLAIM_EVIDENCE_INTEGRITY_CAPSTONE_RUNBOOK.md. - G.3 (
bd-sde5e.7.3) — a no-mock acceptance drill (scripts/e2e/claim_evidence_integrity_capstone_drift.sh) injects an over-promotion of each class, asserts the capstone reddens the responsible sub-gate, and restores the tree byte-for-byte: the gate cannot be satisfied by fixtures. - H.2 (
bd-sde5e.8.2) — FE-CLAIM-025 reflexive soundness claim (the gate gates itself), backed by the A.5 adversarial corpus (4/4) and committed in the H.1 Merkle ledger alongside the claims it checks. The pre-existing unbacked target FE-CLAIM-TEST262 was also given a git-tracked evidence bundle so the blocking audit is clean.
Honestly deferred (genuine environment blocks, not skipped work): D.2 (bd-sde5e.4.2, full tc39/test262 corpus + denominator) and H.4 (bd-sde5e.8.4, a checked Lean 4 theorem) remain open; D.2 needs the external corpus and H.4 needs a Lean toolchain absent on this host. Their parents (Tracks D, H) and the epic stay open accordingly. Relates to the honest GA-exit ledger (bd-cixqu.47).
Commits: 619479f2, 163c17472.
- Promoted the README JavaScript surface coverage for
try/catch/finallyandthrow/ exception semantics to Executed after the Track H closure-capture work (bd-cixqu.8.2,bd-cixqu.8.3,bd-cixqu.8.5,bd-cixqu.8.6,bd-cixqu.8.4). - Recorded try/catch/finally as a resolved parser and lowering inventory site, retaining
FE-PARSER-GAP-TRY-CATCH-0001only as historical fail-closed provenance. - Verified the exception semantics suite through
rch:cargo test -p frankenengine-engine --test exception_semantics_conformancenow covers 24 passing tests, including catch-binding closure capture and finally isolation.
Kind distinguishes a published release from a plain git tag.
| Version | Kind | Date | Summary |
|---|---|---|---|
main @ b1f5bc91c |
Unreleased main tip (not a tag, not a Release) |
2026-08-19 | Current window: crates.io sibling isolation, cell authority, RandomRead entropy, janitor docs-reorg. |
0.2.0 (unreleased) |
frankenengine-core / frankenengine-engine Cargo versions |
2026-07-16 → present | Compatibility-staging line for public exhaustive-enum evolution; no tag or publication. |
v0.1.0 |
Published GitHub Release | 2026-05-29 | First conventional release and installed-binary baseline. The only GitHub Release in this repo. |
backup/main-tip-1b2e6cf0 |
Backup tag (not a release) | 2026-04-16 | Mid-April main tip preserved during the Test262 / async-execution work. |
backup/worktree-tip-1f288b45 |
Backup tag (not a release) | 2026-03-18 | Mid-March worktree tip preserved during the integration-test enrichment wave. |
The four chronological capability waves below are research-grouped, not release-tagged.
Counts at each wave's closing commit, derived from git ls-tree -r --name-only <wave-end-sha> against the path patterns shown. Useful for "how much was built in this window?" without reading every commit. These are historical wave-end snapshots, not current-HEAD inventory counts.
| Surface | End of Wave 1 (2026-02-28) | End of Wave 2 (2026-03-31) | End of Wave 3 (2026-04-30) | End of Wave 4 (2026-05-15) |
|---|---|---|---|---|
crates/franken-engine/src/**/*.rs (recursive) |
262 | 495 | 550 | 573 |
crates/franken-engine/tests/**/*.rs (recursive) |
437 | 1,194 | 1,309 | 1,390 |
crates/franken-engine/tests/rgc_*.rs (top level) |
0 | 34 | 36 | 37 |
scripts/run_*.sh (top level only) |
118 | 201 | 227 | 241 |
.beads/issues.jsonl entries |
951 | 1,118 | 1,739 | 2,584 |
| Commits added in the wave | ~315 | ~670 | ~2,115 | ~1,346 |
Read across rows for "growth per wave": notice Wave 2's near-doubling of the test surface (437 → 1,194) under the iterator-protocol + exception-epic landings, Wave 3's surge in beads (621 new entries, from 1,118 to 1,739) under the claim-to-proof matrix introduction, and Wave 4's continued bead growth (+845 to 2,584) tracking the IDEA-WIZARD series.
Two of the README's "Code Surface At A Glance" counts use top-level-only patterns (src/*.rs and tests/*.rs, not recursive), which gives slightly lower numbers than the recursive wave snapshots; the recursive figures above include src/bin/, src/capability/, tests/_support/, tests/support/, and tests/conformance/.
The first ten days laid the entire repository skeleton: workspace structure, the canonical-encoding/IR/lowering/parser scaffolding, the original RGC ("Runtime Governance Compliance") gate framework, and the first wave of integration tests. The codebase grew from an empty repository to 262 source modules and 437 integration test files in this window (see the per-wave metric snapshot above).
- Cargo workspace with
franken-engine,franken-extension-host,franken-engine-test-support, andfranken-metamorphiccrates plus an excluded in-progressfranken-coreextraction crate. - Repository constitution:
AGENTS.md,docs/RUNTIME_CHARTER.md,docs/DONOR_EXTRACTION_SCOPE.md,docs/SEMANTIC_DONOR_SPEC.md— the binding rules that pin "native-only Rust core execution",#![forbid(unsafe_code)], the one-wayfranken_node → franken_enginedependency direction, and the claim-language policy that gates the whole project. - Parser + AST + multi-stage lowering pipeline (IR0 raw → IR1 normalized → IR2 simplified → IR3 executable), the original baseline interpreter, the execution orchestrator, and the evidence ledger — i.e. the architecture documented in
docs/ARCHITECTURE_OVERVIEW.md. - First RGC gate framework: CI quality gates, artifact validator, runtime hotspot campaign, gate replay scripts, and the cross-track handoff protocol.
- 40+ "expand core modules" passes covering canonical encoding, compiler policy, conformance catalog, capability witness, capability framework, security epoch, replay scaffolding, signed manifest, evidence emission, and the first revocation chain primitives.
- First adversarial-testing surfaces:
adversarial_coevolution,counterfactual_replay,tail_risk,bifurcation,rollback_synthesis, and the metamorphic-testing runner. - FRX (FrankenReact eXtension) track charters and the first FRX lockstep oracle / counterfactual evaluator.
59a21498—feat(engine): add RGC CI quality gates framework with tests, docs, and replay scriptse308a853—feat(engine): expand 40+ core modules with full runtime security, proof, and governance implementationsbd264466—feat(engine): expand 8 core modules with canonical encoding, compiler policy, conformance catalog, etc.f619b13b—test(engine): comprehensive integration test suite — 110 new test files639d8928—feat(engine): milestone evidence gates, demo-claim linkage, flake quarantine, and swarm control loop4e344549—feat(engine): adversarial coevolution, counterfactual replay, tail-risk, bifurcation, and rollback synthesis modulesfe44b2a3—feat(engine): metamorphic testing suite — seed transcript logging + runner enhancementsdd2162d8—feat(engine): add static semantics, TS module resolution, and RGC coordination modules02c47a89—feat(engine): add RGC-063 cross-platform matrix verification contractd99aec56—feat(engine): enrich EvalError with correlation IDs, source locations, and stack frames
March was dominated by closing real JavaScript semantic gaps in the IR/runtime: the iterator protocol, exception/try/catch/finally lowering, generator/promise/spread semantics, ESM/CJS export resolution, module compatibility matrices, and a sweeping integration-test enrichment pass (the in-tree memory/enrichment_sessions.md records over 7,000 new tests landed in this window). It is also when the parser front-end picked up most of its ES2020 grammar surface and when the deterministic-hashing/length-prefixing audit hit most subsystems.
- Iterator protocol end-to-end:
iterator_protocol.rscore substrate, 5 new IR1 opcodes (ForInInit,ForInNext,ForOfInit,ForOfNext,IteratorClose), realfor..in/for..oflowering replacing the previousUnsupportedSyntaxplaceholders, and a 43-testiterable_workload_verificationintegration suite. - Exception epic (RGC-313): IR lowering for
throw/try/catch/finally(extendedBeginTry, addedEnterFinally/EndFinally), a real runtime unwinder (CatchFrame,FinallyMode,pending_exception, real dispatch),rejection_reason_descriptionin module rejection, and 13 exception-semantics conformance tests. - Generator + promise + spread semantics (RC beads 1.4, 1.12, 2.1).
- IR3 instruction expansion: 19 new variants (
Mod,Exp,Lt,Lte,Gt,Gte,Eq,StrictEq,NotEq,StrictNotEq,BitAnd,BitOr,BitXor,Shl,Shr,Ushr,InstanceOf,InOp,Construct) with matching baseline-interpreter dispatch and execution-orchestrator mnemonics. - ESM/CJS interop: overhauled ES2020 star re-export semantics, conditional and external
exportsmap resolution, scoped-package and extensionless-relative tests, Node-compat CJS→ESM specimens, and a hybrid lane router; the module compatibility matrix gate gained npm-stylepkg.js/@scope/pkg.jsextension-probe anchoring with fail-closedpackage.json type=modulebehavior in native/node_compat modes. - Parser frontier (March-landed work only): initial tagged-template support and template-interpolation hardening, fail-closed handling for
super/new.target/import.meta, named-export-clause validation, and the parser-oracle / parser-frontier-harness gates. (Earlierparser arena VariableDeclarationand named/namespace imports landed in Wave 1; tagged-template-as-Call, trailing-line-comment stripping, named-declaration export desugaring, simd_lexer content-binding, and the parallel scoped-worker lex all land later — see Waves 3 and 4.) - Cross-repo integration suite (
scripts/run_cross_repo_integration_suite.sh) and machine-readable contract (docs/cross_repo_integration_suite_v1.json) for/dp/asupersync,/dp/frankentui,/dp/frankensqliteboundaries. - Deterministic-hashing audit: length-prefixing applied across content hashes (gate results, evidence bundles, signed manifests, rewrite packs, IFC declassification authorization, supremacy verdict aggregation, etc.) so concatenation collisions are no longer possible.
- frankenctl CLI gained
help <command>navigation, rch-wrapped replay command emission in artifact bundles, observability_mode JSON output and hash-stability regression tests, and preserved-bundle replay support across multiple gates. - Cache-oblivious metadata substrate, kernelized shift guard, semantic dark-matter engine (RGC-617), and the rough-path regime geometry orchestrator landed as performance/observability infrastructure.
8753c439—feat(engine): module system — async evaluation dependency tracking and compatibility matrix validationf10150a2—feat(engine): overhaul ESM export resolution to match ES2020 star re-export semanticsb17332ea—feat(engine): conditional exports map resolution tests for module resolver and compatibility matrix74a976ab—test(resolver): add scoped-package and extensionless-relative integration tests across compatibility modes44e1e65b—feat(engine): add cache-oblivious metadata substrate, kernelized shift guard, and semantic dark-matter engined7e1af52—feat(engine): add rough-path regime geometry orchestrator (RGC-617)bb8cb07f—feat(engine): cross-repo integration suite for multi-project contract verification135a1c2c—feat(rgc): add CI gate verdict, failure routing matrix, lane repro index, and health summary artifacts1bf264a8—feat(engine): versioned rewrite pack — canonical pair keys, cost model guards, and pack diffe8ed383c—fix(engine): deterministic content hashing — length-prefix fields and sort collections before computing digests215daf38—fix(engine): seqlock fastpath — panic safety via SequencePublishGuard and poison recovery
April was the most intense month by commit count and pivoted the project from "self-consistent infrastructure" to "real-execution truth". Test262 stopped using fake fixtures and started running real JavaScript; the benchmark harness stopped using hardcoded baselines and started measuring child wall-time and peak RSS via Linux pidfd+wait4; the claim-to-proof matrix v1 was introduced as the binding gate over every README claim; and the first set of "live" guardplane/IFC/quarantine examples replaced their mock counterparts.
- Claim-to-proof matrix v1 (
docs/claim_to_proof_matrix_v1.json,docs/CLAIM_TO_PROOF_MATRIX_V1.md) wired into bothscripts/run_claim_to_proof_matrix_gate.shand the README. All 21 tracked claims classified asobserved/target/hypothesis; the gate refuses progression when actual wording is stronger than the allowed state.bd-csnqbswept the unsupported "formal mathematical" claims and downgraded them in-tree. - Real Test262 harness: replaced fake test data and hardcoded fake results with actual JavaScript execution in the release gate; arrow-function output-mismatch regression closed; frontmatter parser hardened against overlapping markers; iterator-conformance comparison now uses the shared eval-vs-expected helper.
- Real benchmark measurement:
benchmark-e2eswitched fromtimeout(1)shell wrapping to in-process timeout + threaded stdio capture, then to memfd-based stderr capture with OnceLock host-facts cache and typed artifact serializers; child wall-time and peak RSS measured via Linux pidfd+wait4 with stderr timing-footer portability fallback; live Node/Bun baseline measurement (bd-16ch6); hardcoded throughput baselines eliminated (bd-1pq04); fake containment-latency data eliminated (bd-69kbi); cross-runtime output equivalence proved from captured bytes. - Real interpreter semantics: Array.from(iterable, mapFn, thisArg); Generator/Async/AsyncGenerator dispatch; Function.{call,apply}; reduceRight; Map/Set/WeakMap/WeakSet seeded from iterables; Promise.all delegated to combinator; async function execution semantics (
bd-2lg6f); receiver-aware builtin dispatch with realArray.somecallback; full function-body try/catch/finally + JumpIfFalsy two-target lowering + EnterCatch label binding; IR3-aware eval completion; IR3 TemplateLiteral emission; SharedBudgetEnforcer so subsystems observe live certificate updates; GovernanceContext composition root (bd-2hzkh). - Parser front-end finalization: tagged-template expressions parsed as Call with template-literal argument; trailing line comments stripped and unseparated expression sequences rejected; named-declaration exports desugared into declaration + named clause; same-line statements after
export function/export classblocks split correctly;simd_lexertoken witnesses mix input hashes so token outputs are content-bound. - Live "impossible-by-default" examples: live guardplane posterior + expected-loss decision example; live quarantine propagation with convergence evidence; live IFC/declassification example with signed receipts (
bd-dpfvh); live capability rejection example (bd-1bao8);production_feature_cataloggate companion;bench-vs-nodeexample (bd-79rwx); certified rewrite optimization demo; react compile demo (bd-3eydu); decision-receipt demo. All 13 "impossible-by-default" capabilities now have demo directories (one without a dedicated directory; seeexamples/README.md). - Proof-artifact contract (
proof-artifactmodule): shared manifest module + script helper; adopted across three existing gates; events.jsonl race condition fixed with atomic emission; enumeration validation with Ord trait; cryptographic content binding added to IFC system. - Red-team / attacker harness (
bd-28otw): attacker execution harness with explicit scenario outcomes replacing hardcoded baseline assumptions; comprehensive baseline validation in compromise-rate gate. - Fuzzing: parser fuzz harness, proof-artifact JSON validation targets (PHASE 3), shadow_panel_bundle target (
bd-hbil1), ts_module_resolution_resolve target (bd-6fcpn), parallel-parser coverage-guided fuzz harness. - Shadow daemon adoption gates + mutation policy enforcement — preserved the advisory-only mode invariant documented in
docs/SHADOW_DAEMON_PROOF_STATE.md. - Privacy verification artifacts, declassification timestamp bounds, replay coverage proof metric gate (
bd-2488a), throughput disruptive-floor metric gate with Node/Bun denominators, three new metric gates and one proof example (bd-38mby,bd-1qr4f,bd-3mp80). - frankenctl
runsubcommand expanded with structured output + capability flags;--observability-modeconsistently surfaced in JSON; the README CLI smoke workflow (scripts/e2e/readme_cli_workflow_smoke.sh) was wired to the shared proof contract (bd-1fjqa). - GA exit evidence package, cross-architecture reproducibility contract, deterministic support-bundle export, workload preflight doctor workflow, deterministic technical-report renderer, rollout-controller guardrails, replication claim tracker, acceptance ledger.
afe84382—feat(claim-matrix): seed claim-to-proof matrix v1 + wire into gates and README71cda5e5—feat(claim-matrix): add gate runner script + tighten must_contain anchorse84796f1—feat(bd-csnqb): audit and downgrade unsupported formal mathematical claimsd21262af—feat(test262): implement real Test262 conformance harness integration21b485a0—feat(test262): replace fake test data with real JavaScript execution in release gated728d81a—feat(benchmark-e2e): measure child wall-time and peak RSS via Linux pidfd+wait4 with in-band stderr timing footer fallback38cfc002—feat(benchmark-e2e): memfd-based stderr capture, OnceLock host-facts cache, runtime launch resolution, and typed artifact serializersf5847faa—feat(bd-16ch6): implement live Node/Bun baseline measurement for throughput gate30f3aa96—feat(bd-1pq04): eliminate hardcoded throughput baselines and add defensive validation4b2c2b03—feat(bd-69kbi): eliminate fake containment latency data and add defensive validationd2ea4d17—feat(examples): implement bd-dpfvh live IFC/declassification exampleab686dfa—feat(proof): Live quarantine propagation example with convergence evidence267095c8—feat(examples): implement bd-1bao8 live capability rejection example029e9454—feat(proof): Live guardplane posterior and expected-loss decision example242bf0b5—feat(replay): add replay coverage proof metric gate (bd-2488a)8086b135—feat(metrics): Implement throughput disruptive-floor metric gate with Node/Bun denominators9e3576b1—feat(metrics): implement bd-1vwza compromise rate metric gateaa11e88c—feat(baseline-interpreter): add Generator/Async/AsyncGenerator dispatch + Function.{call,apply} + reduceRight5a3d047a—feat(lowering): function-body try/catch/finally + JumpIfFalsy two-target lowering + EnterCatch label bindingd728d81a—feat(benchmark-e2e): wall-time and peak RSS via pidfd+wait439ded447—feat(red-team): implement attacker execution harness (bd-28otw)f76c92e9—feat(fuzz): add parallel parser coverage-guided fuzz harness8c5c9459—feat(proof-artifact): Fix events.jsonl race condition with atomic emission3cb9c7a8—feat(governance): add GovernanceContext composition root (bd-2hzkh)
Wave 4 — Claim promotion, proof-specialized optimization, rch hardening (2026-05-01 → 2026-05-15, ~1,346 commits)
May has been about turning observed-but-fragile gates into hard contracts. The "idea-wizard" series (X, XI, XII, XIII) walked the README's remaining hypothesis claims toward observed by adding explicit proof bundles, rollback receipts, and no-mock acceptance drills. Concurrently, the rch (remote compilation hooks) infrastructure was hardened against worker drift, shard pressure, and brownouts so the large-batch agent swarms could keep landing work. The franken-core extraction crate started executing real class semantics for the first time.
franken-coreextracted runtime modules finally land in a compileable form (bd-zsais); class semantics start executing for real — class-expression semantics,extends/superdispatch,new.targetin constructors, accessor getter/setter descriptor invocation viaGetProperty/SetProperty, baseline-interpreter execution of class accessor get/set descriptors, private-accessor-key prefix tagging during lowering, heap-backed own-property storage for callable values + class-lowering Pop fix.- Async generators:
.next()body execution implemented; async function execution semantics finished (bd-mw20e.2); pending-await contract made explicit (bd-jcqqjfollow-up); await IFC labels preserved (bd-jcqqj). - Proof-specialized optimization promotion control loop (IDEA-WIZARD-XI, parent
bd-xg3d6): promotion-control contract & inventory (bd-sisok), deterministic promotion eligibility composer (bd-4j2ck), demotion rollback and safe-mode replay receipts (bd-or2e1), workload-regime transfer guard for promotion decisions (bd-jp4r0), promotion-state surfacing in operator runbook/status (bd-yo0eh), no-mock promotion-control replay drill and truth gate (bd-xbesa). - Real hot-path proof (IDEA-WIZARD-X,
bd-t5k40): rejected simulated hot-path evidence; rch hot-path wrapper (scripts/run_real_hot_path_proof.sh smoke); hot-path evidence runbook (docs/REAL_HOT_PATH_EVIDENCE_RUNBOOK.md); hot-path contract goldens; hot-path evidence drill.FE-CLAIM-010(Node/Bun denominator) explicitly kepttargetuntil live denominator artifacts replace placeholders;MockCertificateandhot_paths_simulationartifacts now rejected as backing evidence. - Zero-ready validation truth lane (IDEA-WIZARD-XII,
bd-n51l8): rch policy gate is now wrapper-aware (bd-n51l8.1); closed-bead semantic contradiction scanner (bd-n51l8.2); reopen real pending-promise await execution from source evidence (bd-n51l8.3); zero-ready source-gap picker for bounded follow-up beads (bd-n51l8.4); zero-ready truth surfaced in operator handoff status (bd-n51l8.5); no-mock drill for the lane (bd-n51l8.6). - README hypothesis-claim promotion (IDEA-WIZARD-XIII,
bd-ly6hp): claim-promotion contract for hypothesis gaps (.1); transparency-log decision receipt proof bundle (.2); live quarantine mesh convergence proof (.3); capability-typed ambient-authority rejection pilot (.4); README claim promotion gated on live proof artifacts (.5); no-mock claim-promotion acceptance drill (.6); explicit rollback-evidence requirement in the promotion gate runner (bd-zso7f). - rch (remote compilation hooks) brownout/preflight hardening: worker-pressure preflight is now default; rejection of expected/native/selected worker drift; route preference propagation; preserved worker status on route drift; fail-closed lib-unit smoke execution; rch policy-gate awareness of wrapper cargo gates; shard pressure preflight contract; fail-closed shard runner; shard-runner termination classification; opt-in shard keepalive instrumentation; brownout source closeout + validation baseline documentation.
- Parser & lexer: parallel lex chunks execute on scoped workers; continued logical-line indentation normalization; debug-derive for scoped chunk lex; trailing line-comment stripping; same-line statement splitting after export blocks.
- Re-enabled
certified_rewrite_optimizer(3f046a2a): aligned with current APIs after a long pause. - Shell hygiene smoke gate (
bd-j2o4x): matrix coverage of operator and e2e scripts. - Topology queue admission decisions, removal of placeholder authenticity-signature seeds, hardening of
proof_release_gate(requirescas://URIs to embed archive_root hex prefix), and continued length-prefixing pass across remaining hash inputs (conformance harness failure-id, repro-digest, React package cohort, hole witness generator, hardware parameter manifold, AOT entrygraph compiler, GovernanceReport schema/spec, support-bundle evidence, GateResult variable-length fields).
bd-xg3d6(IDEA-WIZARD-XI parent) — Proof-specialized optimization promotion control loopbd-ly6hp(IDEA-WIZARD-XIII parent) — Promote README hypothesis claims with live proof bundles (parent open at time of writing; children.1–.6closed in sequence)bd-n51l8(IDEA-WIZARD-XII parent) — Zero-ready validation truth and semantic debt control planebd-t5k40(IDEA-WIZARD-X) — Replace simulated hot-path evidence with real runtime proof lanesbd-2488a— Replay coverage proof metric gatebd-1vwza— Compromise rate metric gatebd-38mby/bd-1qr4f/bd-3mp80— Three named metric gates landed with proof examplesbd-zso7f— Explicit rollback evidence requirement in promotion gate runner
f925fcf5—feat(proof): add optimization promotion contract511f02a1—feat(proof): add optimization promotion composerecb397fe—feat(proof): add optimization demotion receiptsc695936d—feat(proof): add optimization transfer guarddf1f3121—feat(proof): add optimization operator status42428d68—feat(proof): add optimization replay drill636d7f11—feat(proof): add rch hot path wrapper31798477—test(claims): reject simulated hot path evidencef4b0e27c—docs(proof): publish hot path evidence runbook177ddc52—test: add quarantine mesh proof wrapperc4c350f6—test: add transparency receipt proof bundleab19aa69—test: add capability typed authority proof8c6a4038—test: add claim promotion contract gate6b004fdc—test: gate xiii claim promotion reports2b7886de—test: add xiii claim promotion acceptance drilld37aa248—fix: require promotion rollback evidenced51f2715—test: add shell hygiene smoke gate32574c81—feat(baseline-interpreter): implement async function execution semantics (bd-mw20e.2)9611a028—feat(async-generators): implement async generator .next() body execution3f046a2a—feat(franken-engine): re-enable certified_rewrite_optimizer module and align with current APIs9512282b—feat(franken-core): land the five extracted runtime modules to make standalone manifest compileable (bd-zsais)d35c9758—feat(franken-core): execute class extends super dispatch7af839bc—feat(franken-core): execute new.target in constructorsb5d4aae6—feat(parser): execute parallel lex chunks on scoped workers7a16247f—feat(rch): add shard pressure preflight contractbc84e2cf—feat(rch): add fail-closed shard runnerb696d496—feat(audit): objective artifact completion audit gate (new contract)
These are visible across all four waves and worth tracking separately from any single month.
The project uses br (the Rust-port beads_rust tracker) with issues checked into .beads/issues.jsonl. The README's claim-language gate (docs/CLAIM_TO_PROOF_MATRIX_V1.md) names a specific owning bead for every tracked claim. The IDEA-WIZARD-* series above each correspond to a parent bead with .A–.F children; the same shape recurs across earlier RGC-* epics.
scripts/ ships 241 run_*.sh files. Major families:
run_rgc_*— Runtime Governance Compliance (56 scripts: cross-platform matrix, security enforcement, runtime semantics, statistical validation, performance regression, JSON compound traversal, NPM compatibility matrix, observability publication policy, module interop matrix, CLI operator workflow, docs/help surface audit, zero-placeholder, etc.)run_parser_*— Parser (36 scripts: oracle, phase0 artifact, performance promotion, frontier harness, operator runbook, gap inventory)run_frx_*— FrankenReact/FRX (34 scripts: canonical React corpus, SSR/hydration/RSC, local semantic atlas, Track D WASM lane, Track E verification/fuzz, online regret + change-point demotion controller)run_claim_to_proof_matrix_gate.sh,run_real_hot_path_proof.sh,run_reproducibility_contract_suite.sh,run_metamorphic_suite.shand other top-level claim/evidence gates.
Every gate has a matching scripts/e2e/*_replay.sh wrapper that can replay the latest preserved artifact bundle or a pinned timestamp under artifacts/.
A repeating motif across all four waves: any time a content hash mixes variable-length data, the change replaces concatenation with length-prefixing so that distinct field decompositions cannot collide. Examples appear in February (initial scaffolding), March (rewrite packs, support bundles), April (proof-artifact contract), and May (GateResult variable-length fields, AOT entrygraph hashing, conformance-harness failure-ids).
Per docs/RUNTIME_CHARTER.md §5, franken_engine consumes (one-way): /dp/asupersync (control plane), /dp/frankentui (TUI), /dp/frankensqlite (persistence; with the documented DEVIATION for typed-heavy stores still routing through generic storage_adapter.rs), /dp/sqlmodel_rust (typed schema layers, partially adopted), /dp/fastapi_rust (service/API control surfaces). Cross-repo integration is verified by scripts/run_cross_repo_integration_suite.sh and pinned in docs/cross_repo_integration_suite_v1.json.
- The version timeline is sparse on purpose: the only GitHub Release is
v0.1.0(2026-05-29). Cargo0.2.0is an unreleased compatibility-staging line, not a tag. To pick an "as-of" snapshot after that, use a commit SHA. - The capability-wave sections are research-grouped by month because that's how the work actually landed; they are not release notes.
- For any claim made in
README.md, the authoritative gate isscripts/run_claim_to_proof_matrix_gate.sh ciagainstdocs/claim_to_proof_matrix_v1.json. If a README claim says something stronger than the matrix allows, the gate fails — the matrix wins. - For implementation evidence behind any wave entry, follow the linked commit, then
git log -- <touched-files>from that commit to see the surrounding cluster. - For workstream intent, look up the bead id (
bd-xxxxxorbd-xxxxx.N) withbr show <id>or read.beads/issues.jsonldirectly. - Per-session enrichment notes (large test landings) are kept in
memory/enrichment_sessions.md,memory/completed_beads.md, and the dated session files (memory/session_*.md). Treat those as frozen-in-time field notes, not current state. legacy_v8/andlegacy_quickjs/are reference corpora only; the runtime charter forbids them from becoming runtime dependencies.