From 4f551cd4455dbd114e226617f76db6b7df3d3978 Mon Sep 17 00:00:00 2001 From: Patrick Date: Tue, 12 May 2026 01:39:32 -0400 Subject: [PATCH] =?UTF-8?q?chore(specs):=20backlog=20grooming=20=E2=80=94?= =?UTF-8?q?=20archive=206,=20gate=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Backlog grooming pass approved by Patrick after the velocity push that produced 24+ PRs in two days. Reduces active docs/specs/ from 15 entries to 9 by archiving completed, obsolete, or superseded specs. Archived to docs/specs/archive/: - telemetry — complete since v3.8.2 - ci-debt — complete 2026-05-10 across Phases A/B/C - probe-c-memory-investigation — resolved same-day with one-line patch("threading.Thread") fix - ops-specs-features — shipped in three phases (#236/#239/#240) - ops-security-hardening — implemented in PR #254 (a5c50bd1); status flipped to "complete" before the move - larger-runners — closed; Probe-C resolved the OOM concern, spec itself admits the case is smaller Gated: - redis-decoupling — Phase 3A done but no production trigger. Added explicit gate decision: don't implement until memory- backend abstraction shows real friction; revisit by 2026-11-12 if no trigger fires. Discovery safety: spec_orient.py walks docs/specs/ one level deep and uses _phase_for_dir() to filter non-spec directories. archive/ has no spec files at its top level → returns None → silently skipped. Archived specs do not appear in session orientation. README.md in archive/ explains the convention. Active backlog after this pass: coverage-canonical-pattern, coverage-exclusion-policy, ignored-tests, ops-runner-tier2, redis-decoupling (gated), test-infrastructure, website-update-dashboard-and-fold, windows-memory-detection, windows-xdist-honor --- docs/specs/archive/README.md | 36 +++++++++++++++++++ docs/specs/{ => archive}/ci-debt/design.md | 0 .../{ => archive}/ci-debt/requirements.md | 0 docs/specs/{ => archive}/ci-debt/tasks.md | 0 .../{ => archive}/larger-runners/decisions.md | 0 .../{ => archive}/larger-runners/tasks.md | 0 .../ops-security-hardening/decisions.md | 3 +- .../ops-security-hardening/design.md | 0 .../ops-security-hardening/requirements.md | 0 .../ops-security-hardening/tasks.md | 0 .../ops-specs-features/decisions.md | 0 .../{ => archive}/ops-specs-features/tasks.md | 0 .../probe-c-memory-investigation/decisions.md | 0 .../probe-c-memory-investigation/tasks.md | 0 docs/specs/{ => archive}/telemetry/design.md | 0 .../{ => archive}/telemetry/requirements.md | 0 docs/specs/{ => archive}/telemetry/tasks.md | 0 docs/specs/redis-decoupling/decisions.md | 20 +++++++++++ 18 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 docs/specs/archive/README.md rename docs/specs/{ => archive}/ci-debt/design.md (100%) rename docs/specs/{ => archive}/ci-debt/requirements.md (100%) rename docs/specs/{ => archive}/ci-debt/tasks.md (100%) rename docs/specs/{ => archive}/larger-runners/decisions.md (100%) rename docs/specs/{ => archive}/larger-runners/tasks.md (100%) rename docs/specs/{ => archive}/ops-security-hardening/decisions.md (98%) rename docs/specs/{ => archive}/ops-security-hardening/design.md (100%) rename docs/specs/{ => archive}/ops-security-hardening/requirements.md (100%) rename docs/specs/{ => archive}/ops-security-hardening/tasks.md (100%) rename docs/specs/{ => archive}/ops-specs-features/decisions.md (100%) rename docs/specs/{ => archive}/ops-specs-features/tasks.md (100%) rename docs/specs/{ => archive}/probe-c-memory-investigation/decisions.md (100%) rename docs/specs/{ => archive}/probe-c-memory-investigation/tasks.md (100%) rename docs/specs/{ => archive}/telemetry/design.md (100%) rename docs/specs/{ => archive}/telemetry/requirements.md (100%) rename docs/specs/{ => archive}/telemetry/tasks.md (100%) diff --git a/docs/specs/archive/README.md b/docs/specs/archive/README.md new file mode 100644 index 000000000..b649ca50f --- /dev/null +++ b/docs/specs/archive/README.md @@ -0,0 +1,36 @@ +# Archived Specs + +Specs that are complete, obsolete, or superseded. Moved here so +the active `docs/specs/` directory reflects only in-flight work. + +The session-start hook (`plugin/hooks/spec_orient.py`) walks +`docs/specs/` one level deep — `archive/` itself has no spec +files at its top level, so the discovered "spec dir" returns +`None` from `_phase_for_dir` and is silently skipped. Archived +specs do NOT appear in session orientation. + +## Archived 2026-05-12 + +| Spec | Why archived | +|---|---| +| `telemetry/` | Complete since v3.8.2; ongoing maintenance lives in code. | +| `ci-debt/` | Complete 2026-05-10 across Phases A/B/C. | +| `probe-c-memory-investigation/` | Resolved same-day with one-line `patch("threading.Thread")` fix. Lesson preserved in CLAUDE.md. | +| `ops-specs-features/` | Shipped in three phases (PR #236 / #239 / #240). | +| `ops-security-hardening/` | Implemented in PR #254 (`a5c50bd1`). | +| `larger-runners/` | Closed — Probe-C resolved the OOM concern; spec itself admits the case is smaller now. | + +## Why archive instead of delete + +Git history preserves the analysis, but archive makes the +reasoning easier to find without `git log` archaeology. Useful +when a similar problem surfaces months later and you want to +check whether you considered it before. + +## When to revisit + +- An archived spec is relevant again? Move it back to + `docs/specs/` (with a note in `decisions.md` explaining the + unarchive). +- An archived spec was wrong (the resolution didn't hold)? Open + a new spec that supersedes it; cross-link. diff --git a/docs/specs/ci-debt/design.md b/docs/specs/archive/ci-debt/design.md similarity index 100% rename from docs/specs/ci-debt/design.md rename to docs/specs/archive/ci-debt/design.md diff --git a/docs/specs/ci-debt/requirements.md b/docs/specs/archive/ci-debt/requirements.md similarity index 100% rename from docs/specs/ci-debt/requirements.md rename to docs/specs/archive/ci-debt/requirements.md diff --git a/docs/specs/ci-debt/tasks.md b/docs/specs/archive/ci-debt/tasks.md similarity index 100% rename from docs/specs/ci-debt/tasks.md rename to docs/specs/archive/ci-debt/tasks.md diff --git a/docs/specs/larger-runners/decisions.md b/docs/specs/archive/larger-runners/decisions.md similarity index 100% rename from docs/specs/larger-runners/decisions.md rename to docs/specs/archive/larger-runners/decisions.md diff --git a/docs/specs/larger-runners/tasks.md b/docs/specs/archive/larger-runners/tasks.md similarity index 100% rename from docs/specs/larger-runners/tasks.md rename to docs/specs/archive/larger-runners/tasks.md diff --git a/docs/specs/ops-security-hardening/decisions.md b/docs/specs/archive/ops-security-hardening/decisions.md similarity index 98% rename from docs/specs/ops-security-hardening/decisions.md rename to docs/specs/archive/ops-security-hardening/decisions.md index 0e71593df..630d5db99 100644 --- a/docs/specs/ops-security-hardening/decisions.md +++ b/docs/specs/archive/ops-security-hardening/decisions.md @@ -1,6 +1,7 @@ # Decisions — Ops Dashboard Security Hardening -**Status:** draft +**Status:** complete (2026-05-12) — implemented in PR #254 (squash-merge `a5c50bd1`) +**Archived:** 2026-05-12 **Owner:** Patrick **Opened:** 2026-05-11 **Trigger:** Code-review report on PR #251 (2026-05-11) flagged the ops dashboard's command-execution endpoints as vulnerable to DNS-rebinding attacks. Verified real. Not introduced by #251 — pre-existing since the ops runner shipped. diff --git a/docs/specs/ops-security-hardening/design.md b/docs/specs/archive/ops-security-hardening/design.md similarity index 100% rename from docs/specs/ops-security-hardening/design.md rename to docs/specs/archive/ops-security-hardening/design.md diff --git a/docs/specs/ops-security-hardening/requirements.md b/docs/specs/archive/ops-security-hardening/requirements.md similarity index 100% rename from docs/specs/ops-security-hardening/requirements.md rename to docs/specs/archive/ops-security-hardening/requirements.md diff --git a/docs/specs/ops-security-hardening/tasks.md b/docs/specs/archive/ops-security-hardening/tasks.md similarity index 100% rename from docs/specs/ops-security-hardening/tasks.md rename to docs/specs/archive/ops-security-hardening/tasks.md diff --git a/docs/specs/ops-specs-features/decisions.md b/docs/specs/archive/ops-specs-features/decisions.md similarity index 100% rename from docs/specs/ops-specs-features/decisions.md rename to docs/specs/archive/ops-specs-features/decisions.md diff --git a/docs/specs/ops-specs-features/tasks.md b/docs/specs/archive/ops-specs-features/tasks.md similarity index 100% rename from docs/specs/ops-specs-features/tasks.md rename to docs/specs/archive/ops-specs-features/tasks.md diff --git a/docs/specs/probe-c-memory-investigation/decisions.md b/docs/specs/archive/probe-c-memory-investigation/decisions.md similarity index 100% rename from docs/specs/probe-c-memory-investigation/decisions.md rename to docs/specs/archive/probe-c-memory-investigation/decisions.md diff --git a/docs/specs/probe-c-memory-investigation/tasks.md b/docs/specs/archive/probe-c-memory-investigation/tasks.md similarity index 100% rename from docs/specs/probe-c-memory-investigation/tasks.md rename to docs/specs/archive/probe-c-memory-investigation/tasks.md diff --git a/docs/specs/telemetry/design.md b/docs/specs/archive/telemetry/design.md similarity index 100% rename from docs/specs/telemetry/design.md rename to docs/specs/archive/telemetry/design.md diff --git a/docs/specs/telemetry/requirements.md b/docs/specs/archive/telemetry/requirements.md similarity index 100% rename from docs/specs/telemetry/requirements.md rename to docs/specs/archive/telemetry/requirements.md diff --git a/docs/specs/telemetry/tasks.md b/docs/specs/archive/telemetry/tasks.md similarity index 100% rename from docs/specs/telemetry/tasks.md rename to docs/specs/archive/telemetry/tasks.md diff --git a/docs/specs/redis-decoupling/decisions.md b/docs/specs/redis-decoupling/decisions.md index dde665ee1..1078a2986 100644 --- a/docs/specs/redis-decoupling/decisions.md +++ b/docs/specs/redis-decoupling/decisions.md @@ -1,10 +1,30 @@ # Per-decision log — Redis decoupling +**Status:** GATED (2026-05-12 grooming pass) + Append-only log. Pre-flight findings (Phase 3A tasks #1–#2) below. Per-phase execution decisions appended as commits land. --- +## Gate decision (2026-05-12) + +This spec is approved (Phase 3A done) but deliberately gated. +**Don't implement until:** the memory backend abstraction shows +real friction in production use — e.g., a user reports they want +to swap Redis for another KV store, or a feature gets blocked by +the current Redis coupling. Today, the coupling isn't blocking +anything that's been asked for. + +If the trigger fires, pick this spec up from where Phase 3A left +off; the analysis is still load-bearing. + +If the trigger never fires within ~6 months (by 2026-11-12), +revisit whether the spec itself is still relevant or should move +to archive. + +--- + ## Phase 3A pre-flight (2026-05-10) ### Task #1 — `attune_redis` PyPI state → forces **C1** (deprecate + delete)