Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions docs/specs/archive/README.md
Original file line number Diff line number Diff line change
@@ -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.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
File renamed without changes.
File renamed without changes.
20 changes: 20 additions & 0 deletions docs/specs/redis-decoupling/decisions.md
Original file line number Diff line number Diff line change
@@ -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)
Expand Down
Loading