Repository navigation
Open
Labels
app/aggregatorPackage/app: aggregator (pm-stack in this repo)Package/app: aggregator (pm-stack in this repo)app/pm-stackpm-stack (Pad/Grist) in developing-today/codepm-stack (Pad/Grist) in developing-today/codeeffort/sSmall: expected under 2 hours of workSmall: expected under 2 hours of workkind/enhancementpriority/normalOrdinary priority (the default)Ordinary priority (the default)queue/parkedQueue task is parked (waiting on CI, time, or an event)Queue task is parked (waiting on CI, time, or an event)source/design-architectFiled by the repo design architect jobFiled by the repo design architect jobstatus/parkedDeliberately paused with a recorded resume conditionDeliberately paused with a recorded resume conditiontask/triageQueue packet kind: verify, reproduce, and route this itemQueue packet kind: verify, reproduce, and route this itemwork/assignedQueue worker lifecycle stateQueue worker lifecycle state
Description
Phase 3 (audit) of #3005 — closing inventory audit for the measurement grammar + contract statement
Phase 3's closing piece for design #3005 (a measurement is a plain decimal). Design doc: files/designs/code-measurement-grammar.md in the keep-the-four-repos-healthy goal workspace. Gated on Phases 1–2 and the adopted Phase 3 origins (#2985; #2997 + #3000; #2791 + #2743) — status/blocked until they land.
Scope
- Inventory the whole measurement surface —
pm-stack/aggregator(src + scripts),pm-stack/meta-exporter,pm-stack/cloudflare-export,pm-stack/supabase-export, and any other pm-stack app that turns strings into measurements — for the two defect shapes of Design: a measurement is a plain decimal — one number grammar for every measurement string #3005:- bare
Number((or equivalent) coercions of string values in measurement paths; - bare
\d+count extractions adjacent to a count noun/unit in prose patterns.
- bare
- Disposition every hit in the closing evidence on this issue: covered by Design: a measurement is a plain decimal — one number grammar for every measurement string #3005 Phases 1–3 (name the phase) / fixed here (small, same-grammar conversions only) / filed as a named follow-up / not-a-measurement (name why — e.g. an id, a status code, a config value owned by Design: env numbers are arguments — one strict parse for boot-time configuration #2835).
- Verify meta-exporter: parseSubscriptionQuota's num() reinterprets empty, hex and scientific strings as real measurements — a drifted '' used value exports as a measured 0% window #2789's landed embodiment (
pm-stack/meta-exporter/meta-quota-export.mjsplain-decimal gate) still matches the recorded grammar; if it has drifted, file the conversion as a named follow-up. - Write the grammar into
pm-stack/aggregator/README.md— alongside design(aggregator): ingest, fail-closed — one validation contract for every document the PM stack consumes #2576's ingest contract if that has landed, as its own short section if not — in the recorded form: field form, prose form, refusal = not-measured, scientific/padding refused, grouping stripped not validated. - Explicitly out, named so they are not re-derived as gaps: meta-exporter: parseBillingBanner accepts fractional minor units — 1050.5 exports as $10.505 of free credits instead of failing closed on shape drift #2510 (kind rule, design(aggregator): ingest, fail-closed — one validation contract for every document the PM stack consumes #2576's exporter question), projector: parseLimit still reinterprets non-decimal spellings — limit=1e2 / 0x10 / 5.0 / +5 are honoured instead of falling back to the default (#1547 residual) #2971 (request-time parameter ownership — Design: env numbers are arguments — one strict parse for boot-time configuration #2835 vs this grammar — unless that question has been settled by then, in which case record the settlement).
Acceptance criteria
- Inventory evidence posted on this issue: every hit from the grep surface with its disposition; no undispositioned hits.
- Any same-grammar conversions done here are covered by the design's shared probe matrix (grouped / empty / radix / scientific / padded cases) in the owning app's tests.
- The README states the measurement grammar in the recorded form.
- Design: a measurement is a plain decimal — one number grammar for every measurement string #3005 is closed with the evidence, or its remaining open items are named follow-ups linked from it.
- Verification runs in CI per fleet policy (no builds on the sandbox).
🤖 Design-architect pass 25 — agent note: phase of design #3005; the grammar and its pins are recorded there and in the design doc. Do not re-derive them in triage; flag genuine blockers on #3005 instead.
Metadata
Metadata
Assignees
Labels
app/aggregatorPackage/app: aggregator (pm-stack in this repo)Package/app: aggregator (pm-stack in this repo)app/pm-stackpm-stack (Pad/Grist) in developing-today/codepm-stack (Pad/Grist) in developing-today/codeeffort/sSmall: expected under 2 hours of workSmall: expected under 2 hours of workkind/enhancementpriority/normalOrdinary priority (the default)Ordinary priority (the default)queue/parkedQueue task is parked (waiting on CI, time, or an event)Queue task is parked (waiting on CI, time, or an event)source/design-architectFiled by the repo design architect jobFiled by the repo design architect jobstatus/parkedDeliberately paused with a recorded resume conditionDeliberately paused with a recorded resume conditiontask/triageQueue packet kind: verify, reproduce, and route this itemQueue packet kind: verify, reproduce, and route this itemwork/assignedQueue worker lifecycle stateQueue worker lifecycle state
Activity
dezren39 commentedon Oct 31, 2026
🤖 Design-architect pass 25 (2026-10-31) — agent note: this issue was filed this pass as the closing piece of Phase 3 of design #3005. It is gated on Phases 1–2 (#2985; #2997 + #3000) and the adopted Phase 3 origins (#2791 + #2743) landing, and is labelled
status/blockedaccordingly. A triage packet has been enqueued to the pilot queue (repo-health-code-pilot) in this same pass: triage records the gating and enqueues the implementation follow-up once it clears; the audit itself does not start before the phases land.dezren39 commentedon Oct 31, 2026
🤖 Agent note · picked up
dezren39 commentedon Oct 31, 2026
🤖 Agent note · done (triage)
Verdict: scope CONFIRMED as filed; the phase is independently landable, but only as the closing piece — the gate is real and currently closed.
pm-stack/aggregator(src + scripts),pm-stack/meta-exporter(incl.meta-quota-export.mjs+ its tests),pm-stack/cloudflare-export,pm-stack/supabase-export, plus the other pm-stack apps (dispatch,grist,pad,projector,ready-for-agent,scripts) the inventory must sweep. The five scope items and the two named exclusions (meta-exporter: parseBillingBanner accepts fractional minor units — 1050.5 exports as $10.505 of free credits instead of failing closed on shape drift #2510, projector: parseLimit still reinterprets non-decimal spellings — limit=1e2 / 0x10 / 5.0 / +5 are honoured instead of falling back to the default (#1547 residual) #2971) match design Design: a measurement is a plain decimal — one number grammar for every measurement string #3005's recorded decisions; nothing needs rescoping, and no decision on Design: a measurement is a plain decimal — one number grammar for every measurement string #3005 is re-opened here.status/blocked. meta-exporter: parseSubscriptionQuota's num() reinterprets empty, hex and scientific strings as real measurements — a drifted '' used value exports as a measured 0% window #2789 is CLOSED; verifying its landed meta-exporter embodiment against the recorded grammar remains part of the audit when it runs.pm-stack/aggregator/README.md.status/blockedretained (gate unmet); queue state now mirrors follow-up task 4350 (queued).90 remaining items
dezren39 commentedon Nov 2, 2026
agent-note:v1 — task 4350 (lane code-f) re-claimed 2026-11-02T23:16Z; hard gate rechecked fresh: #2743 still OPEN (the other four gate issues #2791, #2985, #2997, #3000 were CLOSED at the last full check, 22:19Z). Audit must not start until all five land. Parking task 4350 for 1h; resume after #2743 closes, then revalidate all five gate issues fresh.
dezren39 commentedon Nov 3, 2026
🤖 Agent note · parked
Gate re-checked fresh via
ghthis shift (2026-11-02): issue #2985 CLOSED, issue #2997 CLOSED, issue #3000 CLOSED, issue #2791 CLOSED — but issue #2743 is still OPEN (status/triaged). Per the packet's hard gate, the audit must not start yet. Task 4350 is parked for 24h naming issue #2743 as the sole remaining gate; resume by re-verifying all five gate issues are closed, then running the closing inventory audit.developing-today commentedon Nov 3, 2026
agent-note:v1
state: reviewed (coverage loop-back)
Coverage pass 2026-11-03, loop-back review: this issue was re-reviewed (drift / overlap / already-handled / stale / blockers / ordering) so every open issue in the four repos is reviewed and in the system. Verdict: still live; in the system as task 4350 (small_fix, parked, priority 30) in repo-health-code-pilot. Labels audited and synced. If it is already handled at current main, its triage closes it with evidence; if oversized, the triage files the split; blockers belong on this issue.
Found via: coverage loop-back 2026-11-03
dezren39 commentedon Nov 3, 2026
agent-note:v1
event: handed-off
task: 4350 (Phase 3 closing audit for #3006)
update: The #2743 Phase 3 origin now has its implementation in PR #5183: #5183. Targeted Supabase exporter tests pass. This moves the gate from unworked to awaiting merge; #2743 remains OPEN and the gate is not yet cleared. Keep task 4350 parked until #2743 closes/lands, then revalidate all five prerequisites before starting the audit.
dezren39 commentedon Nov 3, 2026
agent-note:v1
state: parked (task 4350, lane code-n, gate re-verified fresh 2026-11-03T23:55Z)
Hard gate for the #3006 closing inventory audit is still NOT clear: #2985 CLOSED, #2997 CLOSED, #3000 CLOSED, #2791 CLOSED, but #2743 is still OPEN. Per this task's packet, the audit must not start until all five are closed/landed. Task 4350 is parked with resume condition "#2743 closed" — no code changes made. Same finding as the 2026-11-02 park; the gate has not moved since.
Found via: task 4350 fresh
gh issue viewon #2985/#2997/#3000/#2791/#2743.dezren39 commentedon Nov 5, 2026
🤖 Agent note · parked
dezren39 commentedon Nov 5, 2026
🤖 Agent note · parked
dezren39 commentedon Nov 5, 2026
🤖 Agent note · parked
dezren39 commentedon Nov 5, 2026
Parked — task 4350 (lane code-i, direct lane)
Picked up task 4350 for issue #3006 and re-verified the HARD GATE fresh at 2026-11-05T07:57:03Z:
Per the task packet ("park naming the open ones if claimed early"), task 4350 is parked for 6 hours. Resume condition: after issue #2743 closes, revalidate all five prerequisite issues and run the closing inventory audit for issue #3006. No audit work was started and no files were touched.
developing-today commentedon Nov 5, 2026
🤖 Agent note · parked
dezren39 commentedon Nov 5, 2026
🤖 Agent note · parked
directGate re-checked fresh via
ghthis shift (2026-11-05T20:00Z): issue #2985 CLOSED, issue #2997 CLOSED, issue #3000 CLOSED, issue #2791 CLOSED — but issue #2743 is still OPEN. Issue #3006 is OPEN with no hard-stop labels (held / user/owned / do-not-merge / do-not-auto-edit). Per the packet's hard gate, the audit must not start yet. Task 4350 is parked for 6h naming issue #2743 as the sole remaining gate; resume by re-verifying all five gate issues are closed, then running the closing inventory audit.dezren39 commentedon Nov 6, 2026
🤖 Agent note · parked — hard gate unmet
dezren39 commentedon Nov 6, 2026
agent-note:v1 — task 4350 parked (lane code-l, repo-worker-code) at 2026-11-06T08:10Z.
Fresh gate revalidation: #2985 CLOSED, #2997 CLOSED, #3000 CLOSED, #2791 CLOSED, #2743 OPEN — the packet's hard gate for issue #3006 is still unmet, so the closing inventory audit was not started (no branch, no changes). Parked 6h. Resume condition: #2743 closes; then revalidate all five gate issues fresh and run the full audit per the #3006 packet.