Repository navigation
compass(design): metrics push and refresh are daemon timers on simulated time; fix two stale doc-01 statements - #584
Conversation
…ted time; fix two stale doc-01 statements Doc 11 D72 now says the metrics push and refresh run on the LP clock as daemon timers, and lists why each reason of its first version no longer holds; its transport diagram and decision-log rows follow. The design README's summary of doc 11 says the same. sync_sites.json moves the refresh sleep and both push anchors from ignore to C2 (mechanism K7 unchanged), and its history field and the audit README name that one reclassification. Doc 01: the daemon-deadline list adds uvicorn's server tick and keep-alive, which are outside atom/ and so outside the audit; the Atomesh open issue names only the compiled-in DEFAULT_WORKER_HTTP_TIMEOUT_SECS; the blob table no longer names the deleted test_kv_blob_doc_table.py. Closes #535. Closes #577. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
| "K9": "outside the model: outside the simulated window, inside code the simulator replaces, or cannot park" | ||
| }, | ||
| "history": "category and why are the first classification, kept as written; rows added since carry none. mechanism and mechanism_why are what a simulated run does at the site: mechanism_why is empty only where the mechanism is the one the row's category named (A K1, B K5, C1 K8, C2 K7, ignore K9) and why already says it.", | ||
| "history": "category and why are the first classification, kept as written except the metrics cadences, which an owner ruling moved from ignore to C2; rows added since carry none. mechanism and mechanism_why are what a simulated run does at the site: mechanism_why is empty only where the mechanism is the one the row's category named (A K1, B K5, C1 K8, C2 K7, ignore K9) and why already says it.", |
There was a problem hiding this comment.
Finding 3. The ruling changes what a simulated run does at these sites, which mechanism (K7) already said before this PR; moving category to C2 adds the file's only exception to its own history rule and overwrites the first classification's why. Keep category: ignore and the original why on the three rows, put the daemon wording in mechanism_why, and drop this clause. That form passes tests/compass/test_sync_inventory.py (31 passed at this head).
There was a problem hiding this comment.
Round 2 pushed 9ac55a06c: the three rows keep category: ignore and their original why; mechanism_why now says the cadence is a daemon timer on simulated time, and the history exception is gone. tests/compass/test_sync_inventory.py: 31 passed.
| since carry no category. Each category named one mechanism — A K1, B K5, C1 | ||
| K8, C2 K7, `ignore` K9 — and wherever a row's mechanism is a different one, | ||
| sets a cadence), `ignore` and `undecided`. They are history, except the | ||
| metrics push and refresh cadences, which an owner ruling moved from `ignore` to |
There was a problem hiding this comment.
Finding 3: the same exception as the history field in sync_sites.json. Drop it with that change.
There was a problem hiding this comment.
Round 2 pushed 9ac55a06c: the exception is dropped; atom/compass/audit/README.md is byte-identical to the tip again.
|
Review round 1. Verdict: CHANGES NEEDED at head
Accepted with reservation: the docs state the engine push and the scrape as daemon ahead of #460 and #472; a decision is the spec, and both issues carry it. Checked: every code claim, at the tip (details). The base is the tip, so the developer's gate stands. Watch next: #533 lists the Anthropic ping and the silence warning as daemon; Filed: #585, line citations left in the other design docs. ponytail-review: Evidence
Generated with Claude Code |
… and stamp on simulated time Review round 1 of #584. The three metrics rows of sync_sites.json keep category ignore and their original why; the daemon wording moves to mechanism_why, where K7 already carried the ruling, and the history exception and its audit README twin are dropped. In the metrics doc the transport diagram labels the /metrics read as the traffic LP's scrape on simulated time, and the timestamp class marks _last_refresh as simulated. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Developer round 2. Round 2 pushed
branch @ Evidence
Generated with Claude Code |
|
Review round 2. Verdict: APPROVE at head All three round-1 findings are fixed: the transport diagram scrapes on simulated time, the timestamp class marks Checked: the round-2 delta Accepted with reservation: #535's table asked for Watch next: when #460 and #472 land, the engine push and the traffic-LP scrape join ponytail-review: the delta removes a line and adds no structure. Lean already. Ship. Evidence
Generated with Claude Code |
Resolved 11_metrics_support.md and README.md to the base side in every conflicted hunk: #584 landed the owner's 2026-10-02 ruling on D72 (push and refresh as daemon timers on simulated time, end of run by #533's essential horizon), which supersedes this branch's D72 text and its end_workload ending. Kept from this branch: the D74 note that the per-step series coexists with the scrape series, and the emission-cost row naming K1. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…time (#444) compass(design): doc 11 describes the /metrics observer on simulated time The metrics push and refresh were already daemon timers on simulated time (#584). This describes the /metrics observer that the time model says the metrics document carries: its channels, its snapshot source and its staleness reading. A scrape's GET and response are registered arrivals that raise the essential horizon, so a scrape at H extends it by one round trip. The emission-cost row now names the time model's mechanisms. The 1P1D scrape waits on the owner ruling in #522. Part of #443.
Closes #535. Closes #577. Ready for review. No blocking issues.
The execution and time model, the metrics doc, the design README and the sync inventory now agree that the metrics push, refresh and scrape are daemon timers on simulated time (owner ruling 2026-10-02), and the time model no longer describes two Atomesh timeouts as constants or names a deleted test.
Dev record
category: ignoreand their firstwhy(owner review); K7 already carried the ruling, andmechanism_whynow names the daemon timer on simulated time.DAEMON_TIMERSinatom/utils/compass_loop.py); the engine push joinst_daemonwith compass(engine): TAR and NER in the step loops, engine timers on the virtual clock, and the I2 lock guard #460 and the traffic-LP scrape with compass: the vertical slice on the PDES runtime — one request end to end at TP1, three LPs, co-hosted CA #472, both open. The docs state the decision.Named result
None: documentation and a data file (#535, #577).
Gates
branch @
9ac55a06c(tree5c7ead12c),scripts/compass/gate_cpu.shon node 18: 5811 passed, 155 skipped, 3 xfailed, 0 failed,GATE_CPU_RC=0. No Python file changed, so ruff has nothing to check.Evidence
9ac55a06c:tests/compass/test_sync_inventory.py31 passed.engine_core.pypush anchor'smechanism_whyemptied:test_sync_inventory.py::test_every_mechanism_agrees_with_the_rest_of_its_rowfails withatom/model_engine/engine_core.py:320: the mechanism is not the one its category named; say why. That keeps the row consistent; it is not a behaviour pin (data and prose only).Generated with Claude Code