Approvals Viewer

repo: ~/Projects/approvals-viewer · 21 commits · 0 in last 24h, 0 in last 7d ·

Search the build

21 commits indexed

  1. c9833a1 2026-09-14 approvals-viewer: implement openAudit() — Audit All button was a dead handler
  2. c9cbd5f 2026-09-14 TK-11685: approval-time freshness re-check guard (read-only, advisory)
  3. a3df63a 2026-08-25 creds-safe fetch guard: resolve relative fetch vs credential-free location (creds-in-URL trap)
  4. 7bb6722 2026-08-20 nav-agent: sync v1.3 (host left-sidebar collapse on load)
  5. a1a138e 2026-08-19 nav-agent: List data full-width tight columns (grid) — layout fix
  6. b58ccd4 2026-08-19 Refresh nav-agent to v1.2 (adds kv-list compact List view, default-off) — Steve-approved public surface
  7. a8dae36 2026-08-19 approvals-viewer: gitignore ratings.json — live queue state, not source
  8. 69d3d3a 2026-08-19 approvals-viewer: add star ratings (1-5) + sort-by-rating/category/security
  9. 528c44e 2026-08-13 approvals-viewer: serve public/ static assets so /nav-agent/* resolves (was 404)
  10. af6b411 2026-08-13 nav-agent: universal grid-controls drop-in on internal dashboard/command-center pages (STRONG-only)
  11. a188fef 2026-08-11 chore: harden /api/undo (path-traversal guard + decision whitelist), session-close lint
  12. f3b563d 2026-08-11 approvals-viewer UI: always show action buttons + fetch error/retry so it never hangs on Loading
  13. 06062c8 2026-08-11 approvals-viewer: re-enable Basic auth + pin default port 9795 (public via CF tunnel)
  14. 33ba103 2026-07-31 drop basic-auth (localhost-only tool)
  15. 65b30e1 2026-07-31 pin approvals-swipe to stable port 9788
  16. 4cc1b1d 2026-07-31 approvals yes/no swipe viewer
  17. 4529ded 2026-07-28 rollup: detect gated packet-memos per task (real convergence signal)
  18. 9ff4214 2026-07-28 add top-10 fan-out rollup board (:9793) tracking TK-10012 task states
  19. a0197a4 2026-07-28 approvals-viewer: fix blank page — nested-quote SyntaxError in inline handlers
  20. ecc4f6c 2026-07-28 approvals-viewer: skip auth for loopback (fixes blank page)
  21. be8f9d3 2026-07-28 approvals-viewer: yes/no board for the pending-approval queue

Authors

Agents used

  • none detected

Skills used

  • /date1
  • /rating1
  • /title1
  • /file1
  • /claude1
  • /code1
  • /product1
  • /products1
  • /scheduled1
  • /warns1
  • /freshness1
  • /freshness-guard1
  • /category1
  • /security1
  • /rate1
  • /memos1
  • /nav-agent1
  • /command-center1
  • /undo1
  • /retry1
  • /drafts1
  • /yolo-queue1
  • /pending-approval1
  • /reversibility1

Creative ideas + design notes

Commits with substantial prose (≥120 chars) — the rationale behind each move.

c9833a1 · 2026-09-14 · approvals-viewer: implement openAudit() — Audit All button was a dead handler
The "🔍 Audit All" button called openAudit(), which was defined nowhere
(confirmed live: PAGEERROR "openAudit is not defined" on click). Add a
read-only full-queue overlay that renders every loaded memo at once
(chip/date/rating/title/file + collapsible body via <details>), reusing
md()/fmtDate() and card styles. Esc or ✕ closes; swiper keys are
suppressed while open so arrow-keys can't fire decisions behind it.
Also add the missing .b-audit style. No new writes — purely client-side.

Verified in Chrome: typeof openAudit === 'function', overlay shows all 77
items, memo bodies expand, Esc closes, swiper state restored, no pageerror.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X7mfnaSD5EB3DGZcaamU8A
c9cbd5f · 2026-09-14 · TK-11685: approval-time freshness re-check guard (read-only, advisory)
Closes the governance gap where a delete list could be approved against a
STALE enumeration: an approval fired at 18:26Z for a list a sibling lane had
already invalidated at 15:43Z, because nothing joined a fresh enumeration
against concurrent findings before the memo reached Steve.

freshness-guard.js joins a gated memo's enumerated target set (Shopify
variant/product ids, DW-SKUs, GMC offer-ids, /products/ handles) against every
newer concurrent finding — the executed-reversible ledger (already-done), memos
since filed to _done/_resolved/_superseded, other open memos, and decision
logs — and flags any target a finding newer than the memo's as-of has touched,
surfacing "N of M targets are now stale, do NOT execute blind". Precision
anchors + now-clamp (future expiry/scheduled dates never corrupt as-of or a
finding ts) + Drafted-date as-of + NOT_MEASURED-is-never-PASS. Verdicts in the
fleet-health PASS/WARN/FAIL vocabulary.

READ-ONLY + ADVISORY throughout: it annotates/warns and surfaces the memo's own
re-verify command; it NEVER approves, rejects, edits, moves, or executes any
memo, delete, or target action, and never runs the memo's re-verify command
itself.

- freshness-guard-cli.js: one memo / --all / --stale / --json
- server.js: read-only GET /api/freshness?file=<memo.md> (additive, guarded)
- test/freshness-guard.test.js: NEGATIVE TEST — injects the concurrent-
  invalidation fault, proves STALE; proves FRESH on a still-fresh set; proves
  the future-date clamp. 19/19 assertions pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: 963c1354-d10a-451f-8e5b-936663056ab7
a3df63a · 2026-08-25 · creds-safe fetch guard: resolve relative fetch vs credential-free location (creds-in-URL trap)
Fleet inoculation — opening this basic-auth app with credentials in the URL
poisoned document.baseURI and made relative fetch('/api/…') throw. Guard resolves
non-absolute request URLs against location instead. Ref: creds-in-url-fetch-guard-fleet-pattern.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
69d3d3a · 2026-08-19 · approvals-viewer: add star ratings (1-5) + sort-by-rating/category/security
- /api/rate POST endpoint stores per-memo ratings in ratings.json
- /api/memos?sort= supports: mtime (default), rating, category, security
- Star widget (★) on each card, clickable; keyboard shortcut 1-5 to rate
- Rating badge chip in header row + rating-first sort surfaces urgent items
- Toggle off same star to clear rating
528c44e · 2026-08-13 · approvals-viewer: serve public/ static assets so /nav-agent/* resolves (was 404)
Raw Node http server had no static route; nav-agent.js/.css 404'd. Added a
path-traversal-guarded static handler for public/ before the 404 fallback.
Additive + reversible; asset stays behind Basic auth.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
a0197a4 · 2026-07-28 · approvals-viewer: fix blank page — nested-quote SyntaxError in inline handlers
The card action buttons + memo toggle used single-quoted inline onclick handlers
inside single-quoted JS strings; the escaped quotes collapsed and broke the whole
inline script (page stuck on 'loading…'). Switched action buttons to
data-attributes + one delegated click listener; memo toggle to a named tog().
ecc4f6c · 2026-07-28 · approvals-viewer: skip auth for loopback (fixes blank page)
Chrome drops the userinfo credential on the follow-up /api/drafts fetch, so the
data call 401'd and the page rendered blank. Loopback (this Mac) is now trusted
and served without auth; remote callers still need basic auth admin/DW2024!.
be8f9d3 · 2026-07-28 · approvals-viewer: yes/no board for the pending-approval queue
Zero-dep Node viewer (basic auth admin/DW2024!) on :9792. Reads
~/.claude/yolo-queue/pending-approval/*.md, shows gate/DTD/reversibility +
Claude's recommendation, and records Approve/Defer/Block per draft to
decisions.json, mirrored into cncp-approvals-state.json. Decision-capture only
— nothing is executed. Pre-seeded with the 15 quick-triage batch-1 approvals.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

File tree

11 files tracked. Click any to browse the source at HEAD.

Other build journals

← Approval Viewer  ·  all 4 projects  ·  Architecturalwallcoverings →

Export

commits.csv · feed.atom · project.json · commits.json

rendered in 0ms