{"id":76371,"plugin_id":"plugin_asdk_app_6ad3a430b30481919b3d089dabbc9b93","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-11-02T18:12:10.496Z","digest":"1e4b3cad1a3ee1ec575b6eca7bfb2009024299cf66bd33f5f6f8bc107eb35eed","against":null,"payload":{"description":"Use when the user asks to run the OloLand ololand-dd-ic-memo-skeptical workflow. Draft an in-session IC investment memo with one bounded Monte Carlo run using the skeptical tile-stitching pattern — public-facts refresh, individual engine tiles, web fetches, and explicit gap-vs-finding framing. Refuses to render against a stale stored deal record or an unbound simulation.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":455}],"name":"ololand-dd-ic-memo-skeptical","skill_md_contents":"---\nname: ololand-dd-ic-memo-skeptical\ndescription: \"Use when the user asks to run the OloLand ololand-dd-ic-memo-skeptical\\\n  \\ workflow. Draft an in-session IC investment memo with one bounded Monte Carlo\\\n  \\ run using the skeptical tile-stitching pattern \\u2014 public-facts refresh, individual\\\n  \\ engine tiles, web fetches, and explicit gap-vs-finding framing. Refuses to render\\\n  \\ against a stale stored deal record or an unbound simulation.\"\n---\n\n\n# Workflow for ololand-dd-ic-memo-skeptical\n\nFollow the OloLand command instructions below when the user asks for `ololand-dd-ic-memo-skeptical` or the equivalent workflow.\n\n# Skeptical IC Memo\n\nCompose an IC-defensible investment memo using OloLand's lower-level tile + web-fetch pattern. Designed to produce the output style that survives IC scrutiny — every $-figure cited, every engine output framed as `[finding]` or `[gap]`, no boilerplate gating conditions, no overtrusted simulation outputs.\n\nThis is the **preferred** memo entry point as of 2026-05-12. `run_due_diligence` is a separate bounded extraction pipeline; it does not run valuation, war-game, forensic QoE, conflict detection, or memo generation. The deprecated `generate_investment_memo` entry point invokes the memo task without the public-facts freshness precondition. `ololand-dd-ic-memo-skeptical` makes each additional read or bounded engine call explicit and hard-codes the orchestration that produces tighter artifacts.\n\n## Usage\n\n```\nololand-dd-ic-memo-skeptical <deal_id>\n```\n\n## Arguments\n\n- `deal_id` (required) — The deal to memo. Works on both public-target (ticker / CIK) and private deals; the public-facts gate only fires when applicable.\n\n## Bounded Monte Carlo authority\n\nThe user's explicit invocation of, or unambiguous request to run, `ololand-dd-ic-memo-skeptical <deal_id>` authorizes exactly one `run_monte_carlo_simulation(deal_id, n_simulations=10000, seed=42)` call in Step 4 for that deal. It does not authorize any other valuation engine, war-game, different deal, retry, or later/background run. Automatic routing to this command or a generic request for memo commentary does not grant this authority. If the call fails or returns no `simulation_id`, record Monte Carlo as a `[gap]` and stop before drafting. If it succeeds, only the exact response carrying that new `simulation_id` may be used in the in-session draft. **Never call `compose_ic_memo` from this command:** that tool has no simulation-binding or MC-exclusion parameter and could reuse an older persisted simulation even after a successful new run. Never infer, substitute, or reuse a prior simulation identity.\n\n## Orchestration (every step is required; do not skip)\n\nExecute in order. The model invoking this command must walk each step, log the result, and surface gaps as diligence asks rather than papering over them.\n\n### Step 1 — Ground the deal record\n\n1. Call `get_deal` to read the stored Deal.value, Deal.stage, ticker, and CIK.\n2. **If ticker or CIK is set**, immediately call `fetch_public_deal_facts(deal_id)`. This is the freshness check required before the in-session draft.\n3. Inspect the response's `staleness.is_stale`. When `true`, the stored row is older than a recent public 8-K announcement. Surface this as a banner ABOVE the executive summary; do not silently use the stored EV/stage as authoritative. Quote the announcement date and source URL.\n\n### Step 2 — Build the financial spine from tiles, not from a black-box DD pipeline\n\nCall each of these individually. Do NOT call `run_due_diligence`. The point of this command is that the model assembles the memo from explicit tile reads it can each skeptically frame:\n\n- `export_deal_dossier(deal_id)` — financial snapshot, comparable companies, precedent transactions, deal metadata. Inspect `failed_sources`: if non-empty, name those gaps in the memo.\n- `get_dcf_valuation(deal_id)` — DCF enterprise value, equity value, WACC, terminal growth. Note whether the run uses a Gordon Growth perpetuity or a transaction-multiple exit; both are valid but produce different EVs.\n- `render_risk_matrix_tile(deal_id)` and `get_deal_indicators(deal_id)` — risk-taxonomy concentration (67 categories / 311 risk factors) + deal health score. Do NOT paste the raw 85+ risk count; use the ranked clusters that come back in the tile.\n- `analyze_forensic_qoe(deal_id)` — Beneish M-Score, Benford's Law, EBITDA bridge, lapping detection. For each primitive, classify the output as `[finding]` (engine ran, result computed) or `[gap]` (status in `{insufficient_data, insufficient_sample, not_reliable, unavailable, not_computed}` — diligence ask, not clean bill of health).\n- `find_similar_deals(deal_id)` — institutional memory check. If the response is `status: \"no_usable_corpus\"`, say so explicitly; do not fabricate a cohort.\n\n### Step 3 — Web-fetch the current public record\n\nFor deals with a ticker:\n- Fetch the most recent 10-K and Q-most-recent earnings release directly from SEC EDGAR or the company investor-relations page.\n- Fetch the transaction announcement press release if `fetch_public_deal_facts.facts.inferred_stage == \"announced\"`.\n- Cross-check the dossier's `revenue`, `ebitda`, `net_debt`, `cash` against the public filing. If they disagree by more than 2%, note as a reconciliation gap.\n\nFor private deals, skip this step. The freshness gate doesn't apply.\n\n### Step 4 — Run the one authorized Monte Carlo strictly as a diligence prompt\n\n- Under the bounded authority above, call `run_monte_carlo_simulation(deal_id, n_simulations=10000, seed=42)` exactly once. Require a non-empty `simulation_id` in that exact response before using any returned Monte Carlo value, and carry that identity into the Step 5 audit log. Inspect `assumption_provenance` per parameter. When `default_used` is true on 2+ of revenue_growth / ebitda_margin / wacc / terminal_growth, present the MC output as **sensitivity analysis ONLY** — do not cite mean / median / P5 / P95 / VaR / CVaR numerics in the main memo body. Caveat that the distribution reflects default priors and is not a defended forecast. Appendix-only. If the call fails or returns no `simulation_id`, record the exact `[gap]` statement from the authority section, **stop before Step 5 and report that governed memo drafting is unavailable because the run cannot be bound**. Do not retry or reuse any older simulation.\n- DO NOT invoke `run_war_game_simulation` from this command. War-game is opt-in; the user has to ask for it explicitly. The robustness score is a composite (35% EV stability + 35% path consistency + 30% tail resilience), not a probability, and pasting \"base case is robust at 74%\" as IC evidence is the exact failure mode this command exists to prevent.\n\n### Step 5 — Draft directly from the exact collected outputs\n\nAuthor the memo in the current session from only the Step 1-4 responses and the public sources fetched in Step 3. Do not call `compose_ic_memo`, `generate_investment_memo`, or another persisted memo generator. Those rails cannot bind the exact Step 4 simulation, so using them would make simulation lineage ambiguous. Include the exact Step 4 `simulation_id` in the skeptic's audit log and use Monte Carlo values only from the same response that supplied it. This deliverable is an explicitly **non-persisted draft**, not a canonical IC package; canonical memo generation remains unavailable on this command until the backend exposes simulation binding or exclusion.\n\nBefore presenting the draft, verify the following:\n\n1. The Executive Summary opens with the staleness banner (if `staleness.is_stale` was true in step 1).\n2. The Recommendation section opens with exactly one of `Pass:` / `Needs More Data:` / `Conditional Go:` / `Go:` (verbatim, with colon). The post-process audit will rewrite an invented label like \"CONDITIONAL GO\" to canonical casing, but flag if you see one.\n3. Every headline $-figure (revenue, EBITDA, debt, EV, transaction value) is followed by a `[source: X]` suffix. Scan the completed draft and count any un-cited figures yourself; this direct-draft path has no generated `metadata.citation_audit` object.\n4. The Conditions Precedent list under the Recommendation cites the engine signals each condition came from. No boilerplate \"obtain legal opinion\" unless tied to a specific finding.\n5. Monte Carlo numerics do not appear in the main body when the default-heavy rule in Step 4 requires appendix-only treatment, and every Monte Carlo value used comes from the response carrying the audit log's exact `simulation_id`.\n\nIf any of the five checks fail, correct the in-session draft or surface the violation to the user — do not paper over it.\n\n### Step 5.5 — Mandatory atomic-claim verification before FINAL\n\nA `[source: X]` suffix proves a citation was *attached*, not that the number is *correct*. The citation audit in Step 5 counts un-cited figures; it does NOT confirm the cited figures match the filing. Before presenting the memo as FINAL, verify every number against the deal's ingested documents:\n\n1. Assemble the full memo body text and call `run_atomic_verifiers(deal_id, text=<memo body>)`.\n2. Read `gate_passed` and `blocking_failures`:\n   - `gate_passed: true` → every figure is supported by the retrieved corpus. Proceed to hand-off.\n   - `gate_passed: false` → each entry in `blocking_failures` is a number the ingested filing does **not** support within tolerance (or the corpus is empty). You MUST NOT label the memo FINAL. Correct or remove every unsupported figure and regenerate, OR present the memo to the user as **DRAFT** with the `blocking_failures` list shown verbatim.\n3. Never present a memo as IC-ready / FINAL while `gate_passed` is false.\n\n`run_atomic_verifiers` checks each $-figure and percentage against the top-ranked retrieved chunks at 5% tolerance, so a number that isn't in the filing — *even with a citation attached* — fails. This is the authoring-time mirror of the deterministic gate that blocks `approve_package` server-side: a confident-but-wrong figure (e.g. a revenue number that contradicts the S-1) gets caught here, before the memo reaches committee.\n\n### Step 6 — Hand off\n\nOutput the memo + a short skeptic's audit log:\n\n- Freshness: `fetch_public_deal_facts` called at <timestamp>; staleness verdict.\n- Reconciliation: any discrepancies the dossier vs public filings showed.\n- Forensic: list of `[gap]` primitives that need data pulls before bid commitment.\n- Monte Carlo lineage: exact `simulation_id` from the single authorized Step 4 response and whether its numerics were limited to the appendix.\n- Citation audit: count of un-cited $-figures (target: 0).\n- Verification: `run_atomic_verifiers` `gate_passed` verdict + count of `blocking_failures` (target: `gate_passed: true`, 0 failures). If any failures, list them — they are unsupported numbers, not minor nits.\n- Derived gating conditions: count by source class (forensic / reconciler / assumption / judgment).\n\nThe user gets the non-persisted memo draft AND the audit — the audit is what differentiates this command from `ololand-dd-dd-analyze`.\n\n## Why this command exists\n\nThe Project Atlas / GBTG IC memo (2026-05-11, deal4fdd2334a0bd) was generated via `ololand-dd-dd-analyze` → `dd-analyst` Opus sub-agent → `generate_investment_memo`. It shipped with:\n\n- \"Initial Outreach / $6.0B\" stored deal facts a week after the public $6.3B announcement\n- Monte Carlo Mean $1.08B pasted as evidence against deterministic DCF $4.34B (internally contradictory)\n- War-game robustness 74% framed as IC evidence\n- \"CONDITIONAL GO\" — an invented verdict label, no matching enum\n- Boilerplate conditions precedent untied to engine signals\n\nThe root cause is structural: a single high-level template can't be retrofitted with skepticism after the fact. `ololand-dd-ic-memo-skeptical` enforces the orchestration that produces tighter artifacts — at the cost of more tokens per memo, more steps for the user to follow, and no \"one command, one PDF\" magic.\n\nThere is no fast or old memo path. Do not route a memo request to `ololand-dd-dd-analyze`: that command is extraction-only and does not produce an investment memo. Use this command's complete orchestration for memo generation; explain the distinction if the user asks for a faster or legacy path.\n\n## URL Conventions (STRICT)\n\n- Domain is `app.ololand.ai`. Not `.com`. Not any other TLD.\n- Deal summary: `https://app.ololand.ai/deals/{deal_id}/summary`\n- Risks view: `https://app.ololand.ai/deals/{deal_id}/risks`\n- Valuations: `https://app.ololand.ai/deals/{deal_id}/valuations`\n- IC package: `https://app.ololand.ai/deals/{deal_id}/ic-package`\n\nWhen a tool response includes a `view_url`, render verbatim — never construct a URL the tool didn't return.\n\n\n## OpenAI execution requirements\n\nUse the connected MCP server's current tool schemas. Do not invent tool arguments, job-status endpoints, inputs, or outputs. If a referenced tool is unavailable, explain the limitation and request the needed connection or data. Invoke writes only when the user has requested the corresponding action. Do not initiate purchases or payments. An unrun, unsupported, or unavailable procedure is a gap, never a passing result.\n\n\nOpenAI cannot execute local lifecycle hooks. Use the packaged explicit setup/review workflow when requested. Server-side MCP auditing remains authoritative; preserve evidence blockers and human-only approval gates.\n\nClaim-correction submission is unsupported in this OpenAI upload because the current handler records surface=cowork. Do not invoke submit_agent_claim_correction from OpenAI. Explain the limitation and retain proposed correction text for human review without claiming submission. See unsupported-workflows.json for the excluded canonical workflow.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}