Separate metrics measurement dimensions

This commit is contained in:
Meta Vens 2026-07-13 16:52:26 +01:00
commit b3dc8a15c0
7 changed files with 33 additions and 9 deletions

View file

@ -4878,8 +4878,10 @@ fn derive_repo_metrics_request_plan(
String::new(),
"[metrics_packet]".to_string(),
"requires_model_call_count = true".to_string(),
"requires_token_or_cost_summary = true".to_string(),
"requires_review_minutes_or_count = true".to_string(),
"requires_token_summary = true".to_string(),
"requires_cost_availability_status = true".to_string(),
"requires_review_duration = true".to_string(),
"requires_review_event_count = true".to_string(),
"requires_accepted_artifact_ref = true".to_string(),
"requires_public_proof_ref = true".to_string(),
"requires_credit_readback_ref = true".to_string(),

View file

@ -156,8 +156,10 @@ impl RepoMetricsRequest {
pub(super) fn has_metrics_packet(&self) -> bool {
let p = &self.metrics_packet;
p.requires_model_call_count
&& p.requires_token_or_cost_summary
&& p.requires_review_minutes_or_count
&& p.requires_token_summary
&& p.requires_cost_availability_status
&& p.requires_review_duration
&& p.requires_review_event_count
&& p.requires_accepted_artifact_ref
&& p.requires_public_proof_ref
&& p.requires_credit_readback_ref
@ -223,8 +225,10 @@ struct RepoMetricsReceipts {
#[derive(Debug, Deserialize)]
struct RepoMetricsPacket {
requires_model_call_count: bool,
requires_token_or_cost_summary: bool,
requires_review_minutes_or_count: bool,
requires_token_summary: bool,
requires_cost_availability_status: bool,
requires_review_duration: bool,
requires_review_event_count: bool,
requires_accepted_artifact_ref: bool,
requires_public_proof_ref: bool,
requires_credit_readback_ref: bool,

View file

@ -116,8 +116,10 @@ review_load = "gamecult.metrics.review_load_receipt.v0"
credit_readback = "gamecult.bifrost.credit_readback_receipt.v0"
[metrics_packet]
requires_model_call_count = true
requires_token_or_cost_summary = true
requires_review_minutes_or_count = true
requires_token_summary = true
requires_cost_availability_status = true
requires_review_duration = true
requires_review_event_count = true
requires_accepted_artifact_ref = true
requires_public_proof_ref = true
requires_credit_readback_ref = true

View file

@ -1433,3 +1433,12 @@ the mutable ref Idunn watches and the immutable commit it deploys. The Idunn
receipt contract already records both `watched_ref` and `source_commit`.
Deployment requests now require both fields: trigger topology and artifact
identity are conjunctive evidence.
## Measurement availability is not measurement equivalence
The metrics packet accepted token-or-cost and review-minutes-or-count summaries.
Those quantities answer different questions. It now requires token usage, an
explicit cost availability status, review duration, and review-event count.
Unknown vendor pricing may be reported as unavailable rather than fabricated;
it may not erase token accounting. A review count may not erase elapsed load,
and duration may not erase how many review events occurred.

View file

@ -534,3 +534,10 @@ Deployment git identity is also split. Requests now require both watched ref
and source commit SHA, matching Idunn's receipt. A branch/ref identifies the
mutable trigger path; the commit SHA identifies deployed bytes. Do not collapse
them back into one convenient string.
Metrics packet completeness is now explicit: token summary, cost availability
status, review duration, and review-event count are separate requirements.
This permits honest unavailable pricing without treating cost and tokens—or
duration and event count—as interchangeable. Next inspect projected accounting
status to ensure receipt presence cannot close a row whose required dimensions
are absent.

Binary file not shown.

View file

@ -660,4 +660,4 @@ current_status:
- Service lifecycle receipt history is now event-only: `load_epiphany_cultmesh_daemon_service_lifecycle_receipts` filters out the `epiphany-local/daemon-service-lifecycle-receipt/latest` mirror, while `load_latest_epiphany_cultmesh_daemon_service_lifecycle_receipt` remains the latest-state reader. Focused unit test `service_lifecycle_receipt_history_excludes_latest_mirror` proves two per-receipt writes return exactly two history records and latest points at the second. Fresh smoke `verse-query-lifecycle-history-filter-smoke` and live overview/triage `local-20260618-145632-497-efac6f0d` / `local-20260618-145632-321-867947af` prove compact swarm sights still expose service lifecycle attention plus the present elevated runbook artifact without daemon pokes or service mutation. Do not use a broad unscoped cargo test filter for this check on Windows; it fans out across bin harnesses and hit a broken pipe during this pass.
- `epiphany-verse-query seed-compact` is the compact seed receipt for wrappers and read-only rites. The older `seed` command still prints the full local Verse context for explicit debugging, but compact wrapper modes now avoid full `seed`/final `query` readback after the combined overview proof exposed Windows debug stack overflow from full-context serialization pressure.
last_completed_repo_swarm_cut: Huginn live-fire has crossed the first real repo Body from Persona pressure to branch-local Hands commit and Soul/Mind closure, and now has repeatable closure and redacted-public-proof mouths. On `E:\Projects\Huginn` branch `epiphany/huginn/first-awakening`, `tools/epiphany_local_run.ps1 -Mode repo-persona-intake` accepted item `huginn-inspection-readback-livefire`, Weksa/Persona intake remained sealed, and `epiphany-work derive-plan` lowered it to model-authored safe family `repo.status_section` for `README.md` only. `tools/epiphany_local_run.ps1 -Mode repo-swarm-run` advanced four bounded pulses: run-from-plan, adopt-from-plan, execute-from-plan, and close-from-execute. Huginn commit `e9b07c38fceabbdc89ea35c2156326c80c0393a2` updated only `README.md`; closure receipt `.epiphany\work\work-close-huginn-inspection-readback-livefire.json` records status `closed`, Soul verdict `passed`, Mind state commit `repo-work-close-huginn-inspection-readback-livefire-mind-commit`, safe family `repo.status_section`, path scope `README.md`, Bifrost publication gate, and `privateStateExposed=false`. Verification also ran Huginn's TypeScript compiler through concrete Node path: `C:\Program Files\nodejs\node.exe E:\Projects\Huginn\node_modules\typescript\bin\tsc -p tsconfig.json` passed. Native verifier `epiphany-repo-livefire-closure-smoke --workspace E:\Projects\Huginn --item huginn-inspection-readback-livefire --expected-path README.md --expected-family repo.status_section --expected-gate awaiting-publication --expected-blocker bifrost-publication-missing` checks closure receipt, Mind map entry, overview gate/blocker, authority seals, and `git show` changed paths, returning `status=ok`, `soulVerdict=passed`, `publicationGate=Bifrost`, and `privateStateExposed=false`. Wrapper `tools/epiphany_local_run.ps1 -Mode repo-livefire-closure -Workspace E:\Projects\Huginn -RepoWorkItem huginn-inspection-readback-livefire -SkipBuild` exposes the same read-only proof through the local operator mouth; artifact `local-20260621-190156-803-2f85ba15` printed commit, path, gate, blocker, Soul verdict, Mind commit receipt, and `privateStateExposed=False` without push, merge, publication, or target mutation. New wrapper `tools/epiphany_local_run.ps1 -Mode repo-work-public-proof -Workspace E:\Projects\Huginn -RepoWorkItem huginn-inspection-readback-livefire -SkipBuild` exports the redacted proof bundle and repo-local Verse index without publishing; artifact `local-20260621-190645-345-4555b1dc` wrote `.epiphany\public\proof-bundles\repo-work-public-proof-huginn-inspection-readback-livefire.json`, proof id `repo-work-public-proof-huginn-inspection-readback-livefire`, SHA-256 `857545b199f3e37eb06c2e757e5cfc201958e46667bb1f8403fd333a22620f63`, nine artifact rows, zero publication rows, and `privateStateExposed=False`. swarm overview readback `local-20260621-190701-140-b9519ec6` sees the `REPO-WORK-PUBLIC-PROOF` row and action row from Huginn's repo-local Verse with the same SHA-256 while Bifrost publication remains missing. Launcher compact modes are now named compact operator-context modes instead of read-only modes, and `bifrost-public-proof` summaries print item, target public Verse, room, proof SHA-256, review receipts, and credit receipts so publication receipts are auditable without claiming upstream sync.
next_action: Continue the OR-field and observation-to-consequence audit. Deployment now requires watched ref plus immutable source commit, and script hash plus review receipt; trigger topology, byte identity, and approval are separate proofs. Classify remaining alternatives by invariant, then inspect status/receipt/scheduler/cache projections for borrowed closure or effect authority. Keep closure's zero-substring invariant.
next_action: Continue the observation-to-consequence audit. Metrics requests now require token summary, explicit cost availability, review duration, and review-event count separately. Inspect Bifrost accounting projections next: receipt presence must not close metrics rows if required measurement dimensions are absent. Then continue scheduler/cache projection audit. Keep closure's zero-substring invariant.