Files
Developer 7efc06a629 chore(prometheus-direct-charting): archive verified+synced change
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.
2026-07-08 23:01:35 +00:00

205 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Archive Report — `prometheus-direct-charting`
> Phase: **archive** · Change: `prometheus-direct-charting` · Repo: `/home/user/manage`
> Mode: file-backed (`artifactStore: openspec`). No source-code edits; only OpenSpec artifacts
> were touched. **Not committed** — the parent/orchestrator owns the archive commit. No push, no `gh`.
**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 a
`documented-pending-manual` outcome): the parent explicitly requested the `git mv` and 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 `openspec` mode — completed file-backed
sync → write the in-folder archive report → move the change folder to
`openspec/changes/archive/YYYY-MM-DD-{change}/`. No standalone manifest/index exists under
`openspec/` (only `config.yaml`, `changes/`, `specs/`), so the folder move **is** the archive
mechanism. No `rules.archive` override exists in `openspec/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.md` also left untouched** (the other canonical domain).
- **Audit-trail integrity:** the change folder was moved as a whole, including the legacy flat
`spec.md` and the per-domain delta `specs/prometheus-charting/spec.md`, which travel with the
record. Nothing was silently deleted or rewritten. The flat `spec.md` is 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.13.14 and Integration §4.14.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.md`
- `openspec/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.md`
- `openspec/changes/prometheus-direct-charting/tasks.md`
- `openspec/changes/prometheus-direct-charting/apply-progress.md`
- `openspec/changes/prometheus-direct-charting/verify-report.md`
- `openspec/changes/prometheus-direct-charting/sync-report.md`
- `openspec/specs/prometheus-charting/spec.md` (canonical, sync target — verified present and untouched)
- `openspec/config.yaml` (rules: proposal/tasks; no `rules.archive` override)
> The legacy flat `spec.md` is **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-charting` domain (canonical did not exist pre-change).
IDs and text preserved verbatim from the verified flat `spec.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-charting` domain is distinct from the existing `web-ui` canonical 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)
1. **[INFO] Stale generated `.pi-map.md` still 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 only `backend/src`/`frontend/src` source). **Out of scope
for this change** — regenerate via `project_map_patch` / `project_map_validate` in a separate
housekeeping pass; the project-map protocol already flags these `dirty`.
2. **[INFO] SC-125 was PARTIAL→closed.** Verify found SC-125 (new widget kinds have tests) PARTIAL
because no explicit `isLoading:true` loading-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.md` documents adding one `renders skeleton while loading` case to each
of `PrometheusChartWidget` / `PrometheusGaugeWidget` / `PrometheusMeanWidget`, asserting the
`Skeleton` renders under `{ data: undefined, isLoading: true }`. SC-125 is now PASS.
3. **[INFO] `config.yaml` context block** still names `frontend/src/components/ObservabilityPage.tsx`
(refactored away into `service-tabs/`). Not an SC-121 criterion (which targets the
charting/grafana claims — those are fixed); minor doc staleness. Out of scope.
4. **[INFO] Slice-2 review-budget variance** — slice 2 (~707 insertions) exceeded the ~310400
forecast, but is additive feature code + tests (gauge + mean); the boundary is the feature, not
scope creep. Non-blocking; recorded for the record.
5. **[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 separate `service-storage-harness` proposal folder) were **not touched** by this archive.
SC-127 (independence from `service-storage-harness`) holds.
## 8. Residual risks & destructive-merge statement
- **Destructive sync / merge:** **not applicable.** Zero REMOVED and zero MODIFIED requirements
(new `prometheus-charting` domain; 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`. The `metric` widget 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 `RadialBarChart` gauge and
`LineChart` rendering 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.md` remains in place** (verified untouched
after the move). `openspec/specs/web-ui/spec.md` also 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 entire
`openspec/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.