{"passed":25,"failed":0,"total":25,"assertions":[{"name":"content.all_files_load_from_fs","pass":true,"detail":"6/6 files, source=fs"},{"name":"catalog.parses_specs_and_skills","pass":true,"detail":"3 specs, 2 skills, parsed from markdown with a JSON parser, not grep"},{"name":"catalog.requirement_and_test_counts","pass":true,"detail":"s1 4FR/7AT, s2 5FR/8AT, s3 4FR/4AT"},{"name":"s1.green_after_real_fix","pass":true,"detail":"green=true, iterations=2, iteration-1 failures=2 (a loop that starts green proves nothing)"},{"name":"s2.baseline_three_iterations_green","pass":true,"detail":"green=true, iterations=3; designed journey: rounding class first, then negative-quantity"},{"name":"s2.one_failure_class_hides_another","pass":true,"detail":"AT-7 fails in iterations 1 and 2 for different reasons and only passes at 3"},{"name":"skills.defensive_io_reduces_iterations","pass":true,"detail":"3 iterations without the skill, 2 with it"},{"name":"skills.defensive_io_changes_iteration_1","pass":true,"detail":"iteration-1 failures drop 5 to 4 because clamp-negative is preloaded from the skill file"},{"name":"skills.naming_reaches_the_code_generator","pass":true,"detail":"same green result, different emitted identifiers (runningTotal vs running_total)"},{"name":"knowledge.appends_only_with_test_provenance","pass":true,"detail":"2 entries, provedBy: money-rounding[AT-2 float drift,AT-3 half cent rounds up,AT-6 discount needs rounding] clamp-negative[AT-4 negative qty clamped,AT-7 mixed traps]"},{"name":"knowledge.rerun_is_measurably_faster","pass":true,"detail":"3 iterations cold, 1 with knowledge; preloaded: money-rounding, clamp-negative"},{"name":"knowledge.rerun_learns_nothing_new","pass":true,"detail":"a run that needed no revision appends no entries; knowledge only grows from proven fixes"},{"name":"knowledge.rejects_unknown_rules_and_says_so","pass":true,"detail":"injection refused: unknown rule id, refused (knowledge cannot inject code) (the companion proof that validation fires)"},{"name":"s3.stops_on_oscillation_not_green","pass":true,"detail":"stop=oscillation at iteration 2; report names FR-2 vs FR-4"},{"name":"s3.report_names_both_requirements","pass":true,"detail":"the stop report cites both colliding requirements and their proving tests"},{"name":"s3.no_knowledge_from_a_failed_run","pass":true,"detail":"nothing was verified, so nothing is recorded"},{"name":"caps.iteration_cap_fires","pass":true,"detail":"stop=iteration-cap; report lists the still-failing tests"},{"name":"caps.unit_cap_fires","pass":true,"detail":"stop=unit-cap after 6 units: spending on \"analysis\" would exceed the 6-unit budget (6 spent); the loop stops and reports instead of overrunning"},{"name":"router.hosted_slots_visibly_decline","pass":true,"detail":"40 hosted attempts across runs, every one declined for the honest reason: no credentials here"},{"name":"router.every_step_lands_on_the_local_floor","pass":true,"detail":"27 routed steps all completed on local:deterministic-v1"},{"name":"router.routes_by_task_class","pass":true,"detail":"codegen and analysis walk different configured chains, in order"},{"name":"integrity.displayed_source_is_executed_source","pass":true,"detail":"re-instantiating the displayed source string reproduces 8/8 passes"},{"name":"integrity.grader_catches_a_tampered_expectation","pass":true,"detail":"mutate one expected value and exactly one test fails: the comparisons are real, not rubber-stamped"},{"name":"integrity.unit_ledger_sums","pass":true,"detail":"every spent unit is itemized and the ledger sums to the reported total"},{"name":"integrity.runs_are_deterministic","pass":true,"detail":"two identical runs serialize byte-identical: reproducibility is a design property here, not luck"}],"counts":{"runs":10,"iterations":19,"testsExecuted":142,"unitsSpent":123},"headline":{"s1Iterations":2,"s2IterationsCold":3,"s2IterationsWithSkill":2,"s2IterationsWithKnowledge":1,"s3Stop":"oscillation","hostedDeclines":40,"knowledgeEntriesEarned":2},"content":{"source":"fs","filesLoaded":6,"filesExpected":6,"missing":[]},"durationMs":10,"note":"every value above is recomputed on each call; nothing is stored or hardcoded"}