Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
234 commits
Select commit Hold shift + click to select a range
3edb4e1
docs(design): propose shadow mismatch paths for confirmed-mismatch wa…
lan17 Oct 24, 2026
5dce93e
docs(design): list pull request #242 in the shadow mismatch paths record
lan17 Oct 24, 2026
df4e7a5
docs(design): keep shadow.logMismatches as the shorthand and land por…
lan17 Oct 24, 2026
a51a7d9
docs(design): drop the value projector hook from the shadow mismatch …
lan17 Oct 24, 2026
5c3c54b
docs(design): have the hook return entries so paths and diff share on…
lan17 Oct 24, 2026
37d0ce3
docs(design): name the renamed hook in the deferred entries
lan17 Oct 24, 2026
273bb34
docs(design): make diff an ordered level and drop the paths boolean
lan17 Oct 24, 2026
f405b6a
docs(design): count the leaves correctly in D10
lan17 Oct 24, 2026
73706b4
docs(design): add the shadowMismatchLogging outcome metric and state …
lan17 Oct 24, 2026
e2c8217
docs(design): spell out the logMismatches baseline-and-override rule
lan17 Oct 24, 2026
206bb5e
docs(design): finish the pass to the two-leaf and entry vocabulary
lan17 Oct 24, 2026
9fc79fe
docs(design): accept the shadow mismatch paths record
lan17 Oct 24, 2026
c0df88a
feat(shadow): log mismatch paths and diffs in TypeScript confirmed-mi…
lan17 Oct 24, 2026
a0c5a74
docs(shadow): document mismatch paths, the logging leaves and the out…
lan17 Oct 24, 2026
10b987f
chore(formal): refresh ledgers for the shadow mismatch paths change
lan17 Oct 24, 2026
9017d7c
docs(design): correct the shadow mismatch paths exposure wording
lan17 Oct 24, 2026
d1fca79
docs(design): land every port of shadow mismatch paths in one pull re…
lan17 Oct 24, 2026
2a72aad
docs(shadow): show example mismatch warnings and the payloads behind …
lan17 Oct 25, 2026
5508d20
fix(shadow): keep disabled getOrLoad calls from reporting unknown con…
lan17 Oct 25, 2026
af5768a
chore(formal): refresh ledgers for the documented mismatch examples
lan17 Oct 25, 2026
a5532a2
docs(design): propose D12, model mismatch warning content in the shad…
lan17 Oct 25, 2026
84dcfbd
docs(design): confirm D12 and accept the shadow mismatch paths record…
lan17 Oct 25, 2026
6cd9fe3
refactor(shadow): check mismatch diff levels against one exhaustive set
lan17 Oct 25, 2026
051af57
perf(config): keep unknown-field scans off the per-call path
lan17 Oct 25, 2026
141d57e
refactor(shadow): carry the logging plan with the mismatch details
lan17 Oct 25, 2026
eef65ed
refactor(shadow): isolate the application logger through one wrapper
lan17 Oct 25, 2026
656ae29
fix(shadow): reject a non-function shadowMismatchDiff where it is cap…
lan17 Oct 25, 2026
1266a56
refactor(shadow): bound built-in and hook entries with one clamp rule
lan17 Oct 25, 2026
a1babb0
docs(shadow): state what narrowing, older versions and the walk cost …
lan17 Oct 25, 2026
c289ed3
chore(formal): refresh ledgers for the round 1 review fixes
lan17 Oct 25, 2026
0e6fb37
docs(design): propose D13, an absent compared value is a side, not a …
lan17 Oct 25, 2026
32d59d9
docs(design): confirm D13 and accept the shadow mismatch paths record…
lan17 Oct 25, 2026
3239e49
feat(shadow): log an absent compared value as one side at the root (D13)
lan17 Oct 25, 2026
3ffebf8
perf(config): stamp the unknown-field answer without a property or a …
lan17 Oct 25, 2026
6684ac7
chore(formal): refresh ledgers for D13 and the unknown-field stamp
lan17 Oct 25, 2026
a919d50
perf(shadow): merge raw shadow groups and expand the shorthand once a…
lan17 Oct 25, 2026
f7a615f
chore(formal): refresh ledgers for the raw shadow-group merge
lan17 Oct 25, 2026
ed80bbe
refactor(config): drop unknown-field reporting from this change
lan17 Oct 25, 2026
646d5d9
docs(design): record D14, no unknown-field reporting in this change
lan17 Oct 25, 2026
1804c3a
chore(formal): refresh ledgers after dropping unknown-field reporting
lan17 Oct 25, 2026
377526c
refactor(config): read shadow config as main does
lan17 Oct 25, 2026
964ade2
docs(design): extend D14 to keep main's config reads
lan17 Oct 25, 2026
45cc3d2
chore(formal): refresh ledgers for main's config reads
lan17 Oct 25, 2026
658d6d2
refactor(shadow): merge mismatch logging by expanding each layer first
lan17 Oct 25, 2026
83b0259
docs(shadow): note why only a runtime shorthand stays raw, and the di…
lan17 Oct 25, 2026
8e6d018
chore(formal): refresh ledgers for the expand-then-merge shadow merge
lan17 Oct 25, 2026
70b5e58
test(shadow): check the shadow merge against an independent fold of t…
lan17 Oct 25, 2026
d6e821c
chore(formal): refresh ledgers for the independent merge oracle
lan17 Oct 25, 2026
efa6b33
feat(shadow): count a rejected async logger as logger_error (D15)
lan17 Oct 25, 2026
aad2ae7
docs(design): record D15, an asynchronous logger failure is logger_error
lan17 Oct 25, 2026
e508c68
chore(formal): refresh ledgers for D15
lan17 Oct 25, 2026
f6a8aba
test(shadow): pin the walk to own members named like Object.prototype
lan17 Oct 25, 2026
d79e4a7
chore(formal): refresh ledgers for the own-member walk test
lan17 Oct 25, 2026
e1537c1
test(shadow): pin own members in depth-capped equality, and state the…
lan17 Oct 25, 2026
18dcc12
chore(formal): refresh ledgers for the depth-capped own-member test
lan17 Oct 25, 2026
48b3dc0
fix(shadow): pin D15's timing and observe replaced-then promises
lan17 Oct 25, 2026
a9c47d9
chore(formal): refresh ledgers for the D15 timing tests
lan17 Oct 25, 2026
2cbca04
fix(shadow): observe async observers and hooks through await
lan17 Oct 25, 2026
4919fd9
chore(formal): refresh ledgers for the await-based observer fix
lan17 Oct 25, 2026
d8a6412
refactor(shadow): observe returned promise-likes through one helper
lan17 Oct 25, 2026
7cdef0f
docs(shadow): state the walk's memory and sorting cost
lan17 Oct 25, 2026
842e5f9
chore(formal): refresh ledgers for the shared thenable helper
lan17 Oct 25, 2026
960dd3a
feat(python): add shadow mismatch_logging leaves and shorthand expansion
lan17 Oct 25, 2026
9a6f476
feat(python): log mismatch paths and diffs in shadow warnings
lan17 Oct 25, 2026
ec3d800
feat(go): log shadow mismatch paths and diff entries
lan17 Oct 25, 2026
bb3674f
feat(go): export the shadowMismatchLogging outcome metric
lan17 Oct 25, 2026
a68342a
test(python): pin shadow mismatch warnings end to end
lan17 Oct 25, 2026
6765931
feat(rust): log mismatch paths and diffs in confirmed-mismatch warnings
lan17 Oct 25, 2026
8715bd6
test(go): pin the built-in mismatch walk, its caps and the diff hook
lan17 Oct 25, 2026
bbd2ad5
test(python): reject an invalid hook path past the 64-entry cut
lan17 Oct 25, 2026
57af818
docs(python): document shadow_mismatch_diff and the logger outcome in…
lan17 Oct 25, 2026
7055f15
test(go): pin confirmed-mismatch warnings end to end
lan17 Oct 25, 2026
17a3584
test(python): keep the course's driver citations in place
lan17 Oct 25, 2026
2cc6c97
refactor(go): let a panic leave the render and delivery results zero
lan17 Oct 25, 2026
bfc9d2b
fix(rust): render each compared value once while recognizing the abse…
lan17 Oct 25, 2026
5be8b47
test(rust): pin mismatch paths, warning content and logging outcomes
lan17 Oct 25, 2026
62b1e6f
docs(rust): describe mismatch-logging leaves, the hook and the outcom…
lan17 Oct 25, 2026
6343fe8
fix(rust): word the static mismatchLogging shape error as TypeScript …
lan17 Oct 25, 2026
3c017de
chore(rust): cite the issues tracking the interim renderer and driver…
lan17 Oct 25, 2026
ee79edd
fix(python): build mismatch pointers only for retained entries
lan17 Oct 25, 2026
e25debc
fix(rust): build mismatch pointers only for retained entries
lan17 Oct 25, 2026
6ca9abd
fix(python): await a pending shadow warning logger apart from its job
lan17 Oct 25, 2026
47eca97
fix(rust): let a preview replace the JSON for the whole mismatch warning
lan17 Oct 25, 2026
b804534
feat(formal): model mismatch-logging leaves and warning content in th…
lan17 Oct 25, 2026
2953d56
fix(go): build mismatch pointers only for retained entries
lan17 Oct 25, 2026
8f6fcdd
feat(formal): replay shadow warning content, logging outcomes and the…
lan17 Oct 25, 2026
60e51e1
test(formal): record the full mismatch warning in the TypeScript driver
lan17 Oct 25, 2026
fbe8a4f
test(formal): add the mismatchPathVectors group and its TypeScript ru…
lan17 Oct 25, 2026
a630fd5
docs(formal): state W10 and C60's warning content and outcome rule
lan17 Oct 25, 2026
027874c
docs(formal): document the warning observation, fixtures and lesson c…
lan17 Oct 25, 2026
737ca2b
chore(formal): refresh ledgers for the shadow warning content
lan17 Oct 25, 2026
ea64778
merge: the Go port of shadow mismatch paths
lan17 Oct 25, 2026
28d2203
merge: the Rust port of shadow mismatch paths
lan17 Oct 25, 2026
5c7946b
merge: the Python port of shadow mismatch paths
lan17 Oct 25, 2026
2cd856b
docs(formal): name the warning content corners in the diagnostics family
lan17 Oct 25, 2026
b977268
style(formal): keep the new shadow logging text within the 120-column…
lan17 Oct 25, 2026
9679314
merge: Plan step 4 phase A, the shared formal layer and TypeScript dr…
lan17 Oct 25, 2026
8a99b4d
test(go): replay the mismatchPathVectors protocol group
lan17 Oct 25, 2026
84b6fc2
test(python): replay the mismatchPathVectors protocol group
lan17 Oct 25, 2026
5bb5aaa
test(python): record full mismatch warnings and the shadow failure in…
lan17 Oct 25, 2026
a17b819
docs(typescript): narrow which promise-likes await adopts without the…
lan17 Oct 25, 2026
c9c5e0c
test(typescript): pin the raw undefined an absent side passes to the …
lan17 Oct 25, 2026
dbecf28
fix(rust): keep main's meaning for an operation whose preview is None
lan17 Oct 25, 2026
1144873
test(typescript): read the walk vectors from the shared catalog
lan17 Oct 25, 2026
c93d915
test(go): record full mismatch warnings and drive the shadow failure …
lan17 Oct 25, 2026
2bf1f1f
test(go): check the shadow warning records against the replay schema
lan17 Oct 25, 2026
fd1c5cf
docs(formal): describe the Go confirmed-mismatch warning binding in G…
lan17 Oct 25, 2026
d3ec3bb
test(rust): replay the mismatchPathVectors group
lan17 Oct 25, 2026
de3cc95
feat(formal): replay a runtime leaf written off over an enabled default
lan17 Oct 25, 2026
fe898a7
test(formal): control the written-off leaf labels and their replays
lan17 Oct 25, 2026
fda8abe
docs(formal): name the diffJson cap's owner and the shadow warning age
lan17 Oct 25, 2026
dcfee6f
test(rust): record the full mismatch warning in the replay driver
lan17 Oct 25, 2026
0faa4f7
chore(formal): rewrite the shadow witness baseline and profile view
lan17 Oct 25, 2026
2b99d3a
chore(formal): refresh ledgers for the written-off leaf regressions
lan17 Oct 25, 2026
c4f700d
docs(rust): name executor rejection as a render_error cause
lan17 Oct 25, 2026
31d9991
test(go): keep the driver's cited line numbers by encoding paths into…
lan17 Oct 25, 2026
5a52956
docs: describe confirmed-mismatch paths for every port
lan17 Oct 25, 2026
b54c3ba
docs(design): record the ports' release shape and deviations
lan17 Oct 25, 2026
a0cca3e
docs: name the Python event key for shadowMismatchLogging
lan17 Oct 25, 2026
03882a4
docs: say both Rust warning groups are None when content work fails
lan17 Oct 25, 2026
3bd3705
docs: separate the Rust render_error and hook_error rendering failures
lan17 Oct 25, 2026
6177a81
docs(design): name every bundled Datadog adapter in the namespace drop
lan17 Oct 25, 2026
68db4bd
merge: Plan step 4 phase B, go
lan17 Oct 25, 2026
1d89bc9
merge: Plan step 4 phase B, rust
lan17 Oct 25, 2026
ac6debb
merge: Plan step 4 phase B, python
lan17 Oct 25, 2026
bd24430
merge: Plan step 4 phase B, formal
lan17 Oct 25, 2026
b577958
merge: Plan step 4 phase B, docs
lan17 Oct 25, 2026
9b5a248
test(formal): re-anchor M08, M09 and M65 on the mismatch-logging leaves
lan17 Oct 25, 2026
a0f7056
test: read the mismatch path vectors from the shared corpus in Go and…
lan17 Oct 25, 2026
c7082ff
test(formal): catalogue mutants for mismatch paths and their logging …
lan17 Oct 25, 2026
c150bf3
test(formal): challenge C60's mismatch logging in the shadow kernel
lan17 Oct 25, 2026
1813259
test(formal): record the measured detections and regenerate the catal…
lan17 Oct 25, 2026
8456573
test(formal): narrow the M08-twin challenge to a malformed shorthand
lan17 Oct 25, 2026
d83a44d
test(formal): catalogue M75's Rust twin and record diffJson at paths
lan17 Oct 25, 2026
2bc8d5e
ci(formal): grow the Go and Rust mutation matrices for the larger cat…
lan17 Oct 25, 2026
79ca568
merge: Plan step 4 phase C, mutants and C60 challenges
lan17 Oct 25, 2026
9307559
test(go): assert the diff-off hook check in a subtest so mutation run…
lan17 Oct 25, 2026
48e7da5
test(formal): keep generated detection on Rust twins whose TypeScript…
lan17 Oct 25, 2026
24df4ee
ci(formal): state the measured Go mutation baseline time
lan17 Oct 25, 2026
5ff5c3f
docs(formal): move the course citations to the merged drivers and counts
lan17 Oct 25, 2026
0532f83
chore(formal): refresh ledgers for the ports and Plan step 4
lan17 Oct 25, 2026
0f81340
test(python): pin that the hook receives an absent cached side as the…
lan17 Oct 26, 2026
55b9473
test(rust): drop the inline mismatch vector copy the catalog runner r…
lan17 Oct 26, 2026
4c90b10
fix(go): escape control characters in the default logger
lan17 Oct 26, 2026
4971ca8
fix(python): own logger isolation and awaitables at one boundary
lan17 Oct 26, 2026
f16e5f4
refactor(rust): carry one value renderer instead of separate JSON and…
lan17 Oct 26, 2026
b3cca04
fix(python): compare walked numbers as doubles, as the other ports do
lan17 Oct 26, 2026
3ed510c
style(python): format the logger boundary and the absent-side hook test
lan17 Oct 26, 2026
cc4c7ed
fix(typescript): build mismatch pointers only as far as the clamp reads
lan17 Oct 26, 2026
b99a5e4
fix(go): copy at most 516 bytes of each kept walk pointer
lan17 Oct 26, 2026
f8fdb9a
refactor(go): compare depth-capped walk pairs with reflect.DeepEqual
lan17 Oct 26, 2026
db182f4
test(go): replay each mismatch path vector through one helper
lan17 Oct 26, 2026
98fb62a
docs(observability): record hook and render errors without waiting fo…
lan17 Oct 26, 2026
0949b2d
docs: state the number rule and the Go logger escaping and capacity hold
lan17 Oct 26, 2026
3782466
refactor(go): type the shadow verdict's compared values
lan17 Oct 26, 2026
106387e
docs(design): name W10 and state the number rule and Go's capacity hold
lan17 Oct 26, 2026
6edf65b
test(formal): delete invalidLoggingCannotBeCaptured, which capturedLo…
lan17 Oct 26, 2026
35089c2
test(formal): pin the walk's number rule with five mismatch path vectors
lan17 Oct 26, 2026
807344a
fix(go): keep the shadow slot until the mismatch warning is logged
lan17 Oct 26, 2026
e5bae7c
test(formal): credit hook_error over render_error only where the valu…
lan17 Oct 26, 2026
2ee00a4
test(formal): add negative controls for nine shadow warning label fam…
lan17 Oct 26, 2026
df61577
ci(formal): give each mutation lane its measured baseline in the shar…
lan17 Oct 26, 2026
d3d5870
ci(formal): raise the model check timeout to 210 minutes and pin its …
lan17 Oct 26, 2026
49801d8
docs(formal): state the Full tier as about three hours and the model …
lan17 Oct 26, 2026
cbf7b75
merge: whole-PR review round 1 fixes, go
lan17 Oct 26, 2026
8cd0cf4
merge: whole-PR review round 1 fixes, rust
lan17 Oct 26, 2026
b9e32b9
merge: whole-PR review round 1 fixes, python
lan17 Oct 26, 2026
aefd570
merge: whole-PR review round 1 fixes, formal
lan17 Oct 26, 2026
a424f87
merge: whole-PR review round 1 fixes, docs
lan17 Oct 26, 2026
485b42e
test(shadow): pin the pointer stop with a third long member name
lan17 Oct 26, 2026
a3a592e
docs(shadow): name the Go logger and capacity changes and every Pytho…
lan17 Oct 26, 2026
80d41dd
chore(formal): refresh ledgers and course counts for the review round…
lan17 Oct 26, 2026
1b3d122
test(rust): fail the walk-cost bound when every counted difference bu…
lan17 Oct 26, 2026
e15d0b4
docs(rust): name the CPU executor that mismatch warnings share with d…
lan17 Oct 26, 2026
0c29331
fix(python): keep the logger's awaitable check inside its failure bou…
lan17 Oct 26, 2026
f7e9e9d
test(python): walk lone-surrogate member names in UTF-16 code-unit order
lan17 Oct 26, 2026
becdee1
fix(go): write the default logger's structured details as JSON
lan17 Oct 26, 2026
000a219
test(formal): pin the pointer cap below a parent of exactly 512 bytes
lan17 Oct 26, 2026
7f840b1
refactor(python): share one native JSON rendering between storage and…
lan17 Oct 26, 2026
a88bd65
refactor(python): narrow the walk's rendered sides for mypy
lan17 Oct 26, 2026
dcb7414
fix(go): render hook entry sides through json.Marshaler at every depth
lan17 Oct 26, 2026
bbbe0ee
docs(shadow): state Go's JSON logger details and capacity hold once each
lan17 Oct 26, 2026
b608a9a
docs(shadow): name the Go and Rust renderings the walk cannot parse back
lan17 Oct 26, 2026
e34e956
docs(shadow): name the Rust CPU executor that warnings share with dec…
lan17 Oct 26, 2026
e03c3d8
docs(shadow): describe what Rust's default mismatch log line writes
lan17 Oct 26, 2026
4be0b01
docs(design): widen the walk-parse Deviations and name the Rust execu…
lan17 Oct 26, 2026
fbde0d5
docs(design): record the number rule, Go's slot hold and the deleted …
lan17 Oct 26, 2026
f03d8ae
fix(python): compare integers beyond the double range as IEEE doubles
lan17 Oct 26, 2026
219b6b2
docs(shadow): state Rust's parse-depth limit as 128 or more nested le…
lan17 Oct 26, 2026
498a5aa
merge: whole-PR review round 2 fixes, go
lan17 Oct 26, 2026
1953e44
merge: whole-PR review round 2 fixes, rust
lan17 Oct 26, 2026
aef546f
merge: whole-PR review round 2 fixes, python
lan17 Oct 26, 2026
04cd2d2
merge: whole-PR review round 2 fixes, formal
lan17 Oct 26, 2026
f16f75f
merge: whole-PR review round 2 fixes, docs
lan17 Oct 26, 2026
f6caee3
ci(rust): lint the published library without test-util in check-rust
lan17 Oct 26, 2026
d7d91fe
docs(formal): repoint course citations to the moved validation.mjs lines
lan17 Oct 26, 2026
b806999
refactor(formal): resolve mismatch-logging inputs in a kernel module …
lan17 Oct 26, 2026
60f7983
docs(design): record the mismatch-logging kernel module as a Deviation
lan17 Oct 26, 2026
2fd1094
merge: whole-PR review round 2b, the Rust default build and the loggi…
lan17 Oct 26, 2026
ca35ff2
docs(design): keep the walk cost as documented and point its speed-up…
lan17 Oct 26, 2026
85febcc
chore(formal): refresh ledgers for review round 2
lan17 Oct 26, 2026
a8fd864
fix(go): redact a hook side's struct fields through their pointer-rec…
lan17 Oct 26, 2026
ef9618f
chore(formal): re-pin ledgers for the Go hook-side struct fix
lan17 Oct 26, 2026
d5d2019
refactor(typescript): type the mismatch-logging expansion's shadow gr…
lan17 Oct 26, 2026
2f9bc07
refactor(typescript): drop the catch around the built-in mismatch walk
lan17 Oct 26, 2026
3290f2b
refactor(typescript): build a mismatch pointer only for an entry the …
lan17 Oct 26, 2026
1ae0fdd
fix(typescript): log every requested field as null when warning const…
lan17 Oct 26, 2026
1c53e85
test(typescript): drop the tests that pin promise adoption rather tha…
lan17 Oct 26, 2026
1daa584
test(typescript): cut the hook-failure matrix to one case per branch
lan17 Oct 26, 2026
5aee7c6
chore(formal): refresh ledgers for the TypeScript defensive-code trim
lan17 Oct 26, 2026
8f7a264
fix(typescript): stop a kept mismatch pointer growing past its clamp
lan17 Oct 26, 2026
dcb7784
chore(formal): refresh ledgers for the bounded mismatch pointer
lan17 Oct 26, 2026
a74b2a4
merge: fold the TypeScript review into #242 and trim defensive code
lan17 Oct 26, 2026
d756793
docs(design): mark the shadow mismatch paths record Implemented and s…
lan17 Oct 26, 2026
99880fe
fix(shadow): log a custom differ's entries as it returns them
lan17 Oct 26, 2026
4515217
chore(formal): refresh ledgers for the unvalidated hook entries
lan17 Oct 26, 2026
4fcc2f5
refactor(go): drop the static mismatch-logging expansion checks
lan17 Oct 26, 2026
c7807a8
refactor(go): drop the default logger's encoding fallback
lan17 Oct 26, 2026
e6d71ec
test(go): drop the driver's unencodable mismatchPaths branch
lan17 Oct 26, 2026
694712a
test(go): drop the hook test row that panics with nil
lan17 Oct 26, 2026
5a90799
refactor(rust): read a mismatch verdict's compared values and age as …
lan17 Oct 26, 2026
40c3f90
refactor(rust): run the built-in mismatch walk without a panic net
lan17 Oct 26, 2026
f7e54fd
refactor(rust): render diffJson as the infallible serialization it is
lan17 Oct 26, 2026
a8b0f7e
refactor(rust): hand the mismatch hook and renderer values of the ope…
lan17 Oct 26, 2026
21d8467
refactor(rust): reject a non-object runtime mismatchLogging once, at …
lan17 Oct 26, 2026
39aff9d
refactor(python): run the built-in mismatch walk without its own try
lan17 Oct 26, 2026
3801027
refactor(python): render the bounded diff entries without a fallback
lan17 Oct 26, 2026
f91f60b
refactor(python): stop re-checking the mismatch_logging group's shape
lan17 Oct 26, 2026
d1fb22d
refactor(python): drop the unreachable compared check and clamp the k…
lan17 Oct 26, 2026
775c177
test(python): keep one hook-failure row per branch
lan17 Oct 26, 2026
60d9b8d
merge: simplify the go port's mismatch-path code
lan17 Oct 26, 2026
875bb6f
merge: simplify the rust port's mismatch-path code
lan17 Oct 26, 2026
d2f5960
merge: simplify the python port's mismatch-path code
lan17 Oct 26, 2026
934d5b8
chore(formal): re-pin ledgers for the port simplification
lan17 Oct 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 31 additions & 19 deletions .github/workflows/formal-full.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -70,12 +70,17 @@ jobs:
# challenge catalog alone, so a port-only change cannot alter it.
if: (github.event_name != 'schedule' || github.ref == 'refs/heads/main') && inputs.mode != 'replay' && inputs.mode != 'mutations'
runs-on: ubuntu-latest
# Shared-library challenges now execute the importing profiles' partitions,
# including clean baselines and mutant checks cached by exact source closure.
# The expanded partition campaign was still running after an hour in
# run 35568655690. Leave room for the full campaign on slower runners
# without reducing models, histories or partitions.
timeout-minutes: 150
# make formal-check runs every scheduled model, measures every catalogued
# model fault on four Quint workers, then checks the lint baseline and the
# kernel fixtures. Run 39239127644 on main spent 6.0, 134.6 and 2.3
# minutes on them, its 79 challenges 528 worker-minutes in their logged
# phases. Run 40245022083 reached the former 150-minute timeout with 78 of
# this catalog's 90 challenges done at 7.1 worker-minutes each; the 12 left
# put the campaign near 156 minutes. typescript/test/formal-validation.test.ts
# pins the challenges the timeout holds, so catalog growth fails the pull
# request until the timeout grows rather than reducing models, histories
# or partitions.
timeout-minutes: 210
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0
- uses: ./.github/actions/setup-validation
Expand Down Expand Up @@ -205,9 +210,11 @@ jobs:
# mutants: about 1 minute per TypeScript mutant on a fast runner and about 2
# on the slow class (13 mutants took 17 minutes unsharded in run
# 34669546872). typescript/test/formal-validation.test.ts pins the mutants
# a shard may hold so that the baselines (2-4 minutes), the slow-class cost and
# one hung cohort's 9-minute bound fit the timeout; growing the catalog past
# that fails the pull request until the matrix grows.
# a shard may hold so that setup and the baselines (1.0 to 1.6 minutes in
# the 18 shards of runs 40142189738, 40146831443 and 40245022083; the pin
# allows 2), the slow-class cost and one hung cohort's 9-minute bound fit
# the timeout; growing the catalog past that fails the pull request until
# the matrix grows.
typescript-mutations:
needs: generate
if: inputs.mode != 'replay'
Expand Down Expand Up @@ -363,11 +370,13 @@ jobs:
retention-days: 14

# The Go lane bounds the whole workflow: every mutant replays the generated
# cohort, about 1.6 minutes per mutant on a fast runner and about 3 on the
# slow class (13 mutants took 25 minutes in run 34660598461 and 47-48 in
# runs 34669546872 and 34670045249), strictly in sequence. A shard compiles,
# runs the baselines (2-4 minutes) and its slice of the catalog; one hung
# cohort adds its 8-minute test bound before the shard fails.
# cohort, about 2.5 minutes per mutant on a fast runner and about 4.5 on the
# slow class (run 40146831443: 145 s per mutant on shard 3, 270 s on shard
# 2, whose seven mutants took 37 minutes), strictly in sequence. A shard
# compiles and runs the baselines (2.7 to 5.3 minutes from job start in the
# 35 shards of runs 40142189738, 40146831443 and 40245022083; the pin allows
# 5.5), then its slice of the catalog; one hung cohort adds its 8-minute test
# bound before the shard fails.
# typescript/test/formal-validation.test.ts pins the mutants a shard may
# hold within the timeout, so catalog growth fails the pull request until
# the matrix grows.
Expand All @@ -378,9 +387,9 @@ jobs:
strategy:
fail-fast: false
matrix:
shard: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
shard: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
env:
MUTATION_SHARD: ${{ matrix.shard }}/10
MUTATION_SHARD: ${{ matrix.shard }}/15
timeout-minutes: 40
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0
Expand Down Expand Up @@ -433,17 +442,20 @@ jobs:

# The Rust lane compiles the crate and its test binaries in release mode
# once per mutant (dependencies are cached across mutants) and replays the
# generated cohort in about a minute; the budget mirrors go-mutations.
# generated cohort in about a minute; the budget mirrors go-mutations. On
# the slow class a shard's baselines take about 5.5 minutes and a mutant
# about 3.7 (run 40146831443), so four shards hold seven mutants in about
# 31 minutes.
rust-mutations:
needs: generate
if: inputs.mode != 'replay'
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
shard: [1, 2, 3]
shard: [1, 2, 3, 4]
env:
MUTATION_SHARD: ${{ matrix.shard }}/3
MUTATION_SHARD: ${{ matrix.shard }}/4
timeout-minutes: 45
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0
Expand Down
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ Classify before editing, because the type sets the design record, the steps and
- **Mutations:** Replay plus the TypeScript, Go and Rust mutation campaigns (`-f mode=mutations`),
which plant catalogued bugs in a port and require its tests to catch them; about 50 minutes.
- **Full:** Mutations plus the Quint model checks and the model-fault campaign (`-f mode=full`),
which plants bugs in the models and requires an invariant to catch each one; about two and a
half hours. The campaign reads only the models, the challenge catalog and the Quint toolchain,
which plants bugs in the models and requires an invariant to catch each one; about three
hours. The campaign reads only the models, the challenge catalog and the Quint toolchain,
so a change confined to the ports or their replay drivers never needs it. `-f exploration=true`
adds a fresh-seed generation and replay in an isolated copy of the source; a move needs it, and
the weekly run on `main` includes it.
Expand Down
2 changes: 1 addition & 1 deletion DEVELOPMENT_PROCESS.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ type needs once, on the final candidate.
port and require its tests to catch them, in about 50 minutes. A change that edits a file a
catalogued mutant rewrites, or a mutant catalog itself, needs it.
- **Full** adds the Quint model checks and the model-fault campaign, which plants bugs in the
models themselves and requires an invariant to catch each one, in about two and a half hours.
models themselves and requires an invariant to catch each one, in about three hours.
The campaign reads only the models, the challenge catalog and the Quint toolchain, so a change
confined to the ports or their replay drivers never needs it.
- **Full with exploration** also generates histories from a fresh random seed in an isolated copy
Expand Down
Loading
Loading