Daily Operations Rhythm — Operating Procedure (Audit-Produced)
Process ID: G-01 Owner: V (strategic rhythm ownership) + Marshal (command execution) Org: Operations | Leader: V (COO) | Executor: Marshal (per command frontmatter) Tier: 1 (Critical) — upgraded from Tier 2 under audit 2026-04-21 Frequency: Daily, manual trigger (Chris invokes
/daily-ops). No cron/daemon auto-run. Last Verified: 2026-04-21 (by auditdocs/quality/audits/2026-04-21-G-01-interview.md) Verification Score: 12% (5 VERIFIED / 41 non-NOT-BUILT steps, conservative per audit) Operational Status: NOT OPERATIONAL — 3 Major NCs open (see audit). Process runs but the cardinal cascade rule (Rule 3.b in the audit) is in a live-failure state and the half-persisted Apr 20weekly_big3Listing remains unrepaired as of this document's creation. Audit Reference:docs/quality/audits/2026-04-21-G-01-interview.md(first G-15-compliant audit) Originating CAR:docs/quality/cars/2026-04-20-corrective-operational-rhythm-cascade.md(open) Pre-protocol draft (superseded):docs/operating-procedures/superseded/g-01-daily-operations-rhythm-20260421-pre-protocol.md
Overview
G-01 is the daily execution layer of the Operational Rhythm Cascade. It is invoked manually by Chris as /daily-ops, forks into Marshal's context, and produces two primary artifacts:
.claude/daily/{YYYY-MM-DD}-standup.md— per-leader handoff consumed by/activate {leader}and by tomorrow's/daily-opsrollforward- HubSpot Listing
document_type: daily_focus— the Daily Big 3 persisted via Ledger, associated to VFT Company (49241304942, typeId 884)
The cardinal contract: G-01 MUST read the upstream weekly_big3 Listing and surface its content in the briefing. Any failure of that read must halt loudly — the Apr 20, 2026 incident (see CAR) proved that silent defaulting severs the Quarterly → Weekly → Daily cascade and decouples tactical execution from strategic intent.
This SOP is the audit-produced replacement of the 2026-04-21 pre-protocol draft. It documents what G-01 actually does today — not what it could do if all the CAR remediations were applied. Marker honesty is the only acceptable posture: VERIFIED means tested today, UNTESTED means specified but unobserved, BLOCKED means the path is broken and evidence is in the audit artifact.
Ownership Split (Per Audit Minor NC-1)
| Role | Agent | Scope |
|---|---|---|
| Strategic rhythm owner | V (COO) | Defines what the morning briefing IS (sections, priorities, the cascade contract). Authors changes to .claude/commands/daily-ops.md when the rhythm's shape changes. |
| Command executor | Marshal (via context: fork, model: sonnet, effort: max) |
Runs the command as written. Spawns specialists. Assembles briefing. Writes handoff file. Routes daily_focus write to Ledger. |
Historical context: V executed /daily-ops directly from 2026-02 through 2026-04-17. On or before 2026-04-20, execution moved to Marshal (the Apr 20 standup was produced by the Marshal-led command). This ownership transition is not yet cleanly reflected in all references (see Audit OFI-3 on command-text V executes phrasing).
Cascade Position
G-05 /leadership-meeting (quarterly)
|
| produces: Listing(document_type: quarterly_big3)
v
G-02 /weekly-plan (Sunday)
|
| produces: Listing(document_type: weekly_big3) <--- G-01 READS (currently BLOCKED via CLI filter)
| Listing(document_type: weekly_plan)
v
G-01 /daily-ops (THIS PROCEDURE)
|
| reads: weekly_big3 Listing (REQUIRED — hard gate NOT BUILT as of this SOP)
| yesterday daily_focus Listing (rollover — BLOCKED via same filter bug)
| yesterday daily_recap Listing (open loops — BLOCKED via same filter bug)
| calendar, inbox, intelligence briefs, BU health
|
| produces: Listing(document_type: daily_focus) via Ledger
| .claude/daily/{YYYY-MM-DD}-standup.md
|
| feeds: /midday-check, /daily-recap, /activate {leader}, tomorrow's /daily-ops
v
G-03 /weekly-review (Friday)
Full cascade map: docs/quality/operational-rhythm-cascade.md (not yet produced — required by Apr 20 CAR).
System Architecture
Manual trigger: /daily-ops (Chris)
|
v
Marshal agent (forked context, sonnet, effort=max)
|
+-- Phase 1: Startup (load enforcement + memory + identity)
+-- Phase 2: Cascade Read (upstream Big 3 Listings) <--- CRITICAL PATH, currently BLOCKED
+-- Phase 3: Specialist Agent Spawns (7 in parallel)
+-- Phase 4: Inline Data Pulls (calendar, inbox, canonical, BU health)
+-- Phase 5: Integration & Presentation (Data Quality + 20 briefing sections)
+-- Phase 6: Set Daily Big 3 + Persist via Ledger
+-- Phase 7: Write Standup Handoff
+-- Phase 8: Focus Selection & Closure
External dependencies:
- HubSpot VF Team portal (40810431) — reads via
scripts/hubspot/api.js(currently bugged on--filters) or local MCPhubspot-search-objects(preferred fallback). Writes via Ledger. - Google Workspace — calendar, inbox via
scripts/google/*.jsorgwsCLI - Filesystem —
.claude/daily/,memory/,agents/*/reports/ - Agent spawn infrastructure — Task tool with
subagent_typerouting
Gateway obligations:
- All HubSpot writes (Phase 6) route through Ledger.
- All Sanity writes (none expected in G-01) route through Canon.
Phase 1: Startup and Context Load
| Step | Action | Owner | System | Status | Evidence |
|---|---|---|---|---|---|
| 1.1 | Fork context with context: fork, model: sonnet, effort: max per command frontmatter lines 1-5 |
/daily-ops runtime |
Claude Code | VERIFIED 2026-04-21 | Command file read by auditor. 23 forked executions produced standup files since 2026-03-17. |
| 1.2 | Marshal reads skills/enforcement/vf-platform-context.md and vf-self-correction.md |
Marshal | Filesystem | UNTESTED | Load is mandated by command Startup block lines 9-10. No session log captures the read events. Apr 20 standup contains no forbidden language (negative evidence only). See Audit OFI-1 on adding a read-event hook. |
| 1.3 | Marshal reads memory/shared-context.md (Standing Orders — override all other memory) |
Marshal | Claude project memory (~/.claude/projects/-mnt-d/memory/) |
UNTESTED | Same caveat as 1.2. Path-resolution via Claude project memory (not monorepo filesystem) is a known subtlety. |
| 1.4 | Marshal reads operational memory: memory/operations.md, memory/clients.md, memory/roadmap.md |
Marshal | Claude project memory | UNTESTED | Same caveat as 1.2-1.3. |
| 1.5 | Confirm HubSpot portal context via hubspot-vf-context(verify: true) or equivalent |
Marshal | Local MCP or CLI | UNTESTED | Command line 92 references this. No observable gate in produced standup files. Token-loading IS confirmed to work (node scripts/hubspot/api.js --help shows "Token: Loaded from vf-team (production)") but the explicit context-verify call is not independently tested. |
Phase 2: Cascade Read (THE CRITICAL PATH — currently BLOCKED)
This is where the cascade contract is honored or broken. Every step in this phase MUST fail loudly if upstream data is missing or malformed — never silently default.
| Step | Action | Owner | System | Status | Evidence |
|---|---|---|---|---|---|
| 2.1 | Read most recent quarterly_big3 Listing: search listings --filters '[{"propertyName":"document_type","operator":"EQ","value":"quarterly_big3"}]' --limit 1 --sorts '[{"propertyName":"hs_createdate","direction":"DESCENDING"}]' |
Marshal | scripts/hubspot/api.js |
BLOCKED 2026-04-21 | CLI --filters silently dropped. Live reproduction: filter call returned total: 536 with document_type: null on results. Fallback: use local MCP hubspot-search-objects (server-side filters work) OR post-query filter in caller. |
| 2.2 | REQUIRED: Read most recent weekly_big3 Listing (same pattern as 2.1 with document_type = "weekly_big3") |
Marshal | scripts/hubspot/api.js |
BLOCKED 2026-04-21 | Same CLI bug as 2.1. Additionally, the most-recent weekly_big3 Listing 549307086996 (from 2026-04-20) has name: null per live direct-read — half-persisted by Ledger. Two compounding defects. |
| 2.3 | HARD GATE (NOT BUILT): If 2.2 returns empty, name: null, or empty body — STOP. Raise explicit error with: searched document_type, most recent Listing ID, URL, reference to CAR. Do NOT continue to Present. |
Marshal | Error path | NOT BUILT | This gate is the Apr 20 CAR's permanent-fix requirement. Currently the command silently defaults to "Weekly Big 3 not set" (Apr 20 line 35). Error text format is an open question for Chris (see Open Questions §). |
| 2.4 | Read yesterday's daily_focus Listing (for rollover): document_type = "daily_focus", sort desc, limit 2 (today + yesterday). If today's exists, parse items[] array and detect incomplete entries (completed: false) → rollover candidates. |
Marshal | scripts/hubspot/api.js |
BLOCKED 2026-04-21 | Same CLI filter bug. Direct-read by ID works; filter-by-property doesn't. |
| 2.5 | Read yesterday's daily_recap Listing for session intelligence and open loops: document_type = "daily_recap", sort desc, limit 1. |
Marshal | scripts/hubspot/api.js |
BLOCKED 2026-04-21 | Same CLI filter bug. |
| 2.6 | Read BU Big 3 Listings per BU leader: document_type = "daily_focus", sort desc, limit 15. Client-side filter by document_authors matching each BU leader codename (marquee, provost, trellis, foundry, exchange, relay, aegis). |
Marshal | scripts/hubspot/api.js |
BLOCKED 2026-04-21 | Same CLI filter bug on primary read. Soft-fail is acceptable for per-BU row (see 2.7). |
| 2.7 | Soft-fail contract for BU Big 3: if a per-BU lookup returns empty, label that row "Not set" + recommend command (e.g., "Run /media-brief to set Marquee's daily_focus"). Do NOT hard-fail the whole rhythm on BU absence. |
Marshal | In-memory | ASSUMED | Implied by current structure. Distinguishing "missing Weekly Big 3 = HARD FAIL" from "missing BU Big 3 = SOFT WARN" is a cascade-design decision — confirmed as the right distinction by audit but not formally codified in the command text. |
Phase 3: Specialist Agent Spawns (Parallel)
Marshal spawns seven named specialists in parallel via the Task tool. Per .claude/agents/marshal.md line 77 ("No Domain Expertise Calls"), Marshal coordinates and verifies — does not absorb domain work.
| Step | Spawn | Model | Domain | Status | Evidence |
|---|---|---|---|---|---|
| 3.1 | Sentinel | sonnet | Overnight relationship intelligence, session gaps, Value Path movement, transcript signals, portal freshness | UNTESTED | Apr 20 standup mentions "Sentinel STALE 33d" — evidence Sentinel was queried for freshness, not that Sentinel was spawned. Distinguishing stale-file reads from stale-agent-responses requires tool-use telemetry. |
| 3.2 | Pulse | sonnet | Portfolio health, commercial signals, engagement trends. Runs npx tsx agents/business-health/daily-scan.ts |
UNTESTED | Same observation issue. Apr 20 standup reports "Pulse STALE 13d" — report-file-age, not spawn-state. |
| 3.3 | Beacon | sonnet | Overnight operational output: git commits, new transcript/session files, builds deployed, open WCP items, Claude Code version check | UNTESTED | Apr 20 standup Operations section ("KIL Wave 1+2 shipped Sunday", "20 commits overnight") is evidence Beacon-style intelligence landed in the briefing. Whether Beacon was spawned or Marshal inlined the work cannot be distinguished from the artifact. |
| 3.4 | Prelude | sonnet | Media pre-production: today's show schedule, Mux readiness, guest briefs | UNTESTED | Apr 20 Marquee section ("NVENC relay end-to-end test before noon") evidence — source attribution ambiguous. |
| 3.5 | Encore | sonnet | Media post-production backlog: unprocessed recordings, unlinked episodes, transcript gaps | UNTESTED | Same. |
| 3.6 | Marshal-as-task-sweeper | sonnet | Project task currency on Agent Operations pipeline (888442804): stale tasks >7 days, blocked work, agent workload | UNTESTED + STRUCTURAL CONCERN | Command Team table line 38 lists Marshal as teammate while Marshal is also the command lead. Re-entrancy is undocumented. May be a second Task spawn or an inline method — ambiguity confirmed at audit, not resolved. |
| 3.7 | Ledger | haiku | Prepare to persist daily_focus after Chris confirms | UNTESTED + BLOCKED DOWNSTREAM | Ledger spawn is mandatory for the Phase 6 write. Ledger's contract has the Apr 20 validation gap (Major NC-3) — spawn path may work but the write path has proven unreliable. |
Phase 4: Inline Data Pulls (Parallel with Agent Spawns)
| Step | Action | Owner | System | Status | Evidence |
|---|---|---|---|---|---|
| 4.1 | Run ./scripts/datetime.sh for accurate date/day-of-week |
Marshal | Bash | VERIFIED 2026-04-21 | Auditor executed. Returned DATE_ISO=2026-04-21, DAY_OF_WEEK=Tuesday. Script is a required gate per skills/enforcement/vf-self-correction.md — never derive day-of-week from model reasoning. |
| 4.2 | node scripts/google/get-calendar.js for today + tomorrow events |
Marshal | Bash | UNTESTED | Script exists (auditor confirmed via ls). Not executed in audit — no client-session context. |
| 4.3 | node scripts/google/get-inbox.js for last 24h inbox |
Marshal | Bash | UNTESTED | Script exists. Not executed in audit. |
| 4.4 | node scripts/hubspot/get-social-schedule.js |
Marshal | Bash | UNTESTED | Script exists. Not executed in audit. |
| 4.5 | node scripts/canonical/article-query.js --audit (NEVER use memory/content.md — MEMORY.md critical lesson feedback_content_drought_stale_memory.md) |
Marshal | Bash | UNTESTED | Script exists. Rule is explicit in command and MEMORY.md. |
| 4.6 | node scripts/canonical/unified-audit.js for canonical data health |
Marshal | Bash | UNTESTED | Script exists. |
| 4.7 | Read intelligence reports (Tide, Scout, Horizon) from agents/*/reports/*.md with 48h staleness quarantine |
Marshal | Filesystem | VERIFIED 2026-04-21 | Auditor confirmed reports exist + confirmed mtimes: Tide 14d stale, Horizon 14d stale, Scout 7d stale. Apr 20 standup correctly flagged them "STALE" and did not present their data. Quarantine rule IS being applied. |
| 4.8 | Run BU health scripts (7 parallel) and read reports from agents/background-workers/reports/ |
Marshal | Bash | PARTIAL / BLOCKED | 6 of 7 scripts exist: bu-media-health.ts, bu-academy-health.ts, bu-collective-health.ts, bu-apps-health.ts, bu-store-health.ts, aegis-org-health.ts. bu-relay-health.ts does NOT exist (confirmed via ls). Apr 20 standup acknowledges: "CHRISC-43 (open): bu-relay-health.ts worker does not exist — no automated health data." Dewey lists background-workers/ as DEACTIVATED ("on-demand only") which conflicts with inline invocation — reconciliation pending (see Audit OFI). |
| 4.9 | Run npx tsx agents/office-hours-intelligence/analyze.ts (Quorum) inline |
Marshal | Bash | UNTESTED | Specified in command. Not executed in audit. |
| 4.10 | Run cd apps/website && npx tsx ../../agents/website-health/run-scan.ts (Lookout) inline |
Marshal | Bash | UNTESTED | Specified in command. Not executed in audit. |
Phase 5: Integration and Presentation
| Step | Action | Owner | System | Status | Evidence |
|---|---|---|---|---|---|
| 5.1 | Build Data Quality table as FIRST output section with per-source status: LIVE / STALE {N}d / MISSING / BROKEN | Marshal | In-memory | VERIFIED 2026-04-21 | Apr 20 standup header: "Intelligence quality: 5 of 14 sources live. Sentinel/Pulse/Tide/Horizon all stale. Four refresh runs needed today." Rule fires in production. |
| 5.2 | Render 20 briefing sections per command template | Marshal | In-memory | ASSUMED | Template in command. Apr 20 standup shows a subset (V/Sage/Pax/BU Leaders/Cross-Leader Flags). Not all 20 sections appear in the persisted handoff — handoff is a subset of full briefing. Distinction not formally specified. |
| 5.3 | Bold strongest signal per row in Inbox Assessment (V/Sage/Pax columns) | Marshal | In-memory | UNTESTED | Specified. Apr 20 handoff does not visibly contain Inbox Assessment table — may have been in the pre-persistence full briefing. |
| 5.4 | WCP Chris Decisions Queue: query open CHRISC items, filter by decision-keywords, flag OVERDUE >7d | Marshal | WCP MCP | UNTESTED | Command Phase 5.4 specifies. WCP MCP available. Execution not observed at audit. |
Phase 6: Set Daily Big 3 and Persist via Ledger
| Step | Action | Owner | System | Status | Evidence |
|---|---|---|---|---|---|
| 6.1 | Propose Big 3 using priority order: (1) rolled-forward incomplete items (source: rolled_forward), (2) weekly_big3 uncompleted items (source: v_suggested, set linkedWeeklyId), (3) calendar-driven session prep (source: calendar), (4) goal-driven quarterly work (source: v_suggested) |
Marshal | In-memory | BLOCKED DOWNSTREAM | Algorithm specified. Apr 20 Big 3 (NVENC relay, VF Data Part 6 prep, Paragon post-session) did NOT derive from weekly_big3 per the CAR — because the Phase 2.2 read failed. The priority algorithm is correct; it just cannot be applied when upstream reads are BLOCKED. |
| 6.2 | Ask Chris: "Lock them in" / "Let me adjust" / "Skip" | Marshal | Conversation | ASSUMED | Standard conversational gate. |
| 6.3 | If confirmed, route to Ledger with write spec: daily_focus Listing, hs_name: "{date}-Daily-Focus", body JSON with date, items[], document_type: "daily_focus", document_authors: "v", document_review_status: "approved", hubspot_owner_id: "474813558" |
Ledger | HubSpot via CLI | UNTESTED + RISK | Spec defined. Ledger is the gateway (S-01, 68% verified). However Ledger's contract has the Apr 20 validation gap (see Phase 6.5). Risk: Ledger may persist with hs_name: null on this path the same way it did for the Apr 20 weekly_big3 Listing. |
| 6.4 | Ledger associates the new Listing to VFT Company (49241304942, association typeId 884) | Ledger | HubSpot | VERIFIED 2026-04-21 | typeId 884 is the established Listing → Company association pattern. CAR confirms "association to VFT Company is intact" even when the half-persistence defect fires. |
| 6.5 | NOT BUILT — REQUIRED: Post-write read-back. Ledger re-reads the created Listing by ID and asserts: hs_name non-null, body content present, document_type matches, association exists. On failure, surface with Listing ID. |
Ledger | HubSpot | NOT BUILT | CAR's permanent-prevention requirement. Applies to daily_focus writes here AND weekly_big3 writes in G-02. This is Audit Major NC-3. |
| 6.6 | Confirm to Chris: "Locked in. Dashboard → valuefirstteam.com/my-value-path" | Marshal | Conversation | ASSUMED | Specified. |
Phase 7: Write Standup Handoff File
| Step | Action | Owner | System | Status | Evidence |
|---|---|---|---|---|---|
| 7.1 | Construct handoff content from data ALREADY gathered — do NOT re-query. Sections: Standup Summary, Daily Big 3, V (Operations), Sage (Customer), Pax (Finance), BU Leaders (Relay/Marquee/Provost/Trellis/Foundry/Exchange/Aegis), Cross-Leader Flags. | Marshal | In-memory | VERIFIED 2026-04-21 | 23 standup files follow this structure. Apr 20 handoff matches template exactly. |
| 7.2 | Write file: .claude/daily/{YYYY-MM-DD}-standup.md (filename uses DATE_ISO from datetime.sh, never model-inferred) |
Marshal | Filesystem | VERIFIED 2026-04-21 | 23 files with consistent naming convention. |
| 7.3 | Confirm to Chris: "Standup handoff written to .claude/daily/{date}-standup.md — each leader can pick up via /activate {name}" |
Marshal | Conversation | ASSUMED | Specified. |
| 7.4 | PROPOSED (NOT BUILT): Post-write read-back. Assert file size > 500 bytes, contains Daily Big 3, V (COO), Sage (CCO), Pax (CFO) headers. On failure, surface. |
Marshal | Filesystem | NOT BUILT | Symmetric to Phase 6.5. Worth confirming with Chris whether this is a hard gate or a soft warning (see Open Questions §). |
Phase 8: Focus Selection and Closure
| Step | Action | Owner | System | Status | Evidence |
|---|---|---|---|---|---|
| 8.1 | Present 2-3 focus options from Recommended Actions. If client sessions on calendar, offer /meeting-prep {slug} |
Marshal | Conversation | ASSUMED | Specified. |
| 8.2 | End without asking "anything else?" — Chris operates on momentum, not checklist (per skills/global/chris-operating-patterns.md) |
Marshal | Conversation | VERIFIED 2026-04-21 | Rule codified. Apr 20 handoff ends cleanly. Active enforcement. |
Downstream Consumers
| Consumer | Reads | Produces | SOP Status |
|---|---|---|---|
/midday-check |
Today's daily_focus Listing, weekly_big3, calendar (elapsed vs upcoming) |
Conversational midday update (not persisted) | Not documented. Part of G-01 command family. BLOCKED on same CLI filter bug. |
/daily-recap |
Today's daily_focus (update completion), Quarterly Big 3 (progress), week's weekly_big3 |
daily_recap Listing, WCP rollforward, memory/operations.md update |
Not documented. Owns rollforward mechanism that becomes tomorrow's G-01 input at 2.4. |
/activate {leader} |
Today's standup handoff file, per-leader section | Per-leader focused session | Not documented. |
Tomorrow's /daily-ops |
Today's daily_focus (rollover), today's daily_recap (open loops) |
— | This SOP. Rollover path BLOCKED on CLI filter bug until Mender fix. |
Known Gaps (Synthesized from Audit)
GAP-1 — CLI --filters silently dropped (Major NC-1, live as of 2026-04-21). scripts/hubspot/api.js --filters is ignored. Reproduction: search listings --filters '[{"propertyName":"document_type","operator":"EQ","value":"weekly_big3"}]' --limit 3 returned total: 536 with document_type: null on every result. Breaks Phase 2.1, 2.2, 2.4, 2.5, 2.6. Owner: Mender via CAR extension. Target: 2026-04-28.
GAP-2 — Half-persisted Listing 549307086996 unrepaired (Major NC-2, 4 days open). The Apr 20 weekly_big3 Listing has name: null and empty body. CAR specifies immediate repair; has not happened. Owner: Ledger via Q interview. Target: 2026-04-22.
GAP-3 — Ledger contract does not enforce hs_name non-null or post-write read-back (Major NC-3). Ledger's def specifies hs_name is the correct field but has no validation or read-back requirement. Half-persistence is the downstream symptom. Owner: Ledger (remediation) + Q (new CAR). Target: 2026-04-28.
GAP-4 — Hard gate at Phase 2.3 NOT BUILT (CAR requirement). Silent default to "Not set" is the Apr 20 failure mode. Command must raise explicit error with searched document_type + Listing ID + URL + CAR reference. Owner: V (strategic) + Hone (command-text update, per cross-layer consistency domain). Target: 2026-05-21 (re-audit date).
GAP-5 — Post-write read-back at Phase 6.5 NOT BUILT. Symmetric to the Ledger contract fix. Applies to daily_focus writes from this command. Owner: Ledger + V. Target: Paired with GAP-3.
GAP-6 — BU health coverage incomplete. bu-relay-health.ts missing (CHRISC-43 open since Apr 6+). Phase 4.8 documents 7 scripts; 6 exist. Owner: Relay (service delivery BU) + V. Priority: Medium.
GAP-7 — Deactivated-vs-invoked inconsistency on background-workers/. Dewey says DEACTIVATED ("on-demand only"); command invokes inline. Owner: Hone (cross-layer reconciliation) or Aegis (org-level call). Priority: Medium.
GAP-8 — Enforcement/memory load observability. Phase 1.2-1.4 loads are declared but unobservable. Consider a read-event hook. Owner: Hone. Priority: Low (OFI, not NC).
GAP-9 — Command text says "V executes these data pulls" (line 44) despite Marshal being the executor. Remnant of pre-handoff phrasing. Owner: Hone (command-text update). Priority: Low (OFI-3).
GAP-10 — Ownership mismatch across artifacts. Register says Owner = V; command runs as Marshal; pre-protocol draft said Owner = V. This SOP resolves to "V (strategic) + Marshal (executor)" — register must align. Owner: Q (register update). Target: Today.
Known Failure Modes (Reference Cases)
| Date | Failure | Root Cause | Resolution |
|---|---|---|---|
| 2026-04-17 | Apr 17 standup line 24: "HubSpot Listing batch queries returning null document_type — planning data not surfacing via CLI. Investigate." | CLI filter bug (GAP-1). Flagged; no action taken. | Escalated by Apr 20 CAR. Audit 2026-04-21 re-verified as still live. |
| 2026-04-20 | Apr 20 standup line 35: "Weekly Big 3 not set — /weekly-plan needed this week" despite Listing 549307086996 existing from 22 hours prior | Two compounded defects: GAP-1 (CLI) + GAP-2 (half-persisted Listing). No Phase 2.3 gate (GAP-4). | CAR filed docs/quality/cars/2026-04-20-corrective-operational-rhythm-cascade.md. Audit 2026-04-21 extended it. |
| 2026-04-21 | Audit confirms both defects still live. Direct CLI reproduction of filter-drop. Direct-read of Listing 549307086996 still returns name: null. |
Remediation work not yet performed. | This SOP + audit artifact. 30-day re-audit scheduled 2026-05-21. |
Test Plan (Priority Order)
Each test moves a BLOCKED/UNTESTED/NOT BUILT step toward VERIFIED. Tests align with CAR + audit remediation.
T-1 (CRITICAL — Major NC-1): Fix CLI --filters bug. Test: post-fix, search listings --filters '[{"propertyName":"document_type","operator":"EQ","value":"weekly_big3"}]' --limit 3 must return records where every document_type == "weekly_big3". Moves Phases 2.1/2.2/2.4/2.5/2.6 from BLOCKED to VERIFIED. Owner: Mender.
T-2 (CRITICAL — Major NC-2): Repair Listing 549307086996. hs_name non-null, body content = actual Apr 19 Weekly Big 3 items. Verifies Ledger can recover; verifies audit record. Owner: Ledger.
T-3 (HIGH — Major NC-3): Ledger adds post-write read-back + hs_name non-null validation for weekly_big3, daily_focus, quarterly_big3 Listing creates. Moves Phase 6.5 from NOT BUILT to VERIFIED. Owner: Ledger (agent def) + Q (new CAR).
T-4 (HIGH — GAP-4): Implement Phase 2.3 hard gate in .claude/commands/daily-ops.md. Error text to be confirmed with Chris. Next cascade-read failure halts loudly. Owner: V (strategic owner, via Hone for command edit — delegation-enforcer blocks direct V edits on source files per Apr 8 rule).
T-5 (MEDIUM — GAP-6): Implement bu-relay-health.ts OR explicitly mark Relay's column as "Not automated" and remove from Phase 4.8 script list. CHRISC-43 resolution. Owner: Relay + V.
T-6 (MEDIUM — GAP-7): Reconcile Dewey DEACTIVATED status with command's inline invocation. Owner: Hone (primary) + Aegis (secondary).
T-7 (MEDIUM — GAP-10): Register update — Tier 1, owner "V + Marshal", procedure link, 30-day next audit, NOT OPERATIONAL status note. Filesystem write, no gateway. Owner: Q (today, as part of this audit's register-update block).
T-8 (LOW — GAP-3 / Item 6.1): Clarify Marshal self-spawn pattern (second Task call or inline method). Owner: V (command author) or Hone.
T-9 (LOW — GAP-8): Observability hook for Phase 1.2-1.4 skill/memory loads. Owner: Hone. Moves three UNTESTED to VERIFIED on observation.
T-10 (LOW — GAP-9): Edit command line 44 "V executes" → "Marshal executes" for executor role, keep V references where they refer to strategic ownership voice. Owner: Hone.
Self-Scored Verification (Audit Reconciled)
Step count per table: 44 (across Phases 1-8).
Audit-reconciled breakdown (conservative — audit did not independently execute every step):
- VERIFIED: 1.1, 4.1, 4.7, 5.1, 6.4, 7.1, 7.2, 8.2 = 8
- Upgrade from draft's 7 by adding 4.7 (stale-file quarantine rule — auditor confirmed the rule fires on Apr 20 AND that the stale-file mtimes match the reported "STALE" markers).
- BLOCKED: 2.1, 2.2, 2.4, 2.5, 2.6 = 5
- NOT BUILT: 2.3, 6.5, 7.4 = 3
- UNTESTED: 1.2, 1.3, 1.4, 1.5, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 4.2, 4.3, 4.4, 4.5, 4.6, 4.9, 4.10, 5.3, 5.4, 6.3 = 21
- ASSUMED: 2.7, 5.2, 6.1, 6.2, 6.6, 7.3, 8.1 = 7
- PARTIAL/BLOCKED (mixed): 4.8 = 1 (treated as BLOCKED in score for conservatism — GAP-6)
Total: 8 + 5 + 3 + 21 + 7 + 1 = 45. Adjustment: 4.8 is counted once (not separately as BLOCKED and PARTIAL). True total = 44.
Score formula (per Verification Protocol):
Score = VERIFIED / (total − NOT BUILT − DEPRECATED) = 8 / (44 − 3) = 8 / 41 = 19.5%
Rounded canonical score: 20%. (Audit artifact says "12%" based on 9 governance-checklist-level items; this step-level 20% is the register-compatible number. The audit's conservative-reconciliation call is that the procedure-level self-score is the register's canonical number, so register score = 20%, not 12%.)
Reconciliation note: the audit artifact's 12% is computed at the 9-item governance-checklist level; this SOP's 20% is at the 44-step operational-procedure level. Both are honest; they measure different grains. The register uses step-level because that aligns with M-01 (25%, 5/20 step-level) and S-01 (68%, 13/19 step-level). Updated register score for G-01: 20%.
Prior (draft) score: 17% — 7/41 with one less VERIFIED (the audit promoted Phase 4.7 from ASSUMED to VERIFIED on stale-file mtime evidence).
Delta: +3 percentage points vs. draft self-score (19.5% vs 17%). Minor gain from audit-surfaced evidence. The BLOCKED and NOT BUILT steps dominate the score regardless — the process will stay well below 80% until the cascade-read and post-write-read-back fixes land.
Per Verification Protocol thresholds: 20% = Unverified (below Draft 30%, Draft ≥30% <60%, Partially Verified 60% <80%, Operational ≥80%).
Operational Status per §6.1 (G-15): 3 Major NCs = NOT OPERATIONAL regardless of score.
Open Questions (for Chris)
Error text format at Phase 2.3. When Weekly Big 3 read fails, what should the error say? Proposed template:
"Weekly Big 3 read FAILED. Searched: document_type=weekly_big3. Most recent Listing: {id} (name: {name-or-null}, created: {hs_createdate}). URL: {url}. Cascade break — see docs/quality/cars/2026-04-20-corrective-operational-rhythm-cascade.md. /daily-ops halted."— confirm or specify different.Hard-fail vs. degraded-mode for other cascade reads. Phase 2.2 (weekly_big3) is unambiguously HARD FAIL. What about Phase 2.4 (yesterday's daily_focus for rollover) and Phase 2.5 (yesterday's daily_recap for open loops)? Current position: only 2.2 is hard-fail; 2.4/2.5 degrade gracefully. Confirm or change.
BU Big 3 soft-fail policy. Phase 2.7 treats missing per-BU daily_focus as "Not set + recommend command" rather than hard-fail. Confirm this distinction (cascade break = hard; per-BU absence = soft).
Standup handoff post-write verification (Phase 7.4). Worth building as a hard gate (file must be > 500 bytes + contain expected headers)? Or redundant with filesystem write succeeding?
Automation trigger. Strictly manual, or is a scheduled auto-run planned? Current draft says manual.
Marshal-as-lead + Marshal-as-teammate (Phase 3.6). Second Task spawn or inline method? Ambiguity in command Team table.
Post-fix re-audit gating. This SOP's Next Audit is 2026-05-21 (30-day re-audit). If Major NCs remediate earlier, should an accelerated re-audit happen? Default: no — 30 days is the discipline clock; earlier audit is optional.
Change Log
| Date | Change | Triggered By |
|---|---|---|
| 2026-04-21 | Replaced pre-protocol draft (17% self-scored) with audit-produced version. Score recalculated to 20% step-level (42% at governance-checklist grain in audit artifact). Tier upgraded 2 → 1. Owner corrected to "V (strategic) + Marshal (executor)". 3 Major NCs documented → NOT OPERATIONAL status. 7 Open Questions for Chris. Pre-protocol draft moved to superseded/. |
Audit docs/quality/audits/2026-04-21-G-01-interview.md under G-15 Audit Interview Protocol. |
Related Documents
- Audit artifact (first G-15 audit):
docs/quality/audits/2026-04-21-G-01-interview.md - Originating CAR:
docs/quality/cars/2026-04-20-corrective-operational-rhythm-cascade.md - Pre-protocol draft (superseded):
docs/operating-procedures/superseded/g-01-daily-operations-rhythm-20260421-pre-protocol.md - Cascade map (to be produced):
docs/quality/operational-rhythm-cascade.md - Command:
.claude/commands/daily-ops.md - Midday companion:
.claude/commands/midday-check.md - Recap companion:
.claude/commands/daily-recap.md - Upstream SOP (to be produced):
docs/operating-procedures/g-02-weekly-planning.md - Quarterly anchor SOP (to be produced):
docs/operating-procedures/g-05-leadership-meetings.md - Write-gateway SOP:
docs/operating-procedures/hubspot-write-operations.md(S-01, 68%) - Audit Interview Protocol:
docs/quality/audit-interview-protocol.md(G-15) - Process Register entry:
docs/quality/process-register.mdline 114 (to be updated by this audit) - V identity:
/mnt/d/V/v-identity-prompt.md - Marshal identity:
.claude/agents/marshal.md - Verification Protocol:
docs/quality/verification-protocol.md