analyze-industry — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited analyze-industry (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
For a single industry-structure question (attractiveness, entry, allocation, roll-up thesis), produce a thesis-grade industry brief synthesizing 4-8 MBB analytical lenses. Three-layer output: narrative synthesis rendered as an HTML report (industry-brief.html), structured filters (industry-brief.yaml), append-only catalysts (signals-log.md). Three approval gates. Fresh-context senior-analyst bar test.
The bar (per `_shared/bar-test.md`): a senior sub-sector analyst reading the brief should find ≥3 non-obvious observations and zero obvious-missing.
Iron rules:
../_shared/provenance-tagging.md.../_shared/pyramid-scqa.md.../_shared/2026-terminology.md.../_shared/bar-test.md.industry-brief.html) rendered via the html-output skill — never markdown. Machine/audit artifacts (industry-brief.yaml, signals-log.md, bar-test.md, working/*.md) stay markdown/YAML — see ../_shared/output-conventions.md.analysis-quality-review Pass 1 (structure) and Pass 2 (readability) before Gate 3 — see step 9.Ask: industry slug, scope question (e.g., "is industrial robotics attractive for a sponsor-backed roll-up?"), mode (Quick / Deep), optional docs folder (industry reports, expert interview notes, target company materials). Run python scripts/init_analysis.py --slug <industry-slug> --question "<scope-question>" --mode <quick|deep> to create the industry folder.
Read references/gate-prompts.md Gate 1 template. Present: 3 candidate market framings (broad/sharpened/surgical) using the four-test discipline (specificity, measurability, supply-side coherence, customer coherence) + the sub-skill battery proposed for the chosen mode. User confirms framing + sub-skill cut. python scripts/log_run.py --event gate-1-approved.
assess-strategic-environment)Call the assess-strategic-environment sub-skill against the confirmed scope from Gate 1. It diagnoses the competitive environment type — Classical / Adaptive / Visionary / Shaping / Renewal — using the three-question discipline (predictability, malleability, harshness), flags any ambidexterity, and emits a routing matrix that drives sub-skill weighting in step 5. Output written to working/strategic-environment.md with V/C/A/I tags.
If working/strategic-environment.md declares ambidexterity (industry genuinely spans two environments at different layers / geographies / customer segments), STOP and present references/gate-prompts.md "Ambidexterity Checkpoint" template. User chooses: single-focus / dual analysis / re-scope. Do NOT auto-proceed; do NOT auto-run sub-skills twice. After resolution: python scripts/log_run.py --event ambidexterity-resolved. If single-environment, skip this step.
Read references/sub-skill-orchestration.md for the routing matrix.
Quick mode (always):
size-market — must run before map-value-chain-profit-pools (sizing calibrates pool dollars)map-five-forcesmap-value-chain-profit-poolsDeep mode (full battery — Phase 1 + Phase 2 built):
map-competitive-arena — runs in parallel with analyze-trajectory after Quick-mode 3 completeanalyze-trajectory — reads size-market G3 outputassess-moat-sources — runs AFTER map-five-forces AND map-value-chain-profit-pools (cross-skill reconciliation enforced at Gate 2)analyze-demand — conditional per routing matrix (skip if mature + stable demand + no Five Forces substitution flag)Each sub-skill writes its output to working/[sub-skill-name].md with V/C/A/I tags. Run independent sub-skills in parallel where the orchestrator can spawn them concurrently.
Read references/gate-prompts.md Gate 2 template. User validates each sub-skill output before synthesis. Flag any sub-skill output where the V/C/A/I tag distribution is >50% A or I (asserted/inferred) — that signals weak evidence base. If the Helmer power consistency check returns MISMATCH (per references/sub-skill-orchestration.md output reconciliation), Gate 2 is BLOCKED — require rework on the weaker sub-skill before proceeding. python scripts/log_run.py --event gate-2-approved.
6a. Authoring spec (ghost-deck discipline) — before drafting. Invoke analysis-quality-review in mode: spec (doc_type: brief, structural_framework: minto-pyramid) to retrieve the authoring template. Fill it in using the validated sub-skill outputs: the governing observation, the MECE supporting reasons, the SCQA opening, the evidence inventory per reason. Write the filled-in spec to working/authoring-spec.md. Then invoke analysis-quality-review in mode: spec-judge with the spec + the supporting_artifacts manifest (point at working/ and industry-brief.yaml) + an intent_summary naming the senior-analyst reader and the attractiveness/entry decision. If the judge returns FAIL, revise the spec and re-invoke; loop until PASS or max_spec_iterations: 3 ESCALATE. Catching a broken governing observation or MECE overlap here costs 2-3 lines of spec; catching it post-render costs a full re-synthesis.
6b. Draft the brief. Read ../_shared/pyramid-scqa.md. Using the approved spec as scaffolding, draft the brief content into working/industry-brief-draft.md (markdown — audit substrate, not the reader-facing deliverable):
6c. Structured + log outputs. Generate industry-brief.yaml (machine-readable filter fields per references/output-schema.md) and seed signals-log.md with dated catalysts/discontinuities surfaced during analysis. Both stay machine/append-only artifacts — never rendered to HTML.
Read ../_shared/bar-test.md. Run python scripts/bar_test.py --brief-path 08-knowledge/world-model/industries/<slug>/working/industry-brief-draft.md --industry "<slug>". The script spawns a fresh-context sub-agent. If non-obvious observations <3 OR obvious-missing list non-empty OR modernization flags non-zero, iterate the relevant sub-skill outputs, re-draft, and re-run. The bar test runs on the markdown draft — content depth is settled before the HTML render.
Once the bar test passes, invoke the html-output skill to render working/industry-brief-draft.md as a single self-contained HTML report — industry-brief.html at the industry root (08-knowledge/world-model/industries/<slug>/industry-brief.html). Use the report archetype. The HTML report is the canonical reader-facing deliverable; the markdown draft stays in working/ as audit substrate. Render the sub-skill exhibits inline where they support the argument — Five Forces heatmap, profit-pool bars, S-curve position, strategic-group map.
Invoke analysis-quality-review against industry-brief.html (the HTML deliverable only — the working/ markdown drafts are NOT reviewed):
mode: review, pass: 1 — structural_framework: minto-pyramid, strictness standard (Quick mode) or high (Deep mode). Supply the manifest: supporting_artifacts pointing at working/ (role: evidence) and industry-brief.yaml (role: source-of-truth); load_bearing_elements declaring evidence_tags (pattern \[(V|C|A|I)\]), phase_citations, numeric_claims_with_citations; intent_summary naming the senior-analyst reader and the attractiveness/entry decision. On FAIL, read the violation report + fix-patterns.md, apply targeted Edit calls to the HTML (or regenerate a section via html-output for structural fixes), and re-invoke with the same audit_dir + previous_violations. Loop until PASS.mode: review, pass: 2 against the same HTML + same audit_dir (gated on Pass 1 PASS). Same apply-fixes-yourself loop until PASS.Read references/gate-prompts.md Gate 3 template. User reads industry-brief.html + industry-brief.yaml + bar-test.md + the analysis-quality-review audit summary together. Approve / rework specific sections / reject. python scripts/log_run.py --event gate-3-approved.
Ask the four-routing question: any feedback for learnings (behavioral preferences) / edge-cases (factual exceptions) / rules (never again) / approved-examples (save as reference output)? Save outputs accordingly.
If invoked with --update <industry-slug>, skip steps 2-10. Run python scripts/update_signals.py --slug <slug> — researches recent industry activity since last signals entry, appends date-stamped entries to signals-log.md. Single user-confirmation gate at end.
industry-brief.yaml inherits the granular market sizing, profit-pool map, and 7 Powers assessment as priors, removing the most expensive recall variance from company-model drafting.analyze-industry produces structural diagnosis; assess-category produces investment verdict. Do not call each other.html-output (report archetype) at step 8; the HTML report (industry-brief.html) is the canonical output. Markdown drafts stay in working/ for audit.mode: spec + mode: spec-judge at step 6a (ghost-deck discipline before drafting — the spec is a private working/ scaffold, not reviewed as a deliverable) and mode: review pass: 1 + pass: 2 at step 9 against the HTML deliverable. Use doc_type: brief, structural_framework: minto-pyramid. Working markdown drafts in working/ are NOT reviewed. See .claude/skills/analysis-quality-review/references/calling-contract.md for the manifest schema.industry-brief.html must end with a Where to Play / How to Win section that names (a) which segment to enter or focus, (b) the capability + structural-power combination that wins there. Generic takeaways fail Gate 3.map-five-forces validation requires the analyst to name THE force that governs this industry's profit distribution in one causal sentence before validation passes.size-market validation rejects any sizing without ≥3 sub-segment growth rates and an explicit de-averaging statement.map-value-chain-profit-pools validation requires EBIT or economic profit per value-chain stage. Revenue-only profit pools fail validation.bar_test.py spawns a fresh sub-agent with the brief but NOT the drafting context, prompted to actively find gaps.../_shared/bar-test.md) flags these; brief cannot ship until all flags resolved.working/ draft and skipped the html-output render. Fix: the reader-facing deliverable is always industry-brief.html rendered via html-output (step 8). Markdown lives in working/ as audit substrate only.analysis-quality-review Pass 2 surfaces dozens of readability nits but the brief has no clear governing observation. Cause: the ghost-deck spec-judge (step 6a) was skipped, so a broken D1 reached the render. Fix: never skip step 6a — the spec-judge loop catches governing-observation and MECE failures at the 2-3K-token spec stage, before the expensive render.industry-brief.html), rendered via html-output. Machine/audit artifacts (.yaml, signals-log.md, bar-test.md, working/*.md) stay markdown/YAML.analysis-quality-review clearing Pass 1 (structure) and Pass 2 (readability) on the HTML brief — see step 9.encoding='utf-8'.../_shared/pyramid-scqa.md.../_shared/2026-terminology.md. Legacy frames flagged by bar test must be resolved before ship.v2 (2026-05-21) — synthesis now renders the brief as a self-contained HTML report via the html-output skill and clears analysis-quality-review Pass 1 + Pass 2 before Gate 3; ghost-deck spec + spec-judge discipline added at step 6a; the markdown brief was demoted to working/industry-brief-draft.md audit substrate. v1 — markdown industry-brief.md as the deliverable; no quality-review gate.
<!-- Built with Agent Engineer Master — get your own production-ready skill: www.agentengineermaster.com/skill-engineer -->
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.