Skip to content
Merged
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
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
avoids delayed native `title=` attributes.

### Fixed
- Tessl dashboard progress during Modal scans: skip bulk `running` placeholders for
all five Tessl rows at group start; Lint and Review (Quality) now persist
`running`→terminal via `on_scanner_progress` so only the active step shows
Running. Dashboard adds status pills for `blocked`, `stale`, `interrupted`, and
`timed_out` (`tripwire-status.js`).
- Live dashboard latest-state accuracy (partial slice 21): `db/schema.sql` adds
`dashboard_latest_runs` view (`DISTINCT ON (item_id)`); `tripwire-live.js` queries
it instead of a global `scan_runs?limit=2000` page and batches
Expand Down
2 changes: 1 addition & 1 deletion docs/ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,7 @@ separate `scan_run_scanners` row (slice 46 ✅ persist scan_run `a36cad9f`):
[#109](https://github.com/neomatrix369/tripwire/pull/109))
uses `tessl review run quality --json --workspace` and stamps `tessl_run_id`
from `tessl review view --last --json`, then seeds in-process
`_TesslIdContext["review_quality"]` for slices 49–51 (GWT-47.5). It is orthogonal to findings and to `risk_score`. **IMPLEMENTED (UI):** slice 48 synthesises "Not Available Yet" sentinel rows for Tessl capabilities absent from the scan_run (never stored as placeholders). **IMPLEMENTED (unit, slice 49):** Scenario Generation writes a real `scan_run_scanners` row (`scenario generate` → `download` into `<plugin>/evals/`, `resume_checkpoint`, mid-scan persist). **IMPLEMENTED (unit, slice 50):** Eval starts `blocked`, auto-chains after Scenario Gen when `evals/` is populated (`eval run --runs 3 -y` + `eval view`; stale on scenario re-run; project create/repair preflight). **IMPLEMENTED (unit, slice 51):** Security Review writes `"Tessl: Review (Security)"` via `_run_tessl_review("security")` after Eval; `upstream_run_ids.review_quality` is attached before invoke; expanded Security row shows linked Quality findings when that ID is populated — see
`_TesslIdContext["review_quality"]` for slices 49–51 (GWT-47.5). It is orthogonal to findings and to `risk_score`. **IMPLEMENTED (UI):** slice 48 synthesises "Not Available Yet" sentinel rows for Tessl capabilities absent from the scan_run (never stored as placeholders). **IMPLEMENTED (unit, slice 49):** Scenario Generation writes a real `scan_run_scanners` row (`scenario generate` → `download` into `<plugin>/evals/`, `resume_checkpoint`, mid-scan persist). **IMPLEMENTED:** Tessl dashboard progress — `scan_app` skips bulk `running` placeholders for the Tessl group; `run_tessl` persists Lint and Review (Quality) step-by-step via `on_scanner_progress` (not only at group end). **IMPLEMENTED (unit, slice 50):** Eval starts `blocked`, auto-chains after Scenario Gen when `evals/` is populated (`eval run --runs 3 -y` + `eval view`; stale on scenario re-run; project create/repair preflight). **IMPLEMENTED (unit, slice 51):** Security Review writes `"Tessl: Review (Security)"` via `_run_tessl_review("security")` after Eval; `upstream_run_ids.review_quality` is attached before invoke; expanded Security row shows linked Quality findings when that ID is populated — see
[design/tessl-5-row-expansion.md](./design/tessl-5-row-expansion.md) and slices
49–51; scenario→eval pipeline is generate → download → `eval run` on disk
`evals/` (sandbox-populated; host `evals/` is not a vuln-scan input — packing
Expand Down
5 changes: 5 additions & 0 deletions docs/STATUS.md
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,11 @@ Reachable through production entry points / config:
stamp, `resume_checkpoint` + mid-scan persist via `on_scanner_progress`.
Missing token → `needs_setup`; missing `.tessl-plugin/plugin.json` → `failed`.
IMPLEMENTED (unit) — `sandbox/scanners.py` / `sandbox/scan_app.py` (slice 49 ✅ #112)
- Tessl dashboard mid-scan progress — `on_scanner_start` no longer bulk-inserts
all five Tessl sources as `running`; `run_tessl()` emits per-step progress for
Lint and Review (Quality) via `on_scanner_progress` (Scenario/Eval/Security
already did). Fixes frozen-all-Running appearance during Modal scans.
IMPLEMENTED — `sandbox/scanners.py` / `sandbox/scan_app.py` / `tripwire-status.js`
- Tessl Eval auto-chain — `run_tessl()` emits `"Tessl: Eval"` as `blocked` before
Scenario Generation, then auto-chains to `queued`→`running` when generation
completes and `<plugin>/evals/` has scenarios; `tessl eval run --runs 3 -y
Expand Down
2 changes: 2 additions & 0 deletions docs/plan/DECISIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -187,5 +187,7 @@
| 2026-08-25 | planning | Amended slices 26+28 (not new slice) | `/tw-verify` Quality column (`N/100` from `items.quality_score`) + blocked-note footer de-dupe. Quality-only metrics; amend-in-place like slice 42. Slice 30 one-line sync. Skill implementation deferred to `slice/28-*` execution. DECIDED |
| 2026-08-25 | slice-28 | Waive Before-Check: 26+27 gate PASS on main | Formal Wave H gate-evidence for 26/27 remains PLANNED on `main` (Frontline PRs #78/#80 never merged to main). Substitute: Phase-1 `agent-hooks` skills + this PR publishes `docs/user-guide/frontline-output-contract.md` as output SSOT; enable/disable skills already on main. (waived: DECISIONS 2026-08-25) |
| 2026-08-25 | slice-28 | Quality + footer IMPLEMENTED | Restored Frontline `guard/verify.py` onto `slice/28-tw-verify-quality`; Quality `N/100` + blocked footer; agent-hooks `tw-verify` / `tw-self-check` / `tw-disable` synced. IMPLEMENTED |
| 2026-08-25 | planning | Added slice 54 — quality score tabs | Wave J follow-on (not new wave). Embed **Quality ≥ 80** / **Rest** tabs in `Tripwire.dc.html`; skills only; threshold 80 on Tessl `items.quality_score`. Depends 42+47. Stub: `docs/plan/slices/10-J-dashboard-data-quality/slice-54-quality-score-tabs.md`. EFP continuation Path B. DECIDED |
| 2026-08-25 | planning | **SUPERSEDED** slice 54 → 42 A14–A15 | User confirmed blend into existing slice. A14 = quality tab filter (≥80 vs Rest); A15 = counts + empty-state copy. GWT-42.11–42.16; sub-task 13; slice-54 stub deleted. No new plan/wave. DECIDED |
| 2026-08-25 | sync-docs | Slice 28 feature-delta discoverability | PROGRESS execution-order 🔀; ARCHITECTURE Wave H Phase 1; docs hub + reading-router-results Tessl quality ↔ `/tw-verify` Quality; STATUS PROPOSED/Future SUPERSEDED for Phase 1. APPLIED |
| 2026-08-25 | sync-docs | Slice 28 Sources attribution | Discoverability: agent-hooks README, docs hub, ARCHITECTURE/STATUS Wave H, reading-router-results, slice stub, tw-verify skill intro — Quality=Tessl / Status=Cisco+Snyk. Contract + verify.py already had Sources. README/AGENTS NO_CHANGE. APPLIED |
7 changes: 5 additions & 2 deletions docs/plan/PROGRESS.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
| 12 | [`12-L-…`](slices/12-L-tessl-5-row-expansion/) | **L — Tessl 5-row expansion** | 45 ✅ · 46 ✅ · 47 ✅ · 48 ✅ · 49 ✅ · 50 ✅ · **51** 🔀 · 52 📋 | 45–50 ✅ · **51** 🔀 |
| 13 | [`13-M-…`](slices/13-M-llm-usage-tracking/) | **M — LLM usage / cost observability** | **53** | 📋 plan-only (ADR-0016 follow-on; not J/L/G) |
| 11 | [`11-K-…`](slices/11-K-docs-ux-plain-language/) | **K — Docs UX plain language + compaction** | **44** | 🔀 |
| 10 | [`10-J-…`](slices/10-J-dashboard-data-quality/) | **J — Dashboard Data Quality Fixes** | 42 | A1–A13 ✅ |
| 10 | [`10-J-…`](slices/10-J-dashboard-data-quality/) | **J — Dashboard Data Quality Fixes** | 42 (A14–A15 📋) | A1–A13 ✅ · quality tabs delta |
| 9 | [`09-I-…`](slices/09-I-landing-intro-restyle/) | **I — Landing Intro + Visual Refresh** | 41 ✅ · 43 | 41 ✅ · 43 ✅ |
| 1 | [`01-A-…`](slices/01-A-live-path-gwt/) | **A — Live path + GWT** | 1 → 2 → 3 · 4 | ✅ · 4 📦 |
| 2 | [`02-B-…`](slices/02-B-characterization-evidence/) | **B — Characterization + evidence sync** | 6 → 5 | ✅ |
Expand Down Expand Up @@ -161,7 +161,7 @@ Plan", 2026-08-15). Governance blocks *merge*, not prototyping.
### J — Dashboard Data Quality Fixes
| # | Slice | MoSCoW | Status | Started | Completed | Est. time |
|---|-------|--------|--------|---------|-----------|-----------|
| 42 | [slice-42-dashboard-data-quality-fixes](slices/10-J-dashboard-data-quality/slice-42-dashboard-data-quality-fixes.md) | Must | ✅ PASSED (A9–A13 · [#98](https://github.com/neomatrix369/tripwire/pull/98); A1–A8 #95) | 2026-08-19 | — | ~75 min delta |
| 42 | [slice-42-dashboard-data-quality-fixes](slices/10-J-dashboard-data-quality/slice-42-dashboard-data-quality-fixes.md) | Must | 📋 PLANNED (A14–A15 delta reopen) | — | — | ~45 min delta |

### K — Docs UX plain language + compaction
| # | Slice | MoSCoW | Status | Started | Completed | Est. time |
Expand Down Expand Up @@ -198,6 +198,7 @@ Plan", 2026-08-15). Governance blocks *merge*, not prototyping.
| 4 (historical) | Remotion sibling + VO assets missing | 📦 closed with demo/hackathon deferral — reinstate slice 4 if film day returns |

## Forward Roadmap
- Wave **J** (slice **42** A14–A15) dashboard quality tabs — **📋 plan-only** — embed ≥80 vs Rest triage in `prototypes/dc-dashboard/`; execute when explicitly started (`slice/42-quality-score-tabs`).
- Wave **M** (slice 53) LLM usage / cost observability is **📋 plan-only** — ADR-0016 follow-on; execute when explicitly started (`slice/53-llm-usage-tracking`).
- Waves **A–C**, coverage Slice 14, and Slice 17 are merged and closed. Slice 15 is retained as a deferred claim-audit artifact, not active work.
- **Wave H (Frontline):** plan-only stubs 23–39 on branch `frontline-hackathon-london-2026-agent-hooks`. Execute Musts 23→32 with human tests after H1/H2 and HARD GATE at 32 before Should work.
Expand Down Expand Up @@ -274,3 +275,5 @@ Plan", 2026-08-15). Governance blocks *merge*, not prototyping.
| 2026-08-25 | slice/51-review-security | nw-review | 51 | APPROVED | software-crafter-reviewer; After-Checks ticked; still 🔨 until commit/PR |
| 2026-08-25 | slice/51-review-security | clean-commit | 51 | 🔀 ON BRANCH | `6cbded7` feat + `c96c459` style; pushed; awaiting `/create-pr` |
| 2026-08-25 | slice/51-review-security | sync-docs | 51 | APPLIED | Trackers 🔨→🔀; prerequisites + OPTIONAL_SCANNER_KEYS name Security; adapters heading; README/AGENTS NO_CHANGE |
| 2026-08-25 | main / plan | enhanced-flow-planner Path B | 54 | 📋 PLANNED | Dashboard quality tabs ≥80 vs Rest; Wave J; depends 42+47 |
| 2026-08-25 | planning | Blended slice 54 → 42 A14–A15 | 42 | 📋 delta reopen | Quality tabs augment slice 42 in place; slice 54 stub removed; branch `slice/42-quality-score-tabs`. DECIDED |
4 changes: 2 additions & 2 deletions docs/plan/TRAIL.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ Groups are ordered by when the wave ran (or will run), not by slice number.
| 8 | `slices/08-H-agent-guard-integration/` (stubs pending) | **H — Claude Code Agent Guard integration** | H0 governance → H1–H7 (hackathon plan §9 steps 0–7) | 🔨 |
| 8 | [`slices/08-H-frontline-agent-hooks/`](slices/08-H-frontline-agent-hooks/) | **H — Frontline agent hooks** | 23→32 Must · 33–38 Should · 39 Could | 📋 plan-only |
| 9 | [`slices/09-I-landing-intro-restyle/`](slices/09-I-landing-intro-restyle/) | **I — Landing Intro + Visual Refresh** | 41 ✅ · **43** ✅ | [#96](https://github.com/neomatrix369/tripwire/pull/96) |
| 10 | [`slices/10-J-dashboard-data-quality/`](slices/10-J-dashboard-data-quality/) | **J — Dashboard Data Quality Fixes** | 42 ✅ A1–A13 ([#98](https://github.com/neomatrix369/tripwire/pull/98)) · A1–A8 [#95](https://github.com/neomatrix369/tripwire/pull/95) | — |
| 10 | [`slices/10-J-dashboard-data-quality/`](slices/10-J-dashboard-data-quality/) | **J — Dashboard Data Quality Fixes** | 42 ✅ A1–A13 ([#98](https://github.com/neomatrix369/tripwire/pull/98)) · **A14–A15** 📋 quality tabs | — |
| 11 | [`slices/11-K-docs-ux-plain-language/`](slices/11-K-docs-ux-plain-language/) | **K — Docs UX plain language + compaction** | **44** 🔀 | — |

**Status legend**: `📋 PLANNED · 🔨 IN PROGRESS · ✅ PASSED · 🔀 ON BRANCH · 🔴 BLOCKED · 📦 CLOSED — DEFERRED/WON'T`
Expand Down Expand Up @@ -246,7 +246,7 @@ Audit report: `~/.claude/plans/iterate-through-all-of-lovely-stearns.md`

| # | File | Name | MoSCoW | Status | Depends on | Issue | Read time |
|---|------|------|--------|--------|------------|-------|-----------|
| 42 | [slice-42-dashboard-data-quality-fixes](slices/10-J-dashboard-data-quality/slice-42-dashboard-data-quality-fixes.md) | Dashboard Data Quality Fixes (A1–A13 Tessl quality + tooltips + labels) | Must | | none | [#95](https://github.com/neomatrix369/tripwire/pull/95) · [#98](https://github.com/neomatrix369/tripwire/pull/98) | ~3 min |
| 42 | [slice-42-dashboard-data-quality-fixes](slices/10-J-dashboard-data-quality/slice-42-dashboard-data-quality-fixes.md) | Dashboard Data Quality Fixes (A1–A13 ✅ + **A14–A15** quality tabs) | Must | 📋 (A14–A15 delta) | none | [#95](https://github.com/neomatrix369/tripwire/pull/95) · [#98](https://github.com/neomatrix369/tripwire/pull/98) | ~3 min + ~45 min delta |

### K — Docs UX plain language + compaction (opened 2026-08-20)

Expand Down
Loading
Loading