Close Milestone 4 with adapter adoption evidence
This commit is contained in:
parent
95271dcf2e
commit
6d06195950
27 changed files with 2870 additions and 325 deletions
|
|
@ -42,6 +42,14 @@ make benchmark-m3
|
|||
make benchmark-m3-full
|
||||
```
|
||||
|
||||
Run the Milestone 4 adapter SDK smoke, maintained full, and fresh-wheel adoption gates:
|
||||
|
||||
```bash
|
||||
make benchmark-m4-smoke
|
||||
make benchmark-m4-full
|
||||
make adoption-m4
|
||||
```
|
||||
|
||||
The benchmark creates canonical sources, derived state, changesets, rendered output, and caches
|
||||
only in a disposable temporary directory. It does not read another project, self-host DocForge, or
|
||||
mutate repository content.
|
||||
|
|
@ -71,6 +79,13 @@ sweeps, add/change/delete/reorder equivalence, portable publication, receipt-onl
|
|||
memory, detached worker peak memory, and response size. Its interpretation is in
|
||||
[`docs/MILESTONE_3_BASELINE.md`](../docs/MILESTONE_3_BASELINE.md).
|
||||
|
||||
`milestone4-2026-07-29.json` is the clean-tree adapter SDK and reference-Python baseline captured
|
||||
from commit `95271dcf2e48045b9d3aed9b9ea09c7fc155692c`. It measures cold and warm
|
||||
incremental builds, complete/incremental graph-plus-Logic equivalence, corrupt extraction-cache
|
||||
recovery, corrupt-index recovery, parser and extraction counters, traced and process memory, and
|
||||
bounded response size. Its interpretation is in
|
||||
[`docs/MILESTONE_4_BASELINE.md`](../docs/MILESTONE_4_BASELINE.md).
|
||||
|
||||
The generic fixtures expose whole-source and projection scaling. They do not replace incremental
|
||||
adapter equivalence tests. Milestone 3's portable fixture contains 1,000 Nodes/Flow/Web nodes and
|
||||
999 edges; portable version 1 deliberately excludes Logic.
|
||||
|
|
@ -89,4 +104,5 @@ backlinks, both traversal directions, paged context, render receipt states, and
|
|||
freshness. The reported p95 uses the nearest-rank method; with ten samples it is the maximum.
|
||||
`process_peak_rss_kib` is the cumulative main-process `RUSAGE_SELF` high-water mark and excludes the
|
||||
detached viewer worker. It is diagnostic and not operation-local. Milestone 3 memory gates use
|
||||
per-operation `tracemalloc` peaks and detached worker receipt peaks instead.
|
||||
per-operation `tracemalloc` peaks and detached worker receipt peaks instead. Milestone 4 uses
|
||||
per-operation `tracemalloc` peaks and a cumulative benchmark-process high-water gate.
|
||||
|
|
|
|||
205
benchmarks/milestone4-2026-07-29.json
Normal file
205
benchmarks/milestone4-2026-07-29.json
Normal file
|
|
@ -0,0 +1,205 @@
|
|||
{
|
||||
"benchmark": "docforge2_milestone4",
|
||||
"environment": {
|
||||
"implementation": "CPython",
|
||||
"machine": "x86_64",
|
||||
"platform": "Linux-7.1.3-200.nobara.fc44.x86_64-x86_64-with-glibc2.43",
|
||||
"python": "3.14.6"
|
||||
},
|
||||
"evidence": {
|
||||
"cache_recovery_exact": true,
|
||||
"complete_assembly_hash": "2888182ab765fbffe3ba873c1613345640e8e6d89be74ddfca7452c0a5056345",
|
||||
"edge_count": 1001,
|
||||
"edge_hash": "00cc90998b6783afc8c9d1fd900409e5e3ba352868c4ba30e9bb2cbd59c52d35",
|
||||
"full_incremental_graph_and_logic_exact": true,
|
||||
"index_recovery_exact": true,
|
||||
"logic_edge_count": 2338,
|
||||
"logic_hash": "c86a3ae74777c2cec3a82c83e6e5bcca0196772ccea63cb13340fa9141593b0c",
|
||||
"logic_node_count": 2338,
|
||||
"logic_projection_count": 334,
|
||||
"node_count": 1002,
|
||||
"node_hash": "f7705dedf8dd388857a20d11f459dc74de797bcd12d3ed36e7f3aa75d67c328f",
|
||||
"source_count": 334,
|
||||
"source_hash": "30ef23aa41061de2d4a7c995fe109d7a41518d9ee5493d805dd256581b47dae2",
|
||||
"warm_zero_ast_parse": true,
|
||||
"warm_zero_source_extraction": true
|
||||
},
|
||||
"evidence_sha256": "4a8db461a311b5df4abd5aa00063e9a347d8b9dba19b30e35684f561d5271549",
|
||||
"fixture": {
|
||||
"expected_node_count": 1002,
|
||||
"kind": "synthetic_python_reference_adapter",
|
||||
"nodes_per_source": 3,
|
||||
"source_count": 334
|
||||
},
|
||||
"memory": {
|
||||
"process_peak_bytes": 78798848,
|
||||
"process_peak_limit_bytes": 536870912
|
||||
},
|
||||
"method": {
|
||||
"ast_instrumentation": "temporary counter around stdlib ast.parse",
|
||||
"clock": "time.perf_counter_ns",
|
||||
"extraction_instrumentation": "reference adapter extract_source entry counter",
|
||||
"full_mode_source_requirement": 334,
|
||||
"in_process_peak_memory": "tracemalloc per measured invocation",
|
||||
"process_peak_memory": "resource.getrusage(RUSAGE_SELF).ru_maxrss",
|
||||
"response_size": "UTF-8 bytes of compact sorted JSON",
|
||||
"samples": 3,
|
||||
"threshold_basis": "Regression tripwires leave several times the Milestone 3 1,000-node allowances for AST, Logic, extraction-cache, and SQLite work."
|
||||
},
|
||||
"mode": "full",
|
||||
"operations": {
|
||||
"cold_incremental_build": {
|
||||
"max_ms": 1599.76,
|
||||
"maximum_response_bytes": 14580,
|
||||
"maximum_traced_peak_bytes": 68573540,
|
||||
"median_ms": 1599.76,
|
||||
"min_ms": 1599.76,
|
||||
"p95_limit_ms": 30000.0,
|
||||
"p95_ms": 1599.76,
|
||||
"response_limit_bytes": 262144,
|
||||
"samples": 1,
|
||||
"stable_result": {
|
||||
"ast_parse_calls": 668,
|
||||
"cache_hits": 0,
|
||||
"deleted_sources": 0,
|
||||
"edge_count": 1001,
|
||||
"edge_hash": "00cc90998b6783afc8c9d1fd900409e5e3ba352868c4ba30e9bb2cbd59c52d35",
|
||||
"extraction_calls": 334,
|
||||
"invalidated_sources": 334,
|
||||
"logic_edge_count": 2338,
|
||||
"logic_hash": "c86a3ae74777c2cec3a82c83e6e5bcca0196772ccea63cb13340fa9141593b0c",
|
||||
"logic_node_count": 2338,
|
||||
"logic_projection_count": 334,
|
||||
"node_count": 1002,
|
||||
"node_hash": "f7705dedf8dd388857a20d11f459dc74de797bcd12d3ed36e7f3aa75d67c328f",
|
||||
"reparsed_sources": 334,
|
||||
"revision": "30ef23aa4106",
|
||||
"source_hash": "30ef23aa41061de2d4a7c995fe109d7a41518d9ee5493d805dd256581b47dae2",
|
||||
"status": "ok",
|
||||
"total_sources": 334
|
||||
},
|
||||
"traced_peak_limit_bytes": 268435456
|
||||
},
|
||||
"corrupt_extraction_cache_recovery": {
|
||||
"max_ms": 1695.406,
|
||||
"maximum_response_bytes": 14580,
|
||||
"maximum_traced_peak_bytes": 69776923,
|
||||
"median_ms": 1695.406,
|
||||
"min_ms": 1695.406,
|
||||
"p95_limit_ms": 30000.0,
|
||||
"p95_ms": 1695.406,
|
||||
"response_limit_bytes": 262144,
|
||||
"samples": 1,
|
||||
"stable_result": {
|
||||
"ast_parse_calls": 668,
|
||||
"cache_hits": 0,
|
||||
"deleted_sources": 0,
|
||||
"edge_count": 1001,
|
||||
"edge_hash": "00cc90998b6783afc8c9d1fd900409e5e3ba352868c4ba30e9bb2cbd59c52d35",
|
||||
"extraction_calls": 334,
|
||||
"invalidated_sources": 334,
|
||||
"logic_edge_count": 2338,
|
||||
"logic_hash": "c86a3ae74777c2cec3a82c83e6e5bcca0196772ccea63cb13340fa9141593b0c",
|
||||
"logic_node_count": 2338,
|
||||
"logic_projection_count": 334,
|
||||
"node_count": 1002,
|
||||
"node_hash": "f7705dedf8dd388857a20d11f459dc74de797bcd12d3ed36e7f3aa75d67c328f",
|
||||
"reparsed_sources": 334,
|
||||
"revision": "30ef23aa4106",
|
||||
"source_hash": "30ef23aa41061de2d4a7c995fe109d7a41518d9ee5493d805dd256581b47dae2",
|
||||
"status": "ok",
|
||||
"total_sources": 334
|
||||
},
|
||||
"traced_peak_limit_bytes": 268435456
|
||||
},
|
||||
"corrupt_index_recovery": {
|
||||
"max_ms": 1707.879,
|
||||
"maximum_response_bytes": 14779,
|
||||
"maximum_traced_peak_bytes": 68561924,
|
||||
"median_ms": 1707.879,
|
||||
"min_ms": 1707.879,
|
||||
"p95_limit_ms": 30000.0,
|
||||
"p95_ms": 1707.879,
|
||||
"response_limit_bytes": 262144,
|
||||
"samples": 1,
|
||||
"stable_result": {
|
||||
"action": "rebuilt",
|
||||
"ast_parse_calls": 0,
|
||||
"cache_hits": 334,
|
||||
"edge_count": 1001,
|
||||
"edge_hash": "00cc90998b6783afc8c9d1fd900409e5e3ba352868c4ba30e9bb2cbd59c52d35",
|
||||
"extraction_calls": 0,
|
||||
"initial_error_code": "invalid_index",
|
||||
"logic_hash": "c86a3ae74777c2cec3a82c83e6e5bcca0196772ccea63cb13340fa9141593b0c",
|
||||
"logic_projection_count": 334,
|
||||
"node_count": 1002,
|
||||
"node_hash": "f7705dedf8dd388857a20d11f459dc74de797bcd12d3ed36e7f3aa75d67c328f",
|
||||
"reparsed_sources": 0,
|
||||
"revision": "30ef23aa4106",
|
||||
"source_hash": "30ef23aa41061de2d4a7c995fe109d7a41518d9ee5493d805dd256581b47dae2",
|
||||
"status": "ok"
|
||||
},
|
||||
"traced_peak_limit_bytes": 268435456
|
||||
},
|
||||
"full_incremental_equivalence": {
|
||||
"max_ms": 1897.919,
|
||||
"maximum_response_bytes": 230,
|
||||
"maximum_traced_peak_bytes": 64305919,
|
||||
"median_ms": 1897.919,
|
||||
"min_ms": 1897.919,
|
||||
"p95_limit_ms": 30000.0,
|
||||
"p95_ms": 1897.919,
|
||||
"response_limit_bytes": 262144,
|
||||
"samples": 1,
|
||||
"stable_result": {
|
||||
"ast_parse_calls": 1336,
|
||||
"edge_count": 1001,
|
||||
"extraction_calls": 668,
|
||||
"logic_projection_count": 334,
|
||||
"node_count": 1002,
|
||||
"project_id": "milestone4-python-benchmark",
|
||||
"revision": "30ef23aa4106",
|
||||
"source_hash": "30ef23aa41061de2d4a7c995fe109d7a41518d9ee5493d805dd256581b47dae2",
|
||||
"status": "ok"
|
||||
},
|
||||
"traced_peak_limit_bytes": 268435456
|
||||
},
|
||||
"warm_incremental_build": {
|
||||
"max_ms": 1265.387,
|
||||
"maximum_response_bytes": 14578,
|
||||
"maximum_traced_peak_bytes": 69997166,
|
||||
"median_ms": 1244.427,
|
||||
"min_ms": 1239.941,
|
||||
"p95_limit_ms": 20000.0,
|
||||
"p95_ms": 1265.387,
|
||||
"response_limit_bytes": 262144,
|
||||
"samples": 3,
|
||||
"stable_result": {
|
||||
"ast_parse_calls": 0,
|
||||
"cache_hits": 334,
|
||||
"deleted_sources": 0,
|
||||
"edge_count": 1001,
|
||||
"edge_hash": "00cc90998b6783afc8c9d1fd900409e5e3ba352868c4ba30e9bb2cbd59c52d35",
|
||||
"extraction_calls": 0,
|
||||
"invalidated_sources": 0,
|
||||
"logic_edge_count": 2338,
|
||||
"logic_hash": "c86a3ae74777c2cec3a82c83e6e5bcca0196772ccea63cb13340fa9141593b0c",
|
||||
"logic_node_count": 2338,
|
||||
"logic_projection_count": 334,
|
||||
"node_count": 1002,
|
||||
"node_hash": "f7705dedf8dd388857a20d11f459dc74de797bcd12d3ed36e7f3aa75d67c328f",
|
||||
"reparsed_sources": 0,
|
||||
"revision": "30ef23aa4106",
|
||||
"source_hash": "30ef23aa41061de2d4a7c995fe109d7a41518d9ee5493d805dd256581b47dae2",
|
||||
"status": "ok",
|
||||
"total_sources": 334
|
||||
},
|
||||
"traced_peak_limit_bytes": 268435456
|
||||
}
|
||||
},
|
||||
"schema_version": 1,
|
||||
"source": {
|
||||
"dirty": false,
|
||||
"revision": "95271dcf2e48045b9d3aed9b9ea09c7fc155692c"
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue