StrategyRecommendationLog is the workspace where AGT-903 Strategy Brain drafts strategic recommendations for executive review. It is the operational mechanism for the architectural commitment that strategic decisions remain with humans and remain subject to fiduciary deterministic processes. Unlike SalesPlayLibrary, no execution engine reads endorsed rows directly — endorsement triggers human-led planning workstreams that flow through the relevant Tier 1 service's normal redesign cycle.
| State | Meaning | Who can write/transition |
|---|---|---|
| draft | AGT-903 has produced a strategic memo with 2–4 options. Lives in workspace for executive review. No downstream effect. | AGT-903 inserts. No one else writes to draft rows. |
| under_review | CRO has picked up a draft and is refining it. May edit option set, narrow scope, request additional analysis. | CRO (manual transition from draft). Edits permitted. Re-running additional AGT-903 analysis in this state appends to analysis_iterations, does not create a new row. |
| endorsed | Recommendation approved by CRO + CFO (+ CEO if scope warrants). Triggers a human-led planning workstream owned by the relevant Tier 1 service(s). Does not modify any canonical table directly. | CRO + CFO joint approval; CEO required if scope_severity = material. Approver fields tracked. |
| shelved | Recommendation set aside — not endorsed, not retired. Retained for historical retrospective and future reconsideration. | CRO. Reversible to under_review if CRO re-engages. |
| retired | Recommendation no longer relevant. Outcomes (if endorsed and acted on) recorded for retrospective. | RevOps. Terminal except for retrospective annotation. |
Allowed transitions:
draft → under_review (CRO pickup)draft → retired (rejected without further work)under_review → endorsed (joint approval; CEO if material)under_review → shelved (CRO sets aside without endorsing)under_review → retired (rejected after review)shelved → under_review (CRO re-engages later)endorsed → retired (workstream complete, retrospective period elapsed)endorsed to under_review. To revise an endorsed recommendation, copy into a new draft.Unlike SalesPlayLibrary, StrategyRecommendationLog has no hard volume cap on endorsed entries. The natural limiter is executive bandwidth and the deliberate rarity of strategic-decision cadence. AGT-903 may draft any volume of recommendations — CRO pickup time and joint-approval requirements are the bottleneck.
| Soft monitoring | Default threshold | Configurable by |
|---|---|---|
| Endorsed recommendations per year | Healthy band: 2–5 per year. > 8 in a single year flags strategic-churn anti-pattern for review. | CRO via StrategyRecommendationConfig (L0 table). |
| Drafts pending CRO pickup > 30 days | Auto-stale flag. CRO dashboard surfaces. Eligible for auto-retirement at 90 days. | CRO. |
| Strategic-churn pattern (multiple endorsed recommendations on the same canonical config within 4 quarters) | Flag for retrospective: are we second-guessing? | RevOps quarterly review. |
| Field | Type | Req | Notes |
|---|---|---|---|
recommendation_id | UUID | REQ | Primary key. |
state | ENUM | REQ | draft / under_review / endorsed / shelved / retired. Transitions enforced via trigger. |
question | TEXT | REQ | The executive query that triggered the analysis, verbatim. Or the AGT-704 narrative-job prompt. |
scope_tags | JSONB | REQ | Structured: which segments / verticals / time windows the analysis covers. Used for retrospective lookup and to detect strategic-churn pattern. |
scope_severity | ENUM | REQ | routine / significant / material. Material requires CEO approval at endorsement. Set by AGT-903 at draft time based on which canonical configs are implicated; CRO may revise during under_review. |
action_type | ENUM | REQ | Per AGT-903 action taxonomy: propose_icp_revision / propose_segment_redefinition / propose_vertical_entry / propose_capacity_reallocation / propose_pricing_packaging_review / flag_strategic_risk / recommend_market_research_query / recommend_human_query / none. |
options_enumerated | JSONB | REQ | Array of 2–4 options. Each option carries: option_label, hypothesis, projected_impact_range (NOT a point estimate), required_investment, capacity_implications, tier1_dependencies (array of AGT-IDs whose redesign is implicated). JSON schema validated. |
tradeoffs_matrix | JSONB | REQ | Per option: upside_scenario, downside_scenario, preconditions_for_success. Structured for matrix rendering in the workspace UI. |
risk_surface | JSONB | REQ | Structured enumeration: market_risks, execution_risks, capacity_risks, model_assumption_risks. Each risk carries a confidence_flag (high / medium / low / speculation). Eval criterion enforces presence of all four risk classes ≥ 90% of outputs. |
assumptions_must_hold | JSONB | REQ | Array of falsifiable assumptions underlying the analysis. Each: assumption, evidence_basis, brittleness (brittle / stable / untested), source_ref if applicable. Brittle assumptions surfaced in workspace UI as banners. |
sources_read | JSONB | REQ | Array of (table_name, view_name, last_refresh_timestamp, row_count_consumed). Every numerical claim in narrative ties back. Same shape as BrainAnalysisLog.sources_read for consistency. |
narrative | TEXT | REQ | Brain's prose memo, with inline source citations matching sources_read (e.g., [src:1]). |
suggested_workstream_owners | JSONB | REQ | If endorsed, which Tier 1 services or cross-functional groups own the resulting workstream. Array of (owner, scope_of_responsibility). Example: [{"owner":"AGT-201","scope_of_responsibility":"ICP rubric redesign cycle"}, {"owner":"AGT-202","scope_of_responsibility":"routing alignment"}]. |
data_staleness_acknowledged | BOOLEAN | REQ | TRUE if any strategy brain-ready view consumed was stale. If TRUE, narrative MUST surface staleness explicitly. Hard requirement — eval enforces. |
originating_proposal_id | UUID | REQ | FK to BrainAnalysisLog.proposal_id of the AGT-903 output that drafted this recommendation. Lineage anchor. |
writer_agent_id | VARCHAR(16) | REQ | Always AGT-903 for this table. Constraint enforced. |
created_at | TIMESTAMPTZ | REQ | DEFAULT NOW(). |
analysis_iterations | JSONB | opt | Append-only log of additional AGT-903 analyses run during under_review (e.g., CRO requests deeper sensitivity analysis on option 2). Each iteration: timestamp, additional question, additional sources read, additional narrative. |
picked_up_by_user_id | UUID | opt | Set on draft → under_review. Must be CRO-role user. |
picked_up_at | TIMESTAMPTZ | opt | Set on draft → under_review. |
edits_during_review | JSONB | opt | Diff log of CRO edits during under_review (option-set narrowing, scope changes, risk-surface additions). Calibration signal: heavy edits = brain drafts are starting points; light edits = brain is calibrated. |
cro_approver_user_id | UUID | opt | Required to transition to endorsed. |
cfo_approver_user_id | UUID | opt | Required to transition to endorsed. |
ceo_approver_user_id | UUID | opt | Required to transition to endorsed when scope_severity = material. |
endorsed_option_label | VARCHAR(64) | opt | Required at endorsed. Identifies which option from options_enumerated the executives endorsed. Workstream proceeds against this option. |
endorsed_at | TIMESTAMPTZ | opt | Set on under_review → endorsed. |
shelved_at | TIMESTAMPTZ | opt | Set on transition to shelved. |
shelved_reason | TEXT | opt | CRO-provided. Surfaces in retrospective. |
retired_at | TIMESTAMPTZ | opt | Set on transition to retired. |
retired_by_user_id | UUID | opt | Set on transition to retired. |
retire_reason | ENUM | opt | workstream_complete / superseded / rejected_at_review / rejected_at_draft / auto_stale. |
retrospective_outcomes | JSONB | opt | For endorsed recommendations: measured outcomes 4–6 quarters out vs. projected impact range. Populated by RevOps. Read by AGT-903 in next strategic-bet retrospective batch and used for retrospective-accuracy eval criterion. |
cost_metadata | JSONB | REQ | (model, input_tokens, output_tokens, cached_tokens, cost_usd_estimate). Same shape as BrainAnalysisLog cost metadata. |
| Element | Definition | Why |
|---|---|---|
| Primary key | recommendation_id | Surrogate. |
| Index 1 | (state, created_at DESC) WHERE state IN ('draft','under_review') | Workspace UI: show pending drafts/reviews to CRO. |
| Index 2 | (state, endorsed_at DESC) WHERE state = 'endorsed' | Endorsed recommendations dashboard + retrospective workstream tracking. |
| Index 3 | GIN(scope_tags) | Strategic-churn detection: find prior recommendations on the same scope. |
| Index 4 | (originating_proposal_id) | BrainAnalysisLog lineage lookup. |
| Index 5 | (action_type, created_at DESC) | Per-action-type history (eval, brain calibration). |
| CHECK: writer_agent_id | writer_agent_id = 'AGT-903' | This table is AGT-903 only. AGT-901/902 cannot write here. Hard constraint. |
| CHECK: option count | jsonb_array_length(options_enumerated) BETWEEN 2 AND 4 when action_type is one of the propose_* values | Options discipline — enforces "produce alternatives, not single answers" architectural commitment. Exempt for flag_strategic_risk / recommend_* / none. |
| CHECK: risk-surface coverage | risk_surface JSONB must have keys market_risks, execution_risks, capacity_risks, model_assumption_risks when action_type is one of the propose_* values | Risk-surface discipline. Same exemption as above. |
| CHECK: endorsed requires approvers | If state = 'endorsed': cro_approver_user_id IS NOT NULL AND cfo_approver_user_id IS NOT NULL AND endorsed_option_label IS NOT NULL AND endorsed_at IS NOT NULL. If scope_severity = 'material', also require ceo_approver_user_id IS NOT NULL. | Endorsement gate — joint approval required. |
| CHECK: endorsed_option_label valid | If state = 'endorsed', endorsed_option_label must match an option_label present in options_enumerated. | Cannot endorse a phantom option. |
| CHECK: state machine | Trigger validates allowed transitions (per state machine table). Backward transitions from endorsed blocked. shelved → under_review permitted. | Auditability + integrity. |
| CHECK: staleness flag | If data_staleness_acknowledged = TRUE, narrative must contain a staleness-acknowledgement marker (regex check or structured tag in JSONB sources_read). Eval also enforces. | Source-trace integrity discipline shared across all three brains. |
| FK | originating_proposal_id → BrainAnalysisLog.proposal_id; user IDs → Users (with role check on CRO/CFO/CEO fields). | Referential integrity + role enforcement. |
Endorsement does NOT modify any canonical table. It triggers a planning workstream owned by the Tier 1 service(s) named in suggested_workstream_owners. The workstream's outcome may, in turn, propose canonical changes through that service's normal redesign cycle — with all the deterministic governance that cycle entails.
| Endorsed action_type | Workstream owner(s) | What the owner does |
|---|---|---|
propose_icp_revision | AGT-201 | Initiates ICP rubric redesign cycle. May result in spec change to AGT-201 + downstream recalibration of routing (AGT-202), prioritization (AGT-206), and TAM sizing (AGT-205). |
propose_segment_redefinition | AGT-201 + AGT-202 + AGT-101 | Cross-service segment-band redesign. May ripple to quota model, territory design (AGT-106), capacity (AGT-105). |
propose_vertical_entry | AGT-203 + AGT-205 + AGT-302 + AGT-403 + AGT-105 (cross-functional motion-build) | RevOps-led motion plan: ABM target list (AGT-203), TAM/SAM refresh (AGT-205), cadence orchestration (AGT-302), competitive prep (AGT-403), capacity allocation (AGT-105). |
propose_capacity_reallocation | AGT-105 + AGT-106 + AGT-101 | Capacity plan redesign + territory rebalance + quota recalibration. AGT-105 owns the integrated plan output. |
propose_pricing_packaging_review | Cross-functional pricing committee + AGT-406 + AGT-802 + AGT-101 | Pricing committee runs the analysis; CPQ catalog change (AGT-406), billing alignment (AGT-802), quota model recalibration (AGT-101). |
flag_strategic_risk | n/a | Informational endorsement (rare): executive team acknowledges the risk and may direct attention without triggering a workstream. |
recommend_market_research_query | RevOps strategic research function | External research engagement. Outcomes may feed back into a future AGT-903 query. |
StrategyRecommendationLog closes the loop on AGT-903 quality. Four signals matter:
| Signal | What it measures | Brain calibration use |
|---|---|---|
| Endorsement rate (per quarter, per action_type) | How often AGT-903 drafts make it through CRO review to endorsement | Per AGT-903 eval criterion target band 10–30%. < 10% → options not credible. > 30% → brain may be reading leadership preference. |
Edit volume in edits_during_review | How heavily CRO rewrites option set or narrows scope during review | Heavy edits → drafts are starting points. Light edits → brain is calibrated. Used to tune system prompt + few-shot examples. |
| Brittle-assumption surfacing rate | For endorsed recommendations later retrospectively known to have failed: % where brain had flagged the failing assumption as brittle at draft time | Calibration of assumption-surface honesty. Brain should pre-flag the failure modes that actually materialize. |
| Retrospective outcomes vs projected impact range | For endorsed recommendations 4–6 quarters out: did actual outcomes fall within the projected range, above, or below? | Retrospective accuracy criterion (target ≥ 50%). Read by AGT-903 in next strategic-bet retrospective batch. |
| Tier | Window | Access |
|---|---|---|
| Hot | Active states (draft / under_review / endorsed) or recently retired (last 90 days) | Workspace UI, CRO dashboard, AGT-704 annual planning narrative job |
| Warm | Retired or shelved 90 days to 4 years | Annual retrospective batch, brain calibration analysis, strategic-churn pattern detection |
| Cold | 4 years to 10 years | Audit access, multi-year strategic retrospective, board historical inquiry |