{"slug":"agent-cabinet","total":103,"limit":100,"offset":0,"since":null,"commits":[{"hash":"c7d1036","date":"2026-09-25 01:05:11 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-25T01:04:41 (1 data files) — front-page-audit/proof/requery-ABC-2026-09-25T07-19-12-871Z.json","body":""},{"hash":"ae0b12d","date":"2026-09-25 00:34:30 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-25T00:34:03 (3 data files) — front-page-audit/proof/pilot-activation-2026-09-25T07-02-36-236Z.json front-page-audit/proof/pilot-activation-2026-09-25T07-09-21-243Z.json front-page-audit/proof/pilot-activation-2026-09-25T07-15-04-827Z.json","body":""},{"hash":"faab65a","date":"2026-09-25 00:04:01 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-25T00:03:17 (3 data files) — front-page-audit/proof/requery-ABC-2026-09-25T06-34-39-255Z.json front-page-audit/proof/requery-AC-2026-09-25T06-54-46-927Z.json front-page-audit/proof/requery-AC-2026-09-25T06-58-57-402Z.json","body":""},{"hash":"840b826","date":"2026-09-24 23:33:14 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-24T23:32:41 (2 data files) — front-page-audit/proof/requery-ABC-2026-09-25T06-18-57-161Z.json front-page-audit/proof/requery-AC-2026-09-25T06-17-09-104Z.json","body":""},{"hash":"715ce58","date":"2026-09-23 15:22:34 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-23T15:21:10 (1 data files) — front-page-audit/proof/live-canary-delta-webkit.json","body":""},{"hash":"5b74e92","date":"2026-09-23 13:50:50 -0700","author":"Steve","subject":"proof(prove-activation): kill every spawned server on any throw/interrupt so the next run can't test a stale one","body":"Register each spawned server/static handle in a module-level list and add a cleanup() wired to process exit and SIGINT (exit 130); move the browser launch/context/page setup inside run()'s try with a finally that always closes the browser, so a per-engine launch failure is caught instead of aborting the process and orphaning a bound port. Refuse to start when a pilot port is already in use rather than silently attaching to an orphan.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01UzbjT22E2Q7Q64Wy8xMeH5"},{"hash":"56486bd","date":"2026-09-23 13:47:31 -0700","author":"Steve","subject":"proof(live-ux-canary): gate marker against the bundle hash computed at startup, not a literal","body":"Compute the expected marker the way redeploy-ux-delta.sh does (sha256[:12] of the canonical bundle) so a routine rebuild no longer reds the whole fleet, while a site left on a stale bundle is still caught. Unreadable bundle -> markerCanonical false with a surfaced reason, never a silent pass.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01UzbjT22E2Q7Q64Wy8xMeH5"},{"hash":"65c6777","date":"2026-09-23 13:31:10 -0700","author":"Steve Abrams","subject":"proof(front-page): harden ux-primitives activation gate + dedupe","body":"Addresses the 5 review findings on the pending front-page-audit/proof change set:\n- Fold SITE env filter into prove-activation.mjs and drop the byte-identical\n  prove-activation-one.mjs — one gate, no silent drift between two copies.\n- Tear the site server down in try/finally (+ boot-error catch) so a slow boot\n  or a mid-loop throw no longer orphans a node server / leaves a stuck port.\n- slowRun: bounded waitForFunction for real product children instead of the\n  fixed delay+2s clock the deferred bundle could outrun (kills the false-FAIL).\n- Page errors: baseline-subtract against the bundle-absent runs + BUNDLE_RX\n  filter, so a site's own uncaught exception can't red the gate as a \"bundle\"\n  failure; also record slowRun page errors in presentPageErr.\n- live-ux-canary: expect marker via UX_MARKER (mirrors deploy $CANON) or a\n  well-formed v<semver>#<hash> shape, not a pinned content hash that would\n  red the whole fleet on the next healthy rebuild.\n\nSmoke-tested: SITE=flockedwallpaper -> 1/1 all-engine PASS.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01AWMadYahw5wRTf7KcwBLr1"},{"hash":"f4b8079","date":"2026-09-23 13:15:18 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-23T13:13:50 (1 data files) — showroom-audit/runs/2026-09-23T20-12-52Z-TK-11860-all-others-showroom-enum.jsonl","body":""},{"hash":"acece16","date":"2026-09-23 12:43:39 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-23T12:42:16 (1 data files) — front-page-audit/proof/live-canary-delta-chromium.json","body":""},{"hash":"424746b","date":"2026-09-23 12:12:10 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-23T12:09:58 (3 data files) — front-page-audit/proof/live-canary-2026-09-23-chromium.json front-page-audit/proof/pilot-activation-2026-09-23T18-55-09-823Z.json front-page-audit/proof/pilot-activation-2026-09-23T19-08-42-765Z.json","body":""},{"hash":"e13482b","date":"2026-09-23 07:26:44 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-23T07:25:20 (1 data files) — front-page-audit/proof/pilot-activation-2026-09-23T14-13-04-393Z.json","body":""},{"hash":"31ca1cf","date":"2026-09-22 17:17:05 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-22T17:15:32 (1 data files) — front-page-audit/proof/pilot-activation-GREEN-1800s.json","body":""},{"hash":"bca6c2b","date":"2026-09-22 16:45:27 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-22T16:42:26 (2 data files) — front-page-audit/proof/pilot-activation-GREEN-v1.1.1.json front-page-audit/proof/pilot-activation-RED-oldbundle.json","body":""},{"hash":"1e85c63","date":"2026-09-22 16:26:36 -0700","author":"Steve Abrams","subject":"Fix code review findings: security + proof-validity issues","body":"1. Hardcoded CRCP session cookie: read SID from process.env instead\n   (serve-fb.cjs, serve-probe.cjs, serve-real.cjs:1-2)\n\n2. All-interfaces bind (.listen(0) with no host): add '127.0.0.1' to all\n   four repro/proof servers (serve-fb/probe/real/repro.cjs/.js)\n\n3. Path traversal in serve-repro.js: add containment guard\n   (resolved.startsWith(dir) check before fs.readFile)\n\n4. prove-negctl.mjs false-green on flocked static pilot: mock /api/products\n   so flocked renders actual product grid data when bundle absent\n\nAll findings verified against actual code; fixes applied and tested."},{"hash":"46b9a82","date":"2026-09-22 16:11:52 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-22T16:09:18 (1 data files) — front-page-audit/proof/pilot-activation-2026-09-22T23-01-53-753Z.json","body":""},{"hash":"169f714","date":"2026-09-22 15:38:46 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-22T15:36:13 (3 data files) — front-page-audit/proof/pilot-negctl-2026-09-22T22-07-37-004Z.json front-page-audit/proof/pilot-negctl-2026-09-22T22-12-13-608Z.json front-page-audit/proof/pilot-negctl-2026-09-22T22-15-31-527Z.json","body":""},{"hash":"0d41932","date":"2026-09-22 14:30:00 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-22T14:27:31 (1 data files) — front-page-audit/proof/pilot-proof-2026-09-22T21-10-42-273Z.json","body":""},{"hash":"86cfdef","date":"2026-09-22 12:21:49 -0700","author":"Steve Abrams","subject":"cabinet: flatten vp-consulting into consulting-agent (TK-12015)","body":"DECISION (Steve, 2026-09-22): remove the single-steward vp-consulting officer\nlayer; consulting-agent is now the single owner of the Consulting business and\nreports directly to Steve. Supersedes the 2026-09-20 KEEP-three-layers ruling.\nvp-abramsego and all other officers untouched.\n\nReference-safety (Cody: repoint callers BEFORE archiving the officer): cabinet.yaml\nbranch re-rooted at consulting-agent (dropped the redundant consulting-agent\ndirector); consulting-agent.md absorbed the officer triggers + APPROVE/REVISE/BLOCK\nposture + HARD RAILS; consulting/SKILL.md + ticketmaster/SKILL.md ownership/routing\nlines repointed; a2a-lab card + evals repointed; vp-consulting.md archived to\n~/.claude/agents/_archived/. server.js + pyramid.html are data-driven from this\nYAML. Zero dangling vp-consulting node on the :9766 org-chart.\n\nThe cabinet.yaml content landed via auto-data-snapshot f6eb951; this commit is the\nsemantic record with attribution trailers.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_38a23781-1663-4f8e-807d-e37d704feaad"},{"hash":"f6eb951","date":"2026-09-22 12:18:51 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-22T12:15:47 (1 data files) — cabinet.yaml","body":""},{"hash":"2a3106a","date":"2026-09-22 11:56:29 -0700","author":"Steve Abrams","subject":"cabinet: fold prompt-engineer into ai-engineer (TK-12015)","body":"Absorb prompt-optimization scope into ai-engineer and remove the deleted\nprompt-engineer agent from every live router surface: the vp-engineering\ndirector list (cabinet.yaml), the RELATED-agents map incl. the dangling\n'prompt-engineer' key (server.js), and the pyramid viz node list\n(pyramid.html). No dangling director remains on the :9766 org-chart.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01D2KFGQK7p7ahEzug7HBMZF"},{"hash":"a61854e","date":"2026-09-20 11:23:06 -0700","author":"Steve Abrams","subject":"cabinet: ungate both — merge dw-linkedin into linkedin-agent; keep consulting trio","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01E1LJQ2s1FW7mBAJtLCZ5Un"},{"hash":"b47bb5a","date":"2026-09-20 11:17:49 -0700","author":"Steve Abrams","subject":"cabinet: chief-of-staff consolidation — merge 5 dev-pack pairs, wire 17 orphans, log it","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01E1LJQ2s1FW7mBAJtLCZ5Un"},{"hash":"7cf676b","date":"2026-09-20 11:10:46 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-20T11:06:41 (1 data files) — cabinet.yaml","body":""},{"hash":"3c74978","date":"2026-09-11 09:54:12 -0700","author":"Steve Abrams","subject":"Add terminal wait supervisor agent","body":""},{"hash":"644063b","date":"2026-09-08 15:14:08 -0700","author":"steve","subject":"showroom audit: TK-11307 MDC baseline (Google channel + main-store browse grid leaks)","body":""},{"hash":"e2154a7","date":"2026-09-03 12:56:43 -0700","author":"Steve Abrams","subject":"showroom-line-steward: TK-11186 read-only verification run (PASS)","body":""},{"hash":"806fb7e","date":"2026-09-03 12:02:01 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-03T11:49:57 (2 data files) — showroom-audit/runs/2026-09-03T18-53-18Z.jsonl showroom-audit/runs/2026-09-03T18:49:08Z.jsonl","body":""},{"hash":"10c871d","date":"2026-09-03 11:18:51 -0700","author":"Steve Abrams","subject":"showroom-line-steward: first baseline canary pass (PJ) — FAIL, Google feed leak now active (131 PJ)","body":""},{"hash":"a06046b","date":"2026-09-03 10:59:50 -0700","author":"agent-architect","subject":"cabinet: register showroom-line-steward under vp-dw-commerce","body":"Enforces the showroom-only vendor rule (addressable but not discoverable,\ncodified 2026-09-03): keeps showroom lines off all push/browse surfaces +\nthe Google feed while keeping direct URL/search reachable; keys off\nshowroom-vendors.json; read-only audits + leak canary run free, all\nenforcement edits gate to pending-approval.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BgCcr9t5zNGdb43pS4f1ks"},{"hash":"39b87c2","date":"2026-08-28 08:32:18 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-28T08:24:14 (1 data files) — cabinet.yaml","body":""},{"hash":"b017d70","date":"2026-08-28 08:26:55 -0700","author":"Steve Abrams","subject":"repair cabinet agent routing","body":""},{"hash":"a43101a","date":"2026-08-28 08:22:04 -0700","author":"Steve Abrams","subject":"fold Claude-only skills into four Codex agents","body":""},{"hash":"6e2d272","date":"2026-08-26 12:17:49 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-26T12:08:58 (6 data files) — front-page-audit/screens/crcp/verify-live/header-1280.png front-page-audit/screens/crcp/verify-live/header-390.png front-page-audit/screens/crcp/verify-live/list-1000.png front-page-audit/screens/crcp/verify-live/list-1280.png front-page-audit/screens/crcp/verify-live/list-390.png","body":""},{"hash":"9e33911","date":"2026-08-26 11:38:53 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-26T11:30:17 (12 data files) — front-page-audit/screens/crcp/2026-08-26T18-12-34Z/after/grid-1000.png front-page-audit/screens/crcp/2026-08-26T18-12-34Z/after/grid-1280.png front-page-audit/screens/crcp/2026-08-26T18-12-34Z/after/grid-390.png front-page-audit/screens/crcp/2026-08-26T18-12-34Z/after/list-1000.png front-page-audit/screens/crcp/2026-08-26T18-12-34Z/after/list-1280.png","body":""},{"hash":"1d90690","date":"2026-08-26 10:23:08 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-26T10:15:42 (25 data files) — front-page-audit/runs/20260826T171525Z.jsonl front-page-audit/screens/crcp/2026-08-26T17-19-33-013Z/full-1000.png front-page-audit/screens/crcp/2026-08-26T17-19-33-013Z/full-1280.png front-page-audit/screens/crcp/2026-08-26T17-19-33-013Z/full-390.png front-page-audit/screens/crcp/2026-08-26T17-19-33-013Z/pill-1000.png","body":""},{"hash":"f387fdc","date":"2026-08-05 07:46:00 -0700","author":"Steve Abrams","subject":"Register app-store-agent as vp-engineering director (5-gate submission-readiness graph)","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"c58af7f","date":"2026-07-23 07:31:28 -0700","author":"Steve Abrams","subject":"cabinet: click any node → inline expandable modal (description, tools, source, open/run)","body":""},{"hash":"8058934","date":"2026-07-22 21:33:22 -0700","author":"Steve Abrams","subject":"cabinet.aa vhost: IP-bind :80 too (agentabrams default_server outranks wildcard)","body":""},{"hash":"a8f270e","date":"2026-07-22 21:23:47 -0700","author":"Steve Abrams","subject":"Add cabinet.agentabrams.com nginx vhost draft (gated go-live)","body":""},{"hash":"9ba0bd6","date":"2026-07-17 07:28:32 -0700","author":"Steve","subject":"Add Officer Consulting (vp-consulting) to the cabinet","body":""},{"hash":"6b0673e","date":"2026-07-07 08:56:46 -0700","author":"Steve Abrams","subject":"auto-save: 2026-07-07T08:56:34 (1 files) — package-lock.json","body":""},{"hash":"aea1f3a","date":"2026-07-07 07:07:06 -0700","author":"Steve","subject":"Add vp-cncp (CNCP Officer) — cross-cutting flow officer that orchestrates all officers, clears approvals/tasks/parking-lot via CNCP","body":""},{"hash":"5c4f586","date":"2026-07-03 08:07:48 -0700","author":"Steve","subject":"chore: macstudio3 migration — reconcile from mac2 + repoint paths (stevestudio2→macstudio3, node/npm/npx→/opt/homebrew)","body":""},{"hash":"b6a5bb2","date":"2026-07-02 10:48:55 -0700","author":"Steve Abrams","subject":"Register internal-line-viewer skill under vp-dw-commerce (standing spec for internal basic-auth line viewers; reference astek-landing :9944)","body":""},{"hash":"c799e8a","date":"2026-07-02 09:38:14 -0700","author":"Steve","subject":"cabinet: retire abramsego-orchestrator, fold Ultron orchestration into vp-abramsego (dtd 3/3 — honor 'fewer agents' principle the Contrarian flagged)","body":""},{"hash":"9781d45","date":"2026-07-02 08:32:58 -0700","author":"Steve","subject":"cabinet: register design-trend-scout under vp-abramsego — standing market-research strategist (scout top-sellers → gap-check WPB → brief originals for the licensing engine)","body":""},{"hash":"4d4a7ee","date":"2026-07-02 08:21:01 -0700","author":"Steve","subject":"cabinet: register abramsego-orchestrator (Ultron) + web-extract + ollama-model-eval under vp-abramsego (from 7-post research fan-out)","body":""},{"hash":"1538413","date":"2026-07-01 15:57:06 -0700","author":"Steve","subject":"cabinet: add vp-abramsego officer + abramsego-agent steward + design-research/golive skills (AbramsEgo was unowned; Steve-directed monetization build-out)","body":""},{"hash":"d41633a","date":"2026-06-24 16:25:28 -0700","author":"Steve Abrams","subject":"Point fleet-lifecycle-steward at real registry path + DARK/ZOMBIE invariants","body":""},{"hash":"96d3e46","date":"2026-06-24 16:22:58 -0700","author":"Steve Abrams","subject":"Add fleet-lifecycle-steward officer under vp-operations","body":"Owns 'no DW agent sleeps silently; stale ones retire only with Steve sign-off'.\nReconciles live fleet vs the centralized service-registry contract (DTD verdict A).\nJob 1 keep-alive = autonomous resurrect; Job 2 retirement = auto-flag to pending-approval (gated)."},{"hash":"3638f33","date":"2026-06-23 14:55:42 -0700","author":"Steve","subject":"Rename wallco-agent director to wallpapersback-agent (wallco.ai retired; brand=Wallpaper's Back)","body":""},{"hash":"3d37973","date":"2026-06-23 13:15:29 -0700","author":"Steve","subject":"Split WallpapersBack marketing out of DW Marketing: new wallpapersback-marketing director under vp-special-projects; fence vp-dw-marketing to DW-only","body":""},{"hash":"27e75ef","date":"2026-06-22 12:42:34 -0700","author":"Steve Abrams","subject":"Register commercial-quote skill for B2B Koroseal quote requests under vp-dw-commerce","body":""},{"hash":"625bc69","date":"2026-06-22 12:05:59 -0700","author":"Steve Abrams","subject":"auto-save: 2026-06-22T12:05:49 (1 files) — cabinet.yaml","body":""},{"hash":"d367a44","date":"2026-06-22 08:34:49 -0700","author":"Steve Abrams","subject":"auto-save: 2026-06-22T08:34:43 (1 files) — front-page-audit/runs/drift-followup-20260622T0830Z.jsonl","body":""},{"hash":"14c21b1","date":"2026-06-21 19:01:35 -0700","author":"Steve Abrams","subject":"auto-save: 2026-06-21T19:01:26 (1 files) — front-page-audit/runs/drift-20260622T015513Z.jsonl","body":""},{"hash":"75715aa","date":"2026-06-19 15:49:36 -0700","author":"Steve","subject":"cabinet: register dw-promo-banner director under vp-dw-marketing (+ 2026-06-19 consolidation_log)","body":""},{"hash":"6fb7695","date":"2026-06-18 18:59:49 -0700","author":"SteveStudio2","subject":"enlarge gap/suggestion handles to 30px with hover/focus labels, make ghost officer node read as actionable, focus primary drawer action on open","body":""},{"hash":"183cbbf","date":"2026-06-18 18:56:43 -0700","author":"SteveStudio2","subject":"calmer overlay defaults (Shared+Suggested off) with localStorage persistence + UI smoke harness","body":""},{"hash":"6f9f1ff","date":"2026-06-18 18:54:11 -0700","author":"SteveStudio2","subject":"redirect /pyramid.html and /pyramid/ to canonical /pyramid (301)","body":""},{"hash":"281dc4a","date":"2026-06-18 18:51:22 -0700","author":"Steve Abrams","subject":"pyramid: fix P0 UI/UX (a11y + drawer focus + double-write guard)","body":"Codex UI/UX review P0s:\n1. Drawer focus management — focus the primary action on open, restore\n   focus to the trigger on close, trap Tab inside the drawer (central\n   MutationObserver on #drawer, so every opener inherits it).\n2. Keyboard-accessible nodes — every clickable div ([data-kind]/[data-gap])\n   gets tabindex+role=button+aria-label via makeAccessible(), and Enter/Space\n   activates them (mirrors the click handlers). Visible :focus-visible rings\n   on all interactive surfaces.\n3. Double-write guard — decideGap()/decide() disable both drawer buttons and\n   show Approving…/Dismissing… while the cabinet.yaml write is in flight;\n   re-render (or close) re-enables.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"372ea93","date":"2026-06-18 18:32:44 -0700","author":"Steve Abrams","subject":"pyramid: add Gaps dotted-line overlay (stand up officers / adopt orphans)","body":"Surfaces the org-structure gaps as red dotted lines on the cabinet pyramid,\nreusing the approve→write-to-cabinet.yaml mechanism from cross-officer\nsuggestions. new-vp gaps (vp-security, vp-special-projects) render as ghost\nofficer columns hanging off the President; adopt-orphan gaps render as dashed\nchips under their target officer. Clicking a line/＋ handle opens a drawer;\nApprove inserts the VP block or director into cabinet.yaml and auto-commits.\n\nCommits are serialized in-process (a click never races another click for the\ngit index) and retried with backoff against external committers' index.lock,\nso an approval never silently leaves an uncommitted change. /api/gaps + /api/gap,\nGAPS arrays mirrored server/client, gap-state file gitignored.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"7ac1761","date":"2026-06-17 12:02:17 -0700","author":"SteveStudio2","subject":"Add dw-yolo-loop skill to cabinet (vp-operations) + pyramid: codifies the DTD-decider + officer-signoff autonomous catalog-health loop as a reusable skill/command","body":""},{"hash":"566f3c9","date":"2026-06-16 19:27:13 -0700","author":"Steve Abrams","subject":"cabinet: approve cross-officer skill pairs-well-with under vp-dw-commerce (from vp-dw-marketing) via pyramid","body":"Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"5eba332","date":"2026-06-16 19:27:13 -0700","author":"Steve Abrams","subject":"cabinet: approve cross-officer skill new-arrivals-rotator under vp-dw-commerce (from vp-dw-marketing) via pyramid","body":"Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"7894cf0","date":"2026-06-16 19:27:13 -0700","author":"Steve Abrams","subject":"cabinet: approve cross-officer skill collection-creator under vp-dw-commerce (from vp-dw-marketing) via pyramid","body":"Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"3e21128","date":"2026-06-16 19:27:13 -0700","author":"Steve Abrams","subject":"cabinet: approve cross-officer subagent analytics-agent under vp-research-content (from vp-operations) via pyramid","body":"Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"a203330","date":"2026-06-16 19:27:12 -0700","author":"Steve Abrams","subject":"cabinet: approve cross-officer subagent la-research-agent under vp-research-content (from vp-directories) via pyramid","body":"Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"c705aea","date":"2026-06-16 19:27:12 -0700","author":"Steve Abrams","subject":"cabinet: approve cross-officer subagent security-auditor under vp-compliance-policy (from vp-engineering) via pyramid","body":"Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"7656ca5","date":"2026-06-16 19:27:12 -0700","author":"Steve Abrams","subject":"cabinet: approve cross-officer skill dw-legal-compliance under vp-compliance-policy (from vp-dw-commerce) via pyramid","body":"Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"5b3ec47","date":"2026-06-16 19:16:41 -0700","author":"Steve Abrams","subject":"activity /api/schedule: read real launchd state (loaded+disabled+lastExit), flag jobs that won't fire (disabled/unloaded) + nonzero-exit — stops the stdout-age false-stale crying wolf in both directions","body":""},{"hash":"d170113","date":"2026-06-16 18:27:50 -0700","author":"SteveStudio2","subject":"Activity viewer: FIX day-grouping used UTC date while times render local → evening-PT events grouped under wrong/duplicate day headers; dayKey now uses local date (verified 0 mismatches, unique headers). Plus: export filtered view to CSV (respects search+type+date filters; timestamp/local/type/verdict/title/detail/ref columns, RFC-escaped)","body":""},{"hash":"c18a8e8","date":"2026-06-16 18:24:15 -0700","author":"SteveStudio2","subject":"Activity viewer: date-range filter — from/to date pickers + Today/7d/30d/All presets scope the feed by timestamp; composes with search + type chips; 'in range' count + active-preset highlight","body":""},{"hash":"c791b73","date":"2026-06-16 18:17:05 -0700","author":"SteveStudio2","subject":"Activity viewer: live search box — filters the feed AND scheduled/continuous jobs by title/detail/type/label/cadence; chip counts track the query; clear button + 'no matches' state; persists across auto-refresh","body":""},{"hash":"9727194","date":"2026-06-16 18:13:46 -0700","author":"SteveStudio2","subject":"Activity viewer: click any process/event for details — detail drawer + /api/job (plist schedule, launchctl status, command, log tail), /api/commit (git show), /api/canary (full verdict); jobs, continuous chips, commits, canaries, wins/cost/ticks all drillable; injection-guarded","body":""},{"hash":"be0315f","date":"2026-06-16 18:08:13 -0700","author":"SteveStudio2","subject":"Activity viewer: draggable middle splitter to resize the two columns (clamped 260–720px, persisted to localStorage, double-click resets to 380px)","body":""},{"hash":"0dfcebe","date":"2026-06-16 18:04:17 -0700","author":"SteveStudio2","subject":"Activity viewer: side-by-side two columns — sticky Upcoming/scheduled lane (left) + Recent activity feed (right); stacks on narrow screens","body":""},{"hash":"5b4da1d","date":"2026-06-16 17:54:49 -0700","author":"SteveStudio2","subject":"Activity viewer: add Upcoming/scheduled lane — /api/schedule parses 64 launchd plists (plutil→json), computes next fire for calendar jobs (daily/weekly/monthly/one-time) + lists continuous interval jobs; page shows countdown + absolute time + cadence, auto-refresh","body":""},{"hash":"101c9bc","date":"2026-06-16 17:39:51 -0700","author":"SteveStudio2","subject":"Add /activity viewer — live date/time timeline aggregating git commits, canary runs, watch ticks, CNCP wins, and paid API calls; /api/activity endpoint (epoch-sorted, mtime-dated ticks); type filter chips + 30s auto-refresh; linked from pyramid toolbar","body":""},{"hash":"9634ba2","date":"2026-06-16 16:45:36 -0700","author":"SteveStudio2","subject":"Build out both proposals LIVE: 🩺 Health Overlay (reads 6 DW canary latest.json, maps verdicts→officers, tints nodes + status dots) + 💸 Cost Heatmap (reads cost-ledger.jsonl, app→officer spend, ranks top spenders, node badges); /api/health + /api/cost; clear-overlay control","body":""},{"hash":"52c593f","date":"2026-06-16 16:36:15 -0700","author":"SteveStudio2","subject":"Pyramid: 💡 Ideas modals — 5 upgrade ideas as modals (Task Router live, Consolidation Advisor live, Org Export live JSON/MD; Health Overlay + Cost Heatmap as proposals); /api/queue-idea posts to CNCP parking-lot","body":""},{"hash":"e46f975","date":"2026-06-16 15:55:33 -0700","author":"SteveStudio2","subject":"Suggestion lines truly clickable: amber ◆ handle at each line midpoint (z-index above nodes, real hit-test verified) + fatter 16px line hit-band; toggles with Suggested layer","body":""},{"hash":"2f295b3","date":"2026-06-16 15:50:29 -0700","author":"SteveStudio2","subject":"Approve auto-commits cabinet.yaml (path-limited, local, Steve+Claude co-author); commit hash surfaced in toast","body":""},{"hash":"d87e58a","date":"2026-06-16 15:48:01 -0700","author":"SteveStudio2","subject":"Pyramid: clickable suggestion lines — click a dotted arrow to see the relationship + Approve (writes into cabinet.yaml under target VP, idempotent/git-reversible) / Remove / Reset; state persisted server-side; per-row controls in the analysis list too","body":""},{"hash":"eb43caf","date":"2026-06-16 15:35:18 -0700","author":"SteveStudio2","subject":"Pyramid: cross-officer lines — 18 'shared now' (computed from cabinet duplicates) + 12 curated 'suggested moves' arrows, toggleable + analysis list drawer","body":""},{"hash":"29b288a","date":"2026-06-16 14:53:28 -0700","author":"SteveStudio2","subject":"Make pyramid nodes runnable + openable: /api/source|open|run endpoints + click-drawer (source view, Run in new claude session, Open in editor); 39 scrapers individually runnable; injection-guarded","body":""},{"hash":"655d59b","date":"2026-06-16 14:44:35 -0700","author":"SteveStudio2","subject":"Add cabinet pyramid visual: President→Officers→Agents→Skills→Workflows with connector lines + 24h timeline","body":"Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"70ad0c8","date":"2026-06-12 15:08:09 -0700","author":"SteveStudio2","subject":"cabinet: add vp-dw-marketing (DW Marketing Officer) + 7 per-platform social agents (IG/TikTok/LinkedIn/FB/Pinterest/YouTube/X)","body":""},{"hash":"e0540bc","date":"2026-06-11 15:44:28 -0700","author":"SteveStudio2","subject":"Cabinet: add plain-English owns descriptions for 5 plugin/MCP skills (dw-agent-builder, claude-api, simplify, review, prism) — no on-disk SKILL.md, so cabinet is their description home","body":""},{"hash":"805da5e","date":"2026-06-03 08:56:52 -0700","author":"Steve","subject":"gitignore: exclude *.bak per standing code-health rule","body":""},{"hash":"1c95831","date":"2026-05-19 11:35:43 -0700","author":"Steve","subject":"snapshot — gitify backup 2026-05-19","body":""},{"hash":"b59c209","date":"2026-05-18 20:09:45 -0700","author":"SteveStudio2","subject":"server: wrap /cabinet.yaml route in try/catch so a read error returns 500 instead of crashing","body":""},{"hash":"6fbc7d5","date":"2026-05-18 20:09:32 -0700","author":"SteveStudio2","subject":"server: drop dead 'cabinet' param from renderGame (function re-reads file itself)","body":""},{"hash":"d1350b1","date":"2026-05-13 14:10:04 -0700","author":"SteveStudio2","subject":"cabinet: register aichat (Big Red) under vp-dw-commerce","body":""},{"hash":"9a92eb7","date":"2026-05-13 08:57:45 -0700","author":"Steve","subject":"snapshot: 1 file(s) changed, +1 new","body":""},{"hash":"00a0d8a","date":"2026-05-07 12:29:19 -0700","author":"Steve","subject":"tighten .gitignore: add missing standing-rule patterns (dist/ build/ .next/)","body":""},{"hash":"eca07f1","date":"2026-05-06 12:29:16 -0700","author":"Steve","subject":"Game Mode: /game route — 6 dept HQs + 134 cards w/ avatars, stats, synergies","body":""},{"hash":"157848f","date":"2026-05-06 12:08:10 -0700","author":"Steve","subject":"Viewer: switch from Mermaid mindmap to flowchart TD with class styling","body":""},{"hash":"73d8421","date":"2026-05-06 12:05:04 -0700","author":"Steve","subject":"Cabinet: restore plugin-loaded skills (claude-api, simplify, review, prism, gamify) + add claude-control-center","body":""}]}