Agent skill
lp-do-fact-find
Thin orchestrator for discovery, intake routing, and evidence-first fact-finding. Routes to specialized modules and emits analysis-ready artifacts for /lp-do-analysis. For understanding-only briefings, use /lp-do-briefing.
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/other/other/lp-do-fact-find
SKILL.md
Fact Find Orchestrator
/lp-do-fact-find is the intake and routing layer. Keep this file thin.
This orchestrator does five things:
- Discovery and selection (topic)
- Sufficiency gate
- Classification (track, deliverable)
- Module routing (load only one relevant module, plus mixed-track add-on when needed)
- Artifact persistence using shared templates + automatic critique
Do not embed long templates, long checklists, or API payload blocks here.
Global Invariants
Operating mode
FACT-FIND ONLY
Repo actions (allowed)
- Read/search files and docs.
- Run non-destructive commands (for example
rg, targeted tests, targeted lint/typecheck) when needed for evidence. - Inspect targeted git history.
Prohibited actions
- Code changes, refactors, migrations, or production data writes.
- Destructive shell/git commands.
- Analysis/planning/build execution (this skill ends at fact-find output).
Evidence and quality rules
- Evidence first: non-trivial claims require explicit pointers.
- Unknowns must include a concrete verification path.
- Omit sections with no evidence, or collapse to a one-line
Not investigated: <reason>. - Process-affecting work must capture the current process map area by area. A touched-file list is not enough when the change alters CI/deploy/release lanes, approvals, orchestration, lifecycle states, or multi-step operator flows.
- Keep signal high:
- max 10 key files/modules in primary evidence list
- max 10 risks
- max 8 open questions
Required Inputs
Minimum intake before investigation:
- Concrete area anchor (feature/component/system)
- At least one location anchor (path guess, route, endpoint, error/log, user flow)
- Provisional deliverable family
If any item is missing, ask only the minimum follow-up questions needed to unblock.
Phase 0: Queue Check Gate
Load and follow: ../_shared/queue-check-gate.md (fact-find mode).
Phase 1: Discovery and Selection
- Fast path (argument provided): If argument is a topic, proceed directly to sufficiency gate.
- Discovery path (no argument): Scan
docs/plans/for directories withfact-find.md; show list; ask user to select or provide new topic.
Phase 2: Context Hydration
If a matching fact-find.md already exists at docs/plans/<feature-slug>/fact-find.md, read it and use existing findings and open questions as starting context. Otherwise, start fresh from the topic anchor.
Optional CASS Retrieval (Pilot, recommended)
Before deep investigation, run CASS retrieval for reusable prior evidence:
pnpm startup-loop:cass-retrieve -- --mode fact-find --slug <feature-slug> --topic "<topic>"
Use output file (if generated) as advisory context:
docs/plans/<feature-slug>/artifacts/cass-context.md
Rules:
- Retrieval is fail-open. If CASS is unavailable, continue with normal investigation.
- Keep canonical evidence in the fact-find artifact itself (paths, tests, docs, call sites).
- Do not treat retrieval snippets as proof without verifying source paths directly.
Access Declarations
Before the investigation begins, list every external data source, service, or system that will be needed to answer the questions in this fact-find. For each source:
- Name the source and required access type.
- Check
memory/data-access.md(~/.claude/projects/<project-hash>/memory/data-access.md); if absent/unlisted, markUNVERIFIED(do not block). - Record sources discovered mid-investigation under
## Access Declarations. - Follow schema:
docs/plans/startup-loop-build-reflection-gate/task-01-schema-spec.md§ 3. If no external dependencies, writeNone.
Phase 3: Sufficiency Gate
Do not start repository investigation until minimum intake is satisfied. If insufficient, ask targeted questions only, each tied to a decision it unlocks.
Phase 4: Classification
Compute this routing header first.
Outcome: planning
Execution-Track: <code | business-artifact | mixed>
Deliverable-Family: <code-change | message | doc | spreadsheet | multi>
Deliverable-Channel: <none | email | whatsapp>
Deliverable-Subtype: <none | product-brief | marketing-asset>
Deliverable-Type: <canonical downstream type>
Startup-Deliverable-Alias: <none | startup-budget-envelope | startup-channel-plan | startup-demand-test-protocol | startup-supply-timeline | startup-weekly-kpcs-memo | website-first-build-backlog | website-upgrade-backlog | startup-loop-gap-fill>
Loop-Gap-Trigger: <none | block | bottleneck | feedback>
Use routing/deliverable-routing.yaml to map family/channel/subtype to canonical Deliverable-Type. Keep Deliverable-Type in canonical downstream format expected by /lp-do-plan and /lp-do-build. Execution skill IDs are canonicalized without leading slash (e.g., lp-do-build).
Hard branches:
- If invocation includes
--website-first-build-backlog, setStartup-Deliverable-Alias: website-first-build-backlogbefore routing. - If
Startup-Deliverable-Alias: website-first-build-backlog, route immediately to the website-first-build module and skip generic business/code checklists that do not apply. - If
Startup-Deliverable-Alias: website-upgrade-backlog, route immediately to the website-upgrade module and skip generic business/code checklists that do not apply. - If
Startup-Deliverable-Alias: startup-loop-gap-fill, route immediately to the loop-gap module. SetLoop-Gap-Triggerfrom the argument (block/bottleneck/feedback) or ask one targeted question. Output path and outcome (briefing vs planning) are determined by the module based on trigger type. Skip Phase 6 standard output paths — use trigger-specific paths defined in the module.
Phase 5: Route to a Single Module
Load only the relevant module file(s):
codetrack:modules/outcome-a-code.mdbusiness-artifacttrack:modules/outcome-a-business.mdmixedtrack: load both code and business modules; merge evidencewebsite-first-build-backlogalias:modules/outcome-a-website-first-build.mdwebsite-upgrade-backlogalias:modules/outcome-a-website-upgrade.mdstartup-loop-gap-fillalias:modules/outcome-a-loop-gap.md(output path determined by trigger type inside the module)
For Execution-Track: code | mixed, also load:
../_shared/engineering-coverage-matrix.md
Use it to fill ## Engineering Coverage Matrix in the artifact with explicit Required / N/A treatment for every canonical row.
Phase 5.4: Current Process Map (Non-omittable)
Before rehearsal, write ## Current Process Map in the fact-find draft.
This section may be a single line None: local code path only only when the work does not change any multi-step process, workflow, lifecycle state, CI/deploy/release lane, approval path, or operator runbook.
For process-affecting work, map the current state area by area:
- trigger/start condition
- step-by-step current flow
- owners/systems/handoffs
- end condition
- known issues already visible in current state
- evidence refs for each area
If you cannot explain the current process end-to-end from trigger to end state, the fact-find is not ready for analysis. Expand the investigation first.
Phase 5.5: Scope Rehearsal
Load and follow: ../_shared/simulation-protocol.md
Run a scope rehearsal of the investigation completed in Phase 5. This is not a code execution trace — it is a scope-gap check. Walk through each evidence area identified in the investigation and apply the scope rehearsal checklist defined in the shared protocol (5 categories: concrete investigation path, investigation ordering, system boundary coverage, circular investigation dependency, missing domain coverage).
Write a ## Rehearsal Trace section into the fact-find draft (before persisting in Phase 6) with one row per scope area:
| Scope Area | Coverage Confirmed | Issues Found | Resolution Required |
|---|---|---|---|
| Yes / Partial / No | None — or: [Category] [Severity]: description | Yes / No |
Apply the blocking/advisory threshold exactly as defined in ../_shared/simulation-protocol.md. Do not restate or weaken the threshold here.
Phase 5.6: Scope Signal (Two-Way)
After rehearsal, classify scope posture using evidence from the investigation:
constrained: scope is too broad/risky for current evidence or capacity; narrow it.right-sized: scope is realistic and appropriately bounded.limited-thinking: scope is safely expandable now based on clear evidence.
When limited-thinking, add 1-3 concrete expansion suggestions. Each suggestion must include:
- what to add now,
- expected upside,
- added risk/cost.
Do not emit limited-thinking without explicit evidence that dependencies, risks, and validation burden remain manageable.
Phase 6: Persist Artifact with Shared Templates
- Output path:
docs/plans/<feature-slug>/fact-find.md - Template:
docs/plans/_templates/fact-find-planning.md - Always include the routing header fields in frontmatter.
- Dispatch-routed path:
- single packet -> write
Dispatch-ID - bundled work package -> write
Dispatch-IDsandWork-Package-Reason
- single packet -> write
- Canonical artifact name:
fact-find.mdis the formal loop output artifact for this skill. Required sections and frontmatter fields are defined indocs/business-os/startup-loop/contracts/loop-output-contracts.md(Artifact 1). The path above is authoritative; do not store this artifact at any other location. - Progressive-disclosure sidecar: after validators pass, generate
docs/plans/<feature-slug>/fact-find.packet.jsonperdocs/business-os/startup-loop/contracts/do-stage-handoff-packet-contract.md. - Include
## Scope Signalin the artifact body:Signal: <constrained | right-sized | limited-thinking>Rationale: <evidence-based reason>Expansion suggestionssubsection is required only when signal islimited-thinking.
Phase 6.1: Outcome Contract Gate (Non-Omittable)
Before moving to Phase 6.5, enforce outcome-contract continuity:
## Outcome Contractsection must exist infact-find.md(non-omittable).- Dispatch-routed path: populate
WhyandIntended Outcomefrom dispatch payload fields (why,intended_outcome) when present. - Direct-inject path: populate from frontmatter
Trigger-WhyandTrigger-Intended-Outcome. - If values are unavailable, set explicit fallback:
Why: TBDSource: auto
- Do not leave outcome fields blank and do not fabricate operator-authored values.
Phase 6.2: Unknown Prescription Discovery Contract (When Present)
If the queued work item carries self_evolving.discovery_contract, the fact-find must emit a machine-readable discovery output in the brief body. This is required for unknown or hypothesized prescriptions and is not optional narrative.
Write a ## Discovery Contract Output section with:
Gap Case ID: <gap_case_id>Recommended First Prescription: <prescription_id>Required Inputs:flat listExpected Artifacts:flat listExpected Signals:flat listPrescription Candidates:one flat bullet per candidate, each including:Prescription IDPrescription FamilyRequired RouteRequired InputsExpected ArtifactsExpected Signals
Rules:
- Narrative may explain the recommendation, but it cannot replace these machine fields.
Recommended First Prescriptionmust match one candidate inPrescription Candidates.- If evidence is still insufficient, keep the section but mark unresolved fields explicitly; do not omit the section.
Phase 6.5: Open Question Self-Resolve Gate
Before running the evidence gap review or critique, review every question currently marked as Open.
Self-resolve any question answerable from available evidence and business constraints; move it to Resolved with evidence/logic. Keep a question in Open only when operator-only knowledge is required (undocumented preference/intent, unavailable real-world fact, or genuine preference fork). Default posture: reason and recommend rather than defer.
Phase 7: Mandatory Evidence Gap Review (Outcome A)
Before marking Ready-for-analysis, run checklist:
docs/plans/_templates/evidence-gap-review-checklist.md
Then write outcomes into the brief section:
## Evidence Gap Review### Gaps Addressed### Confidence Adjustments### Remaining Assumptions
If unresolved blockers remain, classify the blocker type before setting status:
- Recoverable (missing evidence, awaiting user input, resolvable with more investigation): set
Status: Needs-input, ask the minimal blocking questions, and stop. - Structural / infeasible (architecture prevents this, risk is prohibitive, fundamental scope mismatch, or no viable path exists regardless of evidence gathered): set
Status: Infeasible, write a## Kill Rationalesection with a one-sentence explanation, and stop. Do not route to planning.
Minimum Evidence Floor Gate
Before critique, ensure minimum substance exists. If floor fails, set Status: Needs-input and stop (do not critique empty briefs):
- Code: ≥1 entry-point path, ≥1 key module with role, test landscape present.
- Business: ≥1 hypothesis,
Delivery-Readiness≥ 60%. - Mixed: must pass both.
Phase 7a: Critique Loop (1–3 rounds, mandatory)
After persisting the fact-find artifact and completing the evidence gap review, run the critique loop in fact-find mode.
Load and follow: ../_shared/critique-loop-protocol.md
Phase 7b: Deterministic Validators
After critique and before setting Status: Ready-for-analysis, run:
scripts/validate-fact-find.sh docs/plans/<feature-slug>/fact-find.md docs/plans/<feature-slug>/critique-history.md
scripts/validate-engineering-coverage.sh docs/plans/<feature-slug>/fact-find.md
Rules:
validate-fact-find.shis required for all fact-finds.validate-engineering-coverage.shis required forExecution-Track: code | mixed.- If either required validator fails, fix the artifact or keep status below
Ready-for-analysis.
After required validators pass, generate the stage handoff packet:
scripts/generate-stage-handoff-packet.sh docs/plans/<feature-slug>/fact-find.md
After required validators pass, emit a skill liveness observation so the BOS in-progress dashboard shows this fact-find as actively running:
pnpm --filter scripts tsx scripts/src/startup-loop/write-skill-observation.ts -- \
--slug <feature-slug> --skill lp-do-fact-find --step fact-find --business <BUSINESS>
Fail-open: if the script exits non-zero, log a warning and continue. The fact-find must not be blocked by observation write failures.
After required validators pass, append workflow-step telemetry:
pnpm --filter scripts startup-loop:lp-do-ideas-record-workflow-telemetry -- --stage lp-do-fact-find --feature-slug <feature-slug> --module <loaded-module-relative-to-stage-skill> [--module <additional-module>] [--input-path <repo-relative-extra-input>] --deterministic-check scripts/validate-fact-find.sh [--deterministic-check scripts/validate-engineering-coverage.sh]
Rules:
- Record once per materially updated fact-find artifact.
- Include the actual stage-local modules loaded in Phase 5 and any extra repo inputs that materially contributed context size.
- Codex token usage is auto-captured when
CODEX_THREAD_IDis available. - Claude token usage is auto-captured via project session logs (sessions-index.json → debug/latest fallback). Explicit
--claude-session-idstill takes priority when supplied.
Completion Message
Fact-find complete. Brief saved to
docs/plans/<feature-slug>/fact-find.md. Status:<Ready-for-analysis | Needs-input | Infeasible>. Primary execution skill:<skill>. Evidence gap review complete. Critique:<N>round(s), final verdict<credible | partially credible | not credible>, score<X.X>/5.0.
Status-dependent next action (execute immediately, do not wait for user):
Ready-for-analysis→ automatically invoke/lp-do-analysis <feature-slug>to continue the pipeline.Needs-input→ surface the specific blocking questions, then stop. Do not invoke/lp-do-analysis.Infeasible→ surface the kill rationale, then stop. Pipeline ends here.
Quick Validation Gate
- Phase 0 queue check run — matching queued packet confirmed or direct-inject path taken
- Access declarations listed and verified (or
Nonerecorded) before investigation begins - Routing header computed and written to frontmatter
- Dispatch-routed metadata written correctly (
Dispatch-IDfor single packet,Dispatch-IDs+Work-Package-Reasonfor bundled packet sets) - Only relevant module(s) loaded
- Scope signal classified (
constrained,right-sized, orlimited-thinking) with evidence-backed rationale -
## Outcome Contractpresent and populated (dispatch payload or trigger frontmatter; fallbackWhy: TBD,Source: autowhen unavailable) -
## Current Process Mappresent (or explicitNone: local code path only) - For code/mixed work,
## Engineering Coverage Matrixpresent with all canonical rows - Outcome A evidence gap review completed and recorded
- lp-do-factcheck run if fact-find contains codebase claims (file paths, function names, coverage assertions)
- Deterministic validators run (
validate-fact-find.sh; and for code/mixedvalidate-engineering-coverage.sh) -
fact-find.packet.jsongenerated after validators pass - Workflow-step telemetry appended after validators pass
- Status classified as
Ready-for-analysis,Needs-input, orInfeasible(not left ambiguous) - If
Ready-for-analysis:/lp-do-analysis <feature-slug>automatically invoked
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
Didn't find tool you were looking for?