Move to openspec/changes/archive/2026-07-08-prometheus-direct-charting/ (git mv, history preserved). 9 artifacts: proposal/spec/design/tasks/ apply-progress/verify-report/sync-report/archive-report + delta spec. Canonical openspec/specs/prometheus-charting/ remains.
14 KiB
Archive Report — prometheus-direct-charting
Phase: archive · Change:
prometheus-direct-charting· Repo:/home/user/manageMode: file-backed (artifactStore: openspec). No source-code edits; only OpenSpec artifacts were touched. Not committed — the parent/orchestrator owns the archive commit. No push, nogh.
Status: ARCHIVED. All eight lifecycle phases are complete (proposal → spec → design → tasks →
apply → verify → sync → archive). Every archive precondition is verified PASS (see §2). The
canonical openspec/specs/prometheus-charting/spec.md (created by sdd-sync) remains in place as
the durable end-state spec and is not moved (archive never moves canonical specs). The change
folder was moved to openspec/changes/archive/2026-07-08-prometheus-direct-charting/ via git mv
to preserve history.
0. Archive disposition
- Disposition:
archived. The folder move was performed inline as instructed (unlike adocumented-pending-manualoutcome): the parent explicitly requested thegit mvand owns the commit, so the move is executed here and left staged for the parent's explicit-path commit. - Archive convention: OpenSpec SDD archive contract for
openspecmode — completed file-backed sync → write the in-folder archive report → move the change folder toopenspec/changes/archive/YYYY-MM-DD-{change}/. No standalone manifest/index exists underopenspec/(onlyconfig.yaml,changes/,specs/), so the folder move is the archive mechanism. Norules.archiveoverride exists inopenspec/config.yaml. - Target archived path:
openspec/changes/archive/2026-07-08-prometheus-direct-charting/ - Archive date:
2026-07-08(ISO). - Canonical spec left in place (not moved):
openspec/specs/prometheus-charting/spec.md— 27 requirements (SC-101 … SC-127). Verified present and untouched after the move. openspec/specs/web-ui/spec.mdalso left untouched (the other canonical domain).- Audit-trail integrity: the change folder was moved as a whole, including the legacy flat
spec.mdand the per-domain deltaspecs/prometheus-charting/spec.md, which travel with the record. Nothing was silently deleted or rewritten. The flatspec.mdis retained as the authoritative planning artifact the work was built against.
1. Native sdd-status read & discrepancy statement
The native gentle-pi.sdd-status engine supplied by the parent reports non-actionable state for
this archive because it was resolved without a change context: changeName: null,
artifacts: all missing, applyState: blocked, dependencies.archive: blocked,
blockedReasons: ["Change selection is ambiguous: mobile-responsive-parity, prometheus-direct-charting, service-storage-harness, services-as-hub-ia."],
isNonAuthoritative: false. This is a parent-resolution artifact: the engine auto-detected four
active changes and could not pick one. The ambiguity does not reflect the state of
prometheus-direct-charting, which this archive task was explicitly assigned.
Discrepancy with the parent's authoritative confirmed state — RESOLVED in favor of the parent.
The parent physically verified (and this executor re-confirmed directly against the filesystem in
§2) that all 39 tasks are ticked, apply-progress.md exists and records the work, and the verify
report confirms functional completion with no blocking findings. Per the archive contract's
non-authoritative-store carve-out guidance and the parent's explicit instruction, the stale
archive: blocked / "ambiguous" labels are disregarded and the archive proceeds.
Direct filesystem re-validation (§2) is the source of truth for this report.
2. Archive preconditions (validated directly against the filesystem)
| Precondition | Evidence | Result |
|---|---|---|
| Verify report present | verify-report.md |
✓ verdict PASS |
Verify clearly passing — no unresolved FAIL/BLOCKED/CRITICAL |
verify-report §9: the sole CRITICAL was an archive-only checkbox/apply-progress gap (now reconciled); SC-125 PARTIAL→PASS closed | ✓ |
| Sync report present & successful | sync-report.md → Status: SYNCED |
✓ |
| Canonical spec exists (sync target) | openspec/specs/prometheus-charting/spec.md (27 requirements) |
✓ |
| Change-side domain delta exists | specs/prometheus-charting/spec.md |
✓ |
Delta op-class = pure ## ADDED (non-destructive) |
ADDED=1, MODIFIED=0, REMOVED=0, RENAMED=0 (new domain) | ✓ |
| Requirement-ID parity (flat ↔ delta ↔ canonical) | 27 == 27 == 27, identical IDs SC-101…SC-127 | ✓ |
| proposal / design / tasks artifacts present | all populated | ✓ |
Final Task Completion Gate — zero unchecked - [ ] |
grep -nE '^\s*- \[ \]' tasks.md → NONE; grep -cE '^\s*- \[x\]' → 39 |
✓ |
apply-progress.md present & records the work |
present; status "complete — all 39 tasks done", 3 slices + coverage close documented | ✓ |
No active same-domain (prometheus-charting) collision |
only this change carries a prometheus-charting delta |
✓ |
Stale-checkbox reconciliation note. At verify time, 19 implementation/verification checkboxes
(Slice 3 §3.1–3.14 and Integration §4.1–4.5) were unchecked and apply-progress.md did not exist.
That condition was reconciled before archive: the boxes are now all ticked and
apply-progress.md was authored documenting the three landed slices and the SC-125 coverage close.
apply-progress.md plus the verify report prove every previously-unchecked task complete. No
archive-time mechanical checkbox repair was needed — the gate now passes on the persisted
tasks.md as-is. No partial-archive approval applies.
3. Artifacts read (archive preflight)
openspec/changes/prometheus-direct-charting/proposal.mdopenspec/changes/prometheus-direct-charting/spec.md(flat, authoritative planning artifact — 27 requirements)openspec/changes/prometheus-direct-charting/specs/prometheus-charting/spec.md(change-side domain delta)openspec/changes/prometheus-direct-charting/design.mdopenspec/changes/prometheus-direct-charting/tasks.mdopenspec/changes/prometheus-direct-charting/apply-progress.mdopenspec/changes/prometheus-direct-charting/verify-report.mdopenspec/changes/prometheus-direct-charting/sync-report.mdopenspec/specs/prometheus-charting/spec.md(canonical, sync target — verified present and untouched)openspec/config.yaml(rules: proposal/tasks; norules.archiveoverride)
The legacy flat
spec.mdis not the only spec artifact: a per-domain delta (specs/prometheus-charting/spec.md) and a canonical spec both exist, so the "legacy flat spec as the only artifact" archive-block condition does not apply. The flat spec travels with the archived folder as part of the audit trail.
4. Domains synced & requirement delta
| Domain | Change-side delta | Canonical | Action |
|---|---|---|---|
prometheus-charting |
specs/prometheus-charting/spec.md |
openspec/specs/prometheus-charting/spec.md |
NEW domain — pure ADDED (27 requirements) |
- ADDED (27) — all to the new
prometheus-chartingdomain (canonical did not exist pre-change). IDs and text preserved verbatim from the verified flatspec.md. Grouped logically:- Direct Prometheus range query path — SC-101, SC-102, SC-103, SC-104
- Prometheus chart widget (rebrand + rebind) — SC-105, SC-106, SC-107, SC-108
- Prometheus gauge widget — SC-109, SC-110, SC-111
- Prometheus mean widget — SC-112, SC-113, SC-114
- Grafana removal — SC-115, SC-116, SC-117, SC-118, SC-119, SC-120
- Configuration documentation accuracy — SC-121, SC-122
- Test and build greenness — SC-123, SC-124, SC-125
- Migration guidance — SC-126, SC-127
- MODIFIED (0) · REMOVED (0) · RENAMED (0) — new domain; nothing destructive.
No destructive-merge guard or parent approval was triggered (zero REMOVED / zero MODIFIED). The new
prometheus-chartingdomain is distinct from the existingweb-uicanonical domain.
5. Final lifecycle status (all 8 phases done)
| Phase | Status | Evidence |
|---|---|---|
| Proposal | ✅ done | proposal.md |
| Spec | ✅ done | flat spec.md (27) + domain delta specs/prometheus-charting/spec.md (27 ADDED) |
| Design | ✅ done | design.md |
| Tasks | ✅ done | tasks.md — 39/39 checked, zero - [ ] |
| Apply | ✅ done | 3 slices delivered (commits 5dad982, 65bae95/58be6e0, 67ca0fc/ba94317) |
| Verify | ✅ PASS | verify-report.md — 26/27 PASS, SC-125 PARTIAL→PASS; gates green |
| Sync | ✅ done | sync-report.md — SYNCED; canonical prometheus-charting domain created |
| Archive | ✅ done | this report + folder move performed |
6. Gate results (run at head 67ca0fc; per verify-report)
| Gate | Command | Result |
|---|---|---|
| Backend tests | cd backend && PYTHONPATH=src python3 -m pytest -q |
PASS — 293 passed (2 pre-existing warnings) |
| Backend lint | cd backend && PYTHONPATH=src python3 -m ruff check src tests |
PASS — All checks passed |
| Frontend build | cd frontend && npm run build |
PASS — exit 0 (pre-existing chunk-size warning) |
| Frontend lint | cd frontend && npm run lint |
PASS — 0 errors (1 pre-existing warning) |
7. Carry-over follow-ups (non-blocking; recorded per task)
- [INFO] Stale generated
.pi-map.mdstill references Grafana — generated project-map artifacts (.pi-map.md/.pi-map.index.md) still mention Grafana /ObservabilityPage.tsx/GrafanaLinkWidget. These are generated artifacts, not deliverable source, and are explicitly ignored by SC-115/SC-116 (which scope onlybackend/src/frontend/srcsource). Out of scope for this change — regenerate viaproject_map_patch/project_map_validatein a separate housekeeping pass; the project-map protocol already flags thesedirty. - [INFO] SC-125 was PARTIAL→closed. Verify found SC-125 (new widget kinds have tests) PARTIAL
because no explicit
isLoading:trueloading-state test existed in any of the three Prometheus widget test files — a coverage gap, not a functional defect. The gap was closed before archive:apply-progress.mddocuments adding onerenders skeleton while loadingcase to each ofPrometheusChartWidget/PrometheusGaugeWidget/PrometheusMeanWidget, asserting theSkeletonrenders under{ data: undefined, isLoading: true }. SC-125 is now PASS. - [INFO]
config.yamlcontext block still namesfrontend/src/components/ObservabilityPage.tsx(refactored away intoservice-tabs/). Not an SC-121 criterion (which targets the charting/grafana claims — those are fixed); minor doc staleness. Out of scope. - [INFO] Slice-2 review-budget variance — slice 2 (~707 insertions) exceeded the ~310–400 forecast, but is additive feature code + tests (gauge + mean); the boundary is the feature, not scope creep. Non-blocking; recorded for the record.
- [INFO] Unrelated dirty working-tree items predating/orthogonal to this change (an uncommitted
cosmetic reformat of
frontend/src/pages/service-tabs/MediaTab.tsx, untracked.pi-tmp/*, and the separateservice-storage-harnessproposal folder) were not touched by this archive. SC-127 (independence fromservice-storage-harness) holds.
8. Residual risks & destructive-merge statement
- Destructive sync / merge: not applicable. Zero REMOVED and zero MODIFIED requirements
(new
prometheus-chartingdomain; pure ADDED). No destructive-merge guard or parent approval was triggered. - Backend / data-contract impact: none — Grafana was fully excised from live code paths
(service type, adapters, widgets, hook, API client, type, status endpoint, nav entry, service
tab); Prometheus is the direct chart source via
/api/v1/query_range. Themetricwidget data shape is preserved. Archive touched only OpenSpec docs + the folder move. - No critical verification issues remain (CRITICAL issues are non-overridable; the one verify CRITICAL was the reconcilable checkbox/apply-progress gap, now resolved).
- No browser/visual smoke was performed (out of scope); the recharts
RadialBarChartgauge andLineChartrendering are structurally tested only. - Memory observation IDs: none —
artifactStore: openspec; traceability lives in the filesystem archive + canonical spec.
9. Move performed
git mv openspec/changes/prometheus-direct-charting openspec/changes/archive/2026-07-08-prometheus-direct-charting
- All 9 artifacts confirmed present at the archived path:
proposal.md,spec.md,specs/prometheus-charting/spec.md(delta),design.md,tasks.md,apply-progress.md,verify-report.md,sync-report.md,archive-report.md(this file). - Canonical
openspec/specs/prometheus-charting/spec.mdremains in place (verified untouched after the move).openspec/specs/web-ui/spec.mdalso untouched.
Appendix — Files written/moved by this archive (OpenSpec only; no source code)
- Written:
openspec/changes/prometheus-direct-charting/archive-report.md(this file) — at the active path before the move; travels with the move into the archive. - Moved (via
git mv): the entireopenspec/changes/prometheus-direct-charting/directory →openspec/changes/archive/2026-07-08-prometheus-direct-charting/. - Left in place (durable canonical):
openspec/specs/prometheus-charting/spec.md. - Not committed / not pushed — the parent owns the commit with explicit paths.