Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
193 commits
Select commit Hold shift + click to select a range
0e4b13a
ci: add cap-table scripts to mypy matrix + CLAUDE.md parity test
yaniv-golan Jun 11, 2026
b15ef18
docs(readme): add cap-table skill section; six agents; Python 3.10+
yaniv-golan Jun 11, 2026
1c30ce4
docs: include cap-table in CONTRIBUTING and SECURITY; Python 3.10+
yaniv-golan Jun 11, 2026
f576b4a
docs(claude-md): correct sync-test-repo framing, e2e figures, cap-tab…
yaniv-golan Jun 11, 2026
14b13e8
docs(versioning): tags gate releases, reconcile no-bump cases, portab…
yaniv-golan Jun 11, 2026
b4faec7
docs(changelog): backfill ### Highlights on 9 entries; fix escape typo
yaniv-golan Jun 11, 2026
9e9e343
fix(marketplace): drop top-level description to match documented format
yaniv-golan Jun 11, 2026
d07981e
fix(founder-context): real recursive deep merge + doc/comment accuracy
yaniv-golan Jun 11, 2026
6b98c74
fix(find-artifact): conform to --pretty / -o / JSON-stdout script con…
yaniv-golan Jun 11, 2026
3ee1930
fix(corpus-scripts): classifier correctness, privacy, and convention …
yaniv-golan Jun 11, 2026
3f60cc5
fix(ic-sim): producers inject metadata.run_id via required --run-id
yaniv-golan Jun 11, 2026
3198013
fix(ic-sim): derive consensus_strength, fix warnings ordering, guard …
yaniv-golan Jun 11, 2026
6ca1227
docs(ic-sim): align artifact-schemas with run_id contract and dispatc…
yaniv-golan Jun 11, 2026
4076635
fix(competitive-positioning): checklist.py --input-mode/--run-id flags
yaniv-golan Jun 11, 2026
fd03b62
fix(competitive-positioning): harden scripts against malformed artifacts
yaniv-golan Jun 11, 2026
9630a93
fix(competitive-positioning): correct EVID_02 mode-gating prose
yaniv-golan Jun 11, 2026
31e98ba
test(competitive-positioning): regression tests for audit a4 fixes
yaniv-golan Jun 11, 2026
3caf8b9
fix(deck-review): checklist.py omits null evidence/notes, requires --…
yaniv-golan Jun 11, 2026
4b6ce6e
fix(deck-review): compose status reflects MARKER_COLLISION, guard mal…
yaniv-golan Jun 11, 2026
026372f
fix(deck-review): move resume detection into setup_run.py; stage_prof…
yaniv-golan Jun 11, 2026
0cb5e6a
fix(market-sizing): tolerate non-numeric deck claims and null notes i…
yaniv-golan Jun 11, 2026
96afdcb
fix(deck-review): gate_state answer handles corrupt files; visualize …
yaniv-golan Jun 11, 2026
9853965
feat(market-sizing): add --run-id metadata stamping to producer scripts
yaniv-golan Jun 11, 2026
90ed0e5
docs(deck-review): align SKILL.md + agent with resume/confidence/Cont…
yaniv-golan Jun 11, 2026
a849649
fix(market-sizing): reorder compose so MARKER_COLLISION reflects in s…
yaniv-golan Jun 11, 2026
a89c9d3
test(deck-review): regression coverage for null-key omission, resume …
yaniv-golan Jun 11, 2026
418d047
docs(market-sizing): reconcile skill, agent, and schema docs with pro…
yaniv-golan Jun 11, 2026
ea214ff
fix(financial-model-review): guard present-but-null numeric fields in…
yaniv-golan Jun 11, 2026
ede924f
fix(financial-model-review): MARKER_COLLISION pre-scan before status …
yaniv-golan Jun 11, 2026
450cbc9
fix(financial-model-review): script-convention, observability, and wr…
yaniv-golan Jun 11, 2026
575504c
fix(financial-model-review): stop overstating default_alive as "on tr…
yaniv-golan Jun 11, 2026
806aeeb
docs(financial-model-review): stub run_id parity + schema/contract sync
yaniv-golan Jun 11, 2026
f771c9b
feat(cap-table): single-source rule-pack version + shared CLI emit he…
yaniv-golan Jun 11, 2026
875b656
refactor(cap-table): bind producers to _rule_pack version; robust sys…
yaniv-golan Jun 11, 2026
948fb24
fix(cap-table): math correctness — CCP fallback, AD baseline, palette…
yaniv-golan Jun 11, 2026
0c07e31
test(cap-table): regression suite for rule-pack version + math fixes
yaniv-golan Jun 11, 2026
4e8b444
fix(cap-table): declare pdfplumber; missing-parser blocks the halluci…
yaniv-golan Jun 11, 2026
bb5cabf
fix(cap-table): extraction correctness — AoA merge, Carta fabrication…
yaniv-golan Jun 11, 2026
29ac436
test(cap-table): regression suite for extraction fixes
yaniv-golan Jun 11, 2026
26b889e
docs(cap-table): sync SKILL/agent/references with shipped behavior
yaniv-golan Jun 11, 2026
68aa641
feat(cap-table): vision fallback for image-only docs in the evidence …
yaniv-golan Jun 11, 2026
157c48c
test(cap-table): backward_verifier --mode warn is the default (exit 0…
yaniv-golan Jun 11, 2026
a0797e8
fix(cap-table): narrow conversion_event_date for mypy; test type anno…
yaniv-golan Jun 11, 2026
bdb85bb
test(cap-table): guard Optional in discount-boundary assertion
yaniv-golan Jun 11, 2026
ae1e4b8
revert: drop out-of-scope evidence_verifier.py edit (superseded by ca…
yaniv-golan Jun 11, 2026
a6725db
Merge branch 'fix/audit-a8-root-docs'
yaniv-golan Jun 11, 2026
69c42af
Merge branch 'fix/audit-a7-shared-scripts'
yaniv-golan Jun 11, 2026
e4b44bf
Merge branch 'fix/audit-a2-ic-sim'
yaniv-golan Jun 11, 2026
2385377
Merge branch 'fix/audit-a3-market-sizing'
yaniv-golan Jun 11, 2026
46a3b5e
Merge branch 'fix/audit-a4-competitive-positioning'
yaniv-golan Jun 11, 2026
0f40cbd
Merge branch 'fix/audit-a6-fmr'
yaniv-golan Jun 11, 2026
d5f38ef
Merge branch 'fix/audit-a5-deck-review'
yaniv-golan Jun 11, 2026
c2e9ec4
Merge branch 'fix/audit-a1-cap-table'
yaniv-golan Jun 11, 2026
86c1a30
fix(test): annotate market-sizing checklist helper for mypy
yaniv-golan Jun 11, 2026
2e602e9
fix(ic-sim,market-sizing): resolve cross-owned straggler findings
yaniv-golan Jun 11, 2026
1f27e94
test(orchestration): static guard — CLI-stamping producer pipes carry…
yaniv-golan Jun 11, 2026
8af0632
fix(versioning): CI bump-filter requires in-plugin Markdown bumps, ma…
yaniv-golan Jun 11, 2026
becd1a6
refactor(competitive-positioning,fmr): unify run_id stamping via prod…
yaniv-golan Jun 11, 2026
0a77c53
fix(cap-table): exclude AD meta keys from explorer donut/legend; pin …
yaniv-golan Jun 11, 2026
af2713c
fix(cap-table): note conversion surfaces as dilution driver; Carta ex…
yaniv-golan Jun 11, 2026
8e0b9ce
fix(financial-model-review): annotate default-alive scenarios in the …
yaniv-golan Jun 11, 2026
3adc724
fix(skills): Context A dispatches forbid direct file writes; default-…
yaniv-golan Jun 11, 2026
cd9ebb8
fix(financial-model-review): extracted-values review is a stop gate, …
yaniv-golan Jun 11, 2026
5fc54d9
fix(financial-model-review): corrections tray gets a visible boundary…
yaniv-golan Jun 11, 2026
a0ca2d4
fix(financial-model-review): burn multiple divided by monthly ΔMRR in…
yaniv-golan Jun 11, 2026
d36702f
fix(financial-model-review): partial models evaluate all 46 items; da…
yaniv-golan Jun 11, 2026
0ff50e0
fix(financial-model-review): checklist sub-agent must not self-gate —…
yaniv-golan Jun 11, 2026
b2ba3a0
feat(skills): lool brand theme across all generated HTML artifacts
yaniv-golan Jun 12, 2026
8d99132
test(cap-table): drift-contract tests pinning prose to script source;…
yaniv-golan Jun 12, 2026
6dc905d
test(deck-review): drift-contract tests; eliminate dead shell-variabl…
yaniv-golan Jun 12, 2026
6920603
test(ic-sim): drift-contract tests; coaching payload printed instead …
yaniv-golan Jun 12, 2026
6f309bd
test(market-sizing): drift-contract tests pinning prose to script source
yaniv-golan Jun 12, 2026
cddf04a
test(competitive-positioning): drift-contract tests; fix dead coachin…
yaniv-golan Jun 12, 2026
4cf14e7
feat(cap-table): ARTICLES_OF_ASSOCIATION_EXTRACTION dispatch template…
yaniv-golan Jun 12, 2026
3af239a
feat(cap-table): --mode=grid dumps the lane-3 cell grid deterministic…
yaniv-golan Jun 12, 2026
7fed01f
feat(deck-review): resume preserves same-run pipeline artifacts acros…
yaniv-golan Jun 12, 2026
b3de54f
docs(competitive-positioning): name all three artifact-integrity warn…
yaniv-golan Jun 12, 2026
48cf2c1
test(cap-table): renderer key-coverage — produced keys must be render…
yaniv-golan Jun 12, 2026
efef0a9
test(financial-model-review): renderer key-coverage for metrics, scen…
yaniv-golan Jun 12, 2026
524cdba
test(skills): renderer key-coverage for deck-review, market-sizing, i…
yaniv-golan Jun 12, 2026
0a98bee
fix(financial-model-review): three more 12x period-mismatch bugs; GRR…
yaniv-golan Jun 12, 2026
fd5f301
fix(cap-table): pre-money SAFE honors the document's two conversion b…
yaniv-golan Jun 12, 2026
bbfaf1c
fix(cap-table): warrants join the broad-based A; anti-dilution rule t…
yaniv-golan Jun 12, 2026
b5b9173
feat(skills): self-sufficient reports for deck-review, market-sizing,…
yaniv-golan Jun 12, 2026
c7e25e3
feat(skills): self-sufficient reports for competitive-positioning, fi…
yaniv-golan Jun 12, 2026
ef813cb
fix(cap-table): solver flags economically impossible rounds instead o…
yaniv-golan Jun 13, 2026
492addb
fix(financial-model-review): full S&M base for magic number, realized…
yaniv-golan Jun 13, 2026
9dca1e5
fix(cap-table): replace dead ITA-SAFE citation with live sources; hon…
yaniv-golan Jun 13, 2026
ad718e2
docs(cap-table): pin the gov.il primary ITA SAFE circular; record Car…
yaniv-golan Jun 13, 2026
359f108
fix(skills): enumerate canonical IDs in scoring dispatch templates; g…
yaniv-golan Jun 13, 2026
bbf7e7a
fix(deck-review): 3-value ai_company_status with producer-applied AI-…
yaniv-golan Jun 13, 2026
3e9d521
feat(feedback): add /founder-skills:feedback channel + report footers
yaniv-golan Jun 17, 2026
33f48df
fix(skills): resolve artifacts root via script, not paraphraseable in…
yaniv-golan Jun 18, 2026
3f24aa5
test(cap-table): add token-free cowork-harness replay gate
yaniv-golan Jun 18, 2026
4cb8896
fix(market-sizing): unit-aware formatting for sensitivity parameter v…
yaniv-golan Jun 18, 2026
840fa8f
chore: gitignore .playwright-mcp/ scratch dir
yaniv-golan Jun 18, 2026
4c2476d
docs(changelog): log artifacts-root resolver, market-sizing sensitivi…
yaniv-golan Jun 18, 2026
6e375e5
release: v0.5.1 — fleet-wide hardening (audit remediation, brand them…
yaniv-golan Jun 18, 2026
c169365
fix(skills): stage scratch in /tmp and overwrite-in-place, never dele…
yaniv-golan Jun 18, 2026
f878e8e
test(cowork): fleet cassette suite + email canary + privacy/staleness…
yaniv-golan Jun 18, 2026
1caff11
ci(cowork): adopt 0.5.0 class-scoped privacy allows; bump harness flo…
yaniv-golan Jun 18, 2026
aa8fb2a
test(cowork): adopt 0.5.0 per-skill staleness scoping; re-record flee…
yaniv-golan Jun 18, 2026
48f42d2
docs(changelog): refresh 0.5.1 for fleet outputs-safety + relocated c…
yaniv-golan Jun 18, 2026
caacc7b
ci(cowork): migrate to cowork-harness 0.6.0
yaniv-golan Jun 18, 2026
3d9ac19
feat(cap-table): deterministic Lane-3 freeform mapper (contract + pro…
yaniv-golan Jun 18, 2026
1dcac3c
feat(cap-table): --mode=freeform-emit CLI wrapper for the Lane-3 mapper
yaniv-golan Jun 18, 2026
7b3c7a9
feat(cap-table): wire Lane-3 freeform-emit into the skill + agent con…
yaniv-golan Jun 18, 2026
ddca052
docs(cap-table): index Lane-3 test + point Pulley/Carta routing at fr…
yaniv-golan Jun 18, 2026
9a23eee
refactor(cap-table): remove orphaned --mode=freeform (validate-only)
yaniv-golan Jun 18, 2026
533bf11
ci(cowork): adopt cowork-harness 0.7.1 (manifest-backed existence ass…
yaniv-golan Jun 20, 2026
aa06970
test(cowork): re-record ic-sim + market-sizing cassettes under 0.7.1
yaniv-golan Jun 20, 2026
0a1a2db
chore: gitignore harness run output dir (runs/)
yaniv-golan Jun 20, 2026
e123b2b
fix(cap-table): honor scenario-level mfn_elections in the priced-roun…
yaniv-golan Jun 21, 2026
e85d428
fix(cap-table): S2/S3/S5 — assumed-base, investor-as-founder, fast-as…
yaniv-golan Jun 21, 2026
bde30aa
ci(cowork): adopt cowork-harness 0.8.0 (pin floor + docs)
yaniv-golan Jun 21, 2026
c97d7ad
ci(cowork): single-source privacy allowlist + batch re-record tooling…
yaniv-golan Jun 22, 2026
61a3e5b
docs(cowork): close P2, document live-lane deferral, wire re-record i…
yaniv-golan Jun 22, 2026
402e140
test(cowork): re-record fleet under 0.8.0 + deterministic extract-saf…
yaniv-golan Jun 22, 2026
e00d606
feat(cap-table): broaden trigger to conversion-math/eligibility quest…
yaniv-golan Jun 22, 2026
28db817
test(cap-table): reliability bench spine — canonicals-from-scripts, d…
yaniv-golan Jun 22, 2026
14cfe31
feat(cap-table): add verify_one rule-lookup path + Step-0 routing for…
yaniv-golan Jun 22, 2026
1efe2f3
feat(cap-table): add concise mode — real engine math, short cited ans…
yaniv-golan Jun 22, 2026
b951245
feat(cap-table): wire explorer number tickers (P0)
yaniv-golan Jun 22, 2026
3b2e0ac
fix(cap-table): color explorer donut wedges (strip _pct keys) + drop …
yaniv-golan Jun 22, 2026
79bfde1
refactor(cap-table): persistent-DOM explorer skeleton (P0a)
yaniv-golan Jun 22, 2026
8338063
feat(cap-table): donut value-morph + Sankey transition (P1/P2)
yaniv-golan Jun 22, 2026
33f74da
fix(cap-table): address PR2 render-path review (per-instrument gating…
yaniv-golan Jun 22, 2026
a89512c
feat(cap-table): card slide-in on scenario change (P3)
yaniv-golan Jun 22, 2026
58e1619
feat(cap-table): pre-money sweep slider for the explorer (P4)
yaniv-golan Jun 22, 2026
17a6527
fix(cap-table): address PR4 sweep-slider review (steps=1, slider cohe…
yaniv-golan Jun 22, 2026
253a01a
docs: changelog + README for explorer animation layer + pre-money slider
yaniv-golan Jun 22, 2026
7fb008d
fix(cap-table): explorer counsel copy handles zero + pluralizes
yaniv-golan Jun 22, 2026
624660e
fix(cap-table): report shows cap-implied ownership instead of phantom…
yaniv-golan Jun 22, 2026
42d2a69
feat(cap-table): humanize internal enums + jargon in founder-facing o…
yaniv-golan Jun 22, 2026
a07c266
feat(cap-table): rule references become readable, linked, sourced
yaniv-golan Jun 22, 2026
ce79438
feat(cap-table): slim, deduped date-sensitive watchlist
yaniv-golan Jun 22, 2026
8f296da
fix(cap-table): humanize field names in watchlist actions
yaniv-golan Jun 22, 2026
4101572
fix(cap-table): explorer slider updates the legend + Sankey too
yaniv-golan Jun 22, 2026
574c24d
refactor(evals): complete cap-table bench relocation (path fixes + refs)
yaniv-golan Jun 22, 2026
aa5d4c1
fix(cap-table): explorer slider updates the Founder-Impact callout too
yaniv-golan Jun 22, 2026
81607a4
fix(cap-table): slider updates per-SAFE/note details + comprehensive …
yaniv-golan Jun 22, 2026
df957e9
ci(cowork): adopt cowork-harness 0.9.0 — pins + lint-dir + staleness …
yaniv-golan Jun 22, 2026
1c9f2bd
ci(cowork): restore hard staleness gate in rerecord.sh (0.9.0 H9 closed)
yaniv-golan Jun 22, 2026
e16d38b
test(cowork): re-record fleet under cowork-harness 0.9.0 (v6, stalene…
yaniv-golan Jun 22, 2026
4a5b8c4
feat(cap-table): explorer usability PR1 — responsive layout, containe…
yaniv-golan Jun 22, 2026
466b372
feat(cap-table): D2 producer-side counsel scoping (PR2) — additive in…
yaniv-golan Jun 22, 2026
f79db06
feat(cap-table): C1 true side-by-side compare (PR3) — chart registry …
yaniv-golan Jun 22, 2026
7e0bfdc
fix(cap-table): close plan-vs-implementation gaps in the explorer usa…
yaniv-golan Jun 22, 2026
9526fdb
feat(cap-table): match the approved explorer mock — donut hole, compa…
yaniv-golan Jun 22, 2026
b5e2305
feat(cap-table): adopt the mock's click-to-set-B compare + final visu…
yaniv-golan Jun 22, 2026
5eae8a8
feat(cap-table): instruction-first compare (pick B) + slider clears m…
yaniv-golan Jun 22, 2026
4f1dcb6
fix(cap-table): keep the compare B placeholder badge inline, not full…
yaniv-golan Jun 22, 2026
4281d50
feat(cap-table): Lane-3 freeform reliability — grid control-frame bud…
yaniv-golan Jun 23, 2026
87bda08
test(cowork): add Lane-3 freeform cap-table cassette
yaniv-golan Jun 23, 2026
22d38c3
feat(cap-table): add shared _palette.py (single source for ownership …
yaniv-golan Jun 23, 2026
fb7e2bd
refactor(cap-table): source visualize palette from _palette; add _mon…
yaniv-golan Jun 23, 2026
c4a8457
refactor(cap-table): source explorer JS palette from _palette; drop d…
yaniv-golan Jun 23, 2026
8dfa933
feat(cap-table): donut hole + centered founder %, raw-frac wedges, EP…
yaniv-golan Jun 23, 2026
abfafde
feat(cap-table): legend plain labels + optional shares column, EPS/or…
yaniv-golan Jun 23, 2026
2f4ae1f
feat(cap-table): counsel + watchlist helpers (domain labels, status p…
yaniv-golan Jun 23, 2026
a627103
feat(cap-table): scenario comparison table (least-dilutive flag, em-d…
yaniv-golan Jun 23, 2026
9a38daa
feat(cap-table): rebuild report.html to approved mock — sheet, print …
yaniv-golan Jun 23, 2026
fed4245
fix(cap-table): define missing CSS classes cmp-metric, cmp-best-col, …
yaniv-golan Jun 23, 2026
060a2c9
test(cap-table): update watchlist/completeness assertions; add report…
yaniv-golan Jun 23, 2026
cdaf6d2
style(cap-table): sign-consistent dilution delta in comparison table
yaniv-golan Jun 23, 2026
e68819d
fix(cap-table): Lane-3 gate-quality — no grid self-chunk, drop discou…
yaniv-golan Jun 23, 2026
7fe3ea7
test(cowork): re-record Lane-3 cassette against the gate-quality fixes
yaniv-golan Jun 23, 2026
79759f0
ci(cowork): adopt cowork-harness 0.10.0 — exact pin, drop dead PyYAML…
yaniv-golan Jun 23, 2026
c1f0f6c
test(cowork): refresh stale cap-table cassettes + migrate choose:firs…
yaniv-golan Jun 23, 2026
6a5f36c
test(cowork): re-record the 5 fleet-smoke cassettes (refresh agents/c…
yaniv-golan Jun 23, 2026
8fb7fdc
test(cowork): add convertible-note conversion cassette (close the not…
yaniv-golan Jun 23, 2026
8e56581
fix(cap-table): recover anti-dilution intent written under the wrong …
yaniv-golan Jun 23, 2026
cd82ac5
Merge branch 'cap-table-note-coverage'
yaniv-golan Jun 24, 2026
f608b37
Merge branch 'cap-table-bbwa-silent-drop'
yaniv-golan Jun 24, 2026
12f4163
test(cowork): re-record priced-ad against the AD fix + assert anti-di…
yaniv-golan Jun 24, 2026
0272639
fix(cap-table): surface orphaned anti-dilution recovery warnings + op…
yaniv-golan Jun 24, 2026
d7d42ab
chore(cap-table): Phase-3 readiness down-payment for additionalProper…
yaniv-golan Jun 24, 2026
b6fb40b
fix(cap-table): close fast-assess / concise turns with a statement, n…
yaniv-golan Jun 24, 2026
387011f
feat(cap-table): expand the canonical gate phrasing into a full Gate …
yaniv-golan Jun 24, 2026
c29ad9a
test(cowork): re-record 8 cap-table cassettes against the hardening c…
yaniv-golan Jun 24, 2026
268af42
chore(cowork): adapt to cowork-harness 0.12.0 (CI pin + rerecord floo…
yaniv-golan Jun 24, 2026
71d9869
fix(cap-table): surface all warning families in concise mode + defaul…
yaniv-golan Jun 24, 2026
9761b49
fix(cap-table): freeform-emit must fail loud, never write a silent-em…
yaniv-golan Jun 24, 2026
96d339b
fix(cap-table): warn when freeform-emit defaults a missing SAFE/note …
yaniv-golan Jun 24, 2026
690f78b
feat(cap-table): flag model-reconstructed cap bases via cap_base_prov…
yaniv-golan Jun 24, 2026
f82b83b
feat(cap-table): image-only PDF guard — detect + flag low-confidence …
yaniv-golan Jun 24, 2026
d5e8b0a
feat(cap-table): Carta FD reconciliation residual (A1) — cross-foot v…
yaniv-golan Jun 24, 2026
e074c66
feat(cap-table): OCR image-only PDFs into a grid (B2) + route to the …
yaniv-golan Jun 24, 2026
67dbb92
chore(cowork): adapt to cowork-harness 0.15.0 (CI pin + rerecord floo…
yaniv-golan Jun 25, 2026
979ffdd
feat(cap-table): reliability lead PR — transpose fail-loud, gate cata…
yaniv-golan Jun 25, 2026
5861f25
fix(cap-table): correct R4-A's infeasible counsel-item ask + document…
yaniv-golan Jun 26, 2026
69d1c58
feat(cap-table): W_BASE_VACUOUS — flag a confident deliverable built …
yaniv-golan Jun 26, 2026
f4784de
chore(cowork): adopt cowork-harness 0.16.0 (CI pin + rerecord floor +…
yaniv-golan Jun 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
{
"name": "lool-founder-skills",
"description": "Skills for startup founders by lool ventures",
"owner": {"name": "lool ventures"},
"plugins": [
{
Expand Down
3 changes: 3 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,10 @@ What you expected to happen instead.

- [ ] Market Sizing
- [ ] Deck Review
- [ ] Financial Model Review
- [ ] IC Simulation
- [ ] Competitive Positioning
- [ ] Cap Table
- [ ] Other / not skill-specific

## Additional context
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ jobs:
- run: uv run mypy founder-skills/skills/ic-sim/scripts/
- run: uv run mypy founder-skills/skills/financial-model-review/scripts/
- run: uv run mypy founder-skills/skills/competitive-positioning/scripts/
- run: uv run mypy founder-skills/skills/cap-table/scripts/
- run: uv run mypy founder-skills/tests/

test:
Expand Down
80 changes: 80 additions & 0 deletions .github/workflows/cowork-replay.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
name: cowork-replay

# Token-free, agent-free PR gate for the fleet cowork-harness cassettes (cowork-harness >= 0.9.0):
# 1. lint — scenario no-silent-false-green invariants (CLI subcommand since 0.4.0)
# 2. privacy gate — HARD: PII/host-path scan (--skip-staleness). A finding fails the job.
# 3. staleness gate — WARN: --skip-privacy under continue-on-error. A skill edit re-stales the
# affected cassette(s) and CI can't re-record, so this stays warn-not-fail.
# 0.9.0 makes the WARN *actionable*: `fileSigs` names the exact changed file
# (e.g. "1 changed: skills/x/SKILL.md") instead of a coarse bucket — so a real
# drift points right at the file. Re-record on a cadence (see cowork-tests/README.md).
# 4. replay — content + manifest-backed file_exists/artifact_json across the whole dir.
# No model tokens, no Docker, no staged agent binary → runs on a stock GitHub-hosted runner.
#
# The LIVE lane (recording cassettes) needs the staged Cowork agent ELF (not redistributable, not on
# hosted runners) → self-hosted/local only. See cowork-tests/README.md.

on:
pull_request:
paths:
- 'founder-skills/skills/**'
- 'founder-skills/scripts/**'
- 'founder-skills/references/**'
- 'cowork-tests/**'
- '.github/workflows/cowork-replay.yml'

jobs:
replay:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- run: npm i -g 'cowork-harness@0.16.0' # EXACT pin (not a >= floor): pre-1.0 minors can break — a future cassette-format bump would replay-FAIL committed cassettes in CI, which cannot re-record. Bump deliberately after the ~30s token-free gate below (lint + privacy + replay) is green on the new version. This 0.15.0→0.16.0 bump was verified that way: lint + privacy + canary + replay all green on 0.16.0 against the committed cassettes. 0.13/0.14/0.15/0.16 carry NO breaking changes, cassette format stays **v6**, agent ELF stays 2.1.181, baseline stays 1.15200.0 → the bump is purely additive, no re-record forced. (Replay re-emits the RECORDED answers — it never runs the decider — so replay-green proves format compat, not decider behavior; 0.16's new scripted-`choose:` prefix-anchor tier is lowest-priority + fires only at RECORD time, so it cannot change a passing replay.) New since 0.12.0: `inspect <run>` (artifact digest, works on torn-down runs) + partial-run salvage on an unanswered gate + capability pre-flight `requires_capabilities`/exit-3 (0.13; `runs gc`→top-level `prune`, decider near-miss label tolerance); `replay --output-format json` exposes `staleness[]`/`skippedAssertions` + a `--fail-on-skill-drift` release gate (0.14); refined staleness diagnosis — a scoped skill now reports BOTH its own + shared-root drift, per-file detail on the replay lane (0.15); **H10 decider fix (0.16): `--decider-llm` replies by option NUMBER (no more option-echo whiff) + answers multiSelect; new `--decider-model <id>` override (live/authoring only — never reaches a committed cassette); scripted `choose:`/`--answer` prefix-anchor (boundary `startsWith`, fails loud on ambiguity — prefix-only); `docs/debugging.md` on-ramp**. DELIBERATELY NOT adopting `--fail-on-skill-drift` here: the cap-table skill is under active modification and the fleet shares roots (`scripts/`/`references/`/`agents/`), so it would red all 13 on every skill PR — keep the staleness gate WARN-only (continue-on-error) below; the baseline+skill staleness clears on the next release-cadence `rerecord.sh`. Carries forward: `record --concurrency` (0.11); bundled PyYAML + live-decider flags + `stalled` verdict (0.10); git-tracked staleness boundary + fileSigs (0.9); class-scoped allows (0.5) + `--skip-staleness`/`--skip-privacy` (0.6).

- name: Lint scenarios (no silent false-greens)
run: cowork-harness lint cowork-tests/scenarios/ # 0.9.0: lint accepts a directory

- name: Privacy gate (HARD)
# The PII guard that actually matters here is **synthetic-only recording**: every cassette's
# subject is a fictional company (Cadence / Acmecorp), so no real founder/company data exists to
# leak. Given that, the allowlist tunes the default scanner classes — using 0.5.0's CLASS-SCOPED
# flags so an allow can't bleed across classes (the 0.5.0 hardening):
# * currency (`--allow`) — synthetic dollar figures the skills emit.
# * DOMAIN class (`--allow-domain`) — allowed wholesale. The research/coaching skills
# (market-sizing, comp-pos, deck-review) cite 150+ PUBLIC third-party domains: public, non-PII;
# a real leak would surface a real NAME (caught by synthetic-only review) and a real EMAIL
# (caught below), not merely a domain. An enumerated 150-domain list would be unmaintainable.
# `--allow-domain` applies ONLY to domain findings — structurally it cannot clear an email
# (0.5.0 replaced our earlier `^...$`-anchored generic `--allow`, which had to be hand-anchored
# to avoid suppressing emails — see the F-2 footgun).
# * email (`--allow-email`) — only the SYNTHETIC domains (acmecorp.com — fictional deck co;
# example.com — RFC-2606 reserved, synthetic Carta stakeholders). Any OTHER email
# (e.g. a real founder@realstartup.com) FAILS the gate — the live PII tripwire.
# The email tripwire is the one guard this posture leans on hardest. The SAME $ALLOW is reused for
# an email CANARY below: a purpose-built cassette carrying a non-synthetic email
# (analyst@realstartup.com) MUST trip. If it stops tripping, the tripwire is disabled → job fails.
# Defining $ALLOW once means the gate and the canary can never drift apart.
run: |
# Canonical allowlist — single source of truth shared with cowork-tests/rerecord.sh.
source cowork-tests/privacy-allowlist.sh
# Real gate: committed cassettes must be clean under the allowlist.
cowork-harness verify-cassettes cowork-tests/cassettes/ --skip-staleness "${ALLOW[@]}"
# Email canary: the SAME allowlist must still FLAG a non-synthetic email. If verify-cassettes
# exits 0 here, the email class is no longer catching real addresses → fail loudly.
if cowork-harness verify-cassettes cowork-tests/canary/email-canary.cassette.json --skip-staleness "${ALLOW[@]}"; then
echo "::error:: email canary did NOT trip — the email PII tripwire is disabled (a real email would pass). Check --allow-email is not over-broad and that no generic --allow matches an address."
exit 1
fi
echo "email canary tripped as expected — email tripwire is live."

- name: Staleness gate (WARN — does not fail the job; see header F8)
continue-on-error: true
run: cowork-harness verify-cassettes cowork-tests/cassettes/ --skip-privacy

- name: Replay content + artifact_json assertions (token-free)
run: cowork-harness replay cowork-tests/cassettes/ --output-format json

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read}
Comment on lines +28 to +80
6 changes: 6 additions & 0 deletions .github/workflows/version-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ jobs:
founder-skills/tests/*) return 1 ;;
.github/*) return 1 ;;
docs/*) return 1 ;;
# In-plugin content ships to users and DOES require a bump, even
# though it is Markdown — list these before the generic *.md rule.
# (Per VERSIONING.md: SKILL.md / agent / reference changes = PATCH.)
founder-skills/skills/*/SKILL.md) return 0 ;;
founder-skills/skills/*/references/*.md) return 0 ;;
founder-skills/agents/*.md) return 0 ;;
*.md) return 1 ;;
.gitignore|.editorconfig) return 1 ;;
uv.lock) return 1 ;;
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,11 @@ docs/internal/
uv.lock
.worktrees/
artifacts/
runs/
cap-table-workspace/
docs/plans/
test-feedback-plugin/
scripts/sync-test-repo.sh
.superpowers/
docs/superpowers/
.playwright-mcp/
Loading
Loading