Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion .cf-studio-kit.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ manifest_version = "1.0"
[[kits]]
slug = "compete"
name = "compete"
version = "1.13.3"
version = "1.14.0"

[[kits.resources]]
id = "research_request_template"
Expand Down
21 changes: 21 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,16 @@ jobs:
--format csv --out-dir /tmp/kind-test
head -1 /tmp/kind-test/register.csv \
| grep -qx "candidate,relationship,why_in_scope,evidence,next_action"
# A KIND-named ancestor directory beats ID-token scanning, so a
# {system} slug containing a reserved token still resolves right.
mkdir -p /tmp/kind-test/CANDIDATE-REGISTER
sed 's/cpt-specs-reg-openspec-peers/cpt-cmp-platform-reg-demo/' \
artifacts/CANDIDATE-REGISTER/examples/example.md \
> /tmp/kind-test/CANDIDATE-REGISTER/ambiguous.md
python3 scripts/render_views.py /tmp/kind-test/CANDIDATE-REGISTER/ambiguous.md \
--format csv --out-dir /tmp/kind-test
head -1 /tmp/kind-test/ambiguous.csv \
| grep -qx "candidate,relationship,why_in_scope,evidence,next_action"
sed 's/cpt-specs-reg-openspec-peers/cpt-specs-zzz-openspec-peers/' \
artifacts/CANDIDATE-REGISTER/examples/example.md > /tmp/kind-test/unknown.md
! python3 scripts/check_artifact_refs.py /tmp/kind-test/unknown.md \
Expand Down Expand Up @@ -229,6 +239,17 @@ jobs:
run: cfs validate-kits .
- name: kit normalize catches manifest errors
run: cfs kit normalize --dry-run . --json --kit all
- name: install + generate-agents e2e in a temp project
run: |
proj=$(mktemp -d)
git -C "$proj" init -q
(cd "$proj" \
&& cfs init --yes \
&& cfs kit install --path "$GITHUB_WORKSPACE" --kit compete --install-mode copy \
&& cfs validate-kits \
&& cfs generate-agents)
ls "$proj/.claude/skills" | grep -q '^cf-compete-run$'
rm -rf "$proj"
- name: pdsl validate on every kit
run: |
for kit in kits/*/; do
Expand Down
2 changes: 1 addition & 1 deletion kits/compete/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ observation date, and an explicit boundary.

## Status

Version 1.13.3 — all nine epic flows, the web intake surface with
Version 1.14.0 — all nine epic flows, the web intake surface with
search-assisted discovery and corpus capture mode, the quality loop
(research review + coverage audit), the evidence-depth contract with the
pricing benchmark view, the feature taxonomy with matrix binding and
Expand Down
4 changes: 2 additions & 2 deletions kits/compete/artifacts/CANDIDATE-REGISTER/rules.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ DO:
- RUN author Section 3 (Candidates): one row per candidate with classification (baseline | direct | adjacent | emerging, plus a relationship descriptor), aliases when known, the screening question that puts it in scope, at least one resolvable evidence reference, and a concrete next research action
- RUN author Section 4 (Boundary) and Section 5 (Original Files)
- SET ID cpt-{system}-reg-{slug} for the register
- RUN verify ID uniqueness with cfs list-ids
- RUN append the back-link "`cpt-{system}-reg-{slug}` — {register title}" to the commissioning request's Traceability section, replacing its default no-derived-artifacts line when present
- RUN verify ID uniqueness with cfs list-ids; when the ID already exists, this run is a refresh — update the registered artifact file in place (same ID, same registry entry, refreshed date frontmatter), never a second file with the same ID
- RUN append the back-link "`cpt-{system}-reg-{slug}` — {register title}" to the commissioning request's Traceability section only when the ID is absent (replace the default no-derived-artifacts line when present); when one or more lines for this ID already exist, collapse them into a single line updated in place (other artifacts' lines stay untouched) — a refresh never appends a duplicate and always repairs duplicates left by earlier runs, and a stale no-derived-artifacts line is removed whenever any back-link is present
- LOAD {candidate_register_checklist} for self-review of semantic quality

RULES:
Expand Down
6 changes: 3 additions & 3 deletions kits/compete/artifacts/COMPANY-DOSSIER/rules.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,16 @@ DO:
- RUN author Section 6 (Users, Availability, and Commercial Boundary) and Section 7 (Dossier Conclusion) — the conclusion must state what the subject is credible for AND close with the evidence-limits-not-absence-claims sentence
- RUN author Section 8 (Original Files)
- SET ID cpt-{system}-dos-{slug} for the dossier
- RUN verify ID uniqueness with cfs list-ids
- RUN append the back-link "`cpt-{system}-dos-{slug}` — {dossier title}" to the commissioning request's Traceability section, replacing its default no-derived-artifacts line when present
- RUN verify ID uniqueness with cfs list-ids; when the ID already exists, this run is a refresh — update the registered artifact file in place (same ID, same registry entry, refreshed date frontmatter), never a second file with the same ID
- RUN append the back-link "`cpt-{system}-dos-{slug}` — {dossier title}" to the commissioning request's Traceability section only when the ID is absent (replace the default no-derived-artifacts line when present); when one or more lines for this ID already exist, collapse them into a single line updated in place (other artifacts' lines stay untouched) — a refresh never appends a duplicate and always repairs duplicates left by earlier runs, and a stale no-derived-artifacts line is removed whenever any back-link is present
- LOAD {company_dossier_checklist} for self-review of semantic quality

RULES:
- ALWAYS follow {company_dossier_template} structure with required frontmatter
- ALWAYS keep the per-area negative space: every Documented Mechanics row states what remains unestablished, phrased as evidence limits
- ALWAYS record source availability per class with the exact vocabulary; do not equate public documentation availability with feature availability
- ALWAYS give the standard classes — documentation, pricing, finance/adoption at minimum — a Source Availability row even when nothing was captured (record it unavailable; grouped rows are fine)
- ALWAYS extend the company fact ledger with the newly observed time-sensitive facts this dossier cites
- ALWAYS extend the company fact ledger with the newly observed time-sensitive facts this dossier cites; on the direct-dossier path with no ledger, create and register one (intake) before the first time-sensitive fact is cited
- ALWAYS distinguish observed facts, vendor claims, and third-party estimates in the wording, matching fact-ledger claim_status labels where a ledger exists
- ALWAYS stay inside the request's access boundary; a gated or unavailable source is recorded as such, never summarized from memory
- ALWAYS update the commissioning request's Traceability section in the same run
Expand Down
2 changes: 1 addition & 1 deletion kits/compete/artifacts/COMPANY-DOSSIER/template.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,4 +74,4 @@ set does not establish. These are evidence limits, not absence claims.}
## 9. Traceability

- Commissioned by: `cpt-{system}-req-{slug}` — {Research request title}
- Expands: {`cpt-{system}-prof-{slug}` — {Company profile title}, when one exists}
- Expands: {`cpt-{system}-prof-{slug}` — {Company profile title}; or the explicit line "no standard profile exists — the dossier was commissioned directly"}
5 changes: 3 additions & 2 deletions kits/compete/artifacts/COMPANY-PROFILE/examples/example.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,9 @@ feature-parity result.
- **Depth**: standard profile
- **Source classes**: landing: captured (product website); pricing:
deferred (no pricing surface in the retained set — Workspaces/Stores are
preview); docs: captured; repository: captured; corporate/finance:
captured (YC company profile; no finance filings in the retained set)
preview); docs: captured; repository: captured; corporate:
captured (YC company profile); finance: deferred (no finance filings in
the retained set)
- **Completeness**: company identity, repository, documentation, and product
website surfaces were reviewed; finance, adoption, and hands-on surfaces
were not in the retained set.
Expand Down
4 changes: 2 additions & 2 deletions kits/compete/artifacts/COMPANY-PROFILE/rules.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ DO:
- RUN author Section 7 (What to Borrow — Product Hypothesis): zero or more entries, each with ID cpt-{system}-bor-{slug}, the named motivating mechanism, its evidence, and the explicit not-a-commitment sentence; when none qualified, state that explicitly
- RUN author Section 8 (Open-Source Posture), Section 9 (Material Unknowns), Section 10 (Original Files)
- SET ID cpt-{system}-prof-{slug} for the profile
- RUN verify ID uniqueness with cfs list-ids
- RUN append the back-link "`cpt-{system}-prof-{slug}` — {profile title}" to the commissioning request's Traceability section, replacing its default no-derived-artifacts line when present
- RUN verify ID uniqueness with cfs list-ids; when the ID already exists, this run is a refresh — update the registered artifact file in place (same ID, same registry entry, refreshed date frontmatter), never a second file with the same ID
- RUN append the back-link "`cpt-{system}-prof-{slug}` — {profile title}" to the commissioning request's Traceability section only when the ID is absent (replace the default no-derived-artifacts line when present); when one or more lines for this ID already exist, collapse them into a single line updated in place (other artifacts' lines stay untouched) — a refresh never appends a duplicate and always repairs duplicates left by earlier runs, and a stale no-derived-artifacts line is removed whenever any back-link is present
- LOAD {company_profile_checklist} for self-review of semantic quality

RULES:
Expand Down
1 change: 1 addition & 0 deletions kits/compete/artifacts/COMPANY-PROFILE/template.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ request: cpt-{system}-req-{slug}
# Company Profile — {Company}

**ID**: `cpt-{system}-prof-{slug}`
<!-- The profile ID is stable across refreshes: a refresh updates this file in place and never creates a second artifact with the same ID. -->

## Table of Contents

Expand Down
4 changes: 2 additions & 2 deletions kits/compete/artifacts/COMPARISON-MATRIX/rules.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ DO:
- RUN author Section 4 (Studio Position) WHEN Studio is among the compared: Studio today and Studio vision as separate rows or labels, never merged; omit the section otherwise
- RUN author Section 5 (Readable Conclusion) including the negative findings, Section 6 (Boundary), and Section 7 (Original Files)
- SET ID cpt-{system}-cmp-{slug} for the matrix
- RUN verify ID uniqueness with cfs list-ids
- RUN append the back-link "`cpt-{system}-cmp-{slug}` — {matrix title}" to the commissioning request's Traceability section, replacing its default no-derived-artifacts line when present
- RUN verify ID uniqueness with cfs list-ids; when the ID already exists, this run is a refresh — update the registered artifact file in place (same ID, same registry entry, refreshed date frontmatter), never a second file with the same ID
- RUN append the back-link "`cpt-{system}-cmp-{slug}` — {matrix title}" to the commissioning request's Traceability section only when the ID is absent (replace the default no-derived-artifacts line when present); when one or more lines for this ID already exist, collapse them into a single line updated in place (other artifacts' lines stay untouched) — a refresh never appends a duplicate and always repairs duplicates left by earlier runs, and a stale no-derived-artifacts line is removed whenever any back-link is present
- LOAD {comparison_matrix_checklist} for self-review of semantic quality

RULES:
Expand Down
2 changes: 2 additions & 0 deletions kits/compete/artifacts/FEATURE-TAXONOMY/checklist.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ instead of skipping silently.
#### UNION-TAX-002: Sparse Rows Kept (CRITICAL)
- Rows evidenced in only one vendor's corpus are present; nothing in the wording treats single-source rows as second-class.

- [ ] **UNION-EXEMPT** — when Section 2 carries an unmined-vendor completeness note, it names each unmined vendor and cites the user's design-gate approval (turn and option); a generic or vendor-less note keeps CPT-TAX-NO-001 a hard fail

### 📐 ROW Quality (ROWS)

#### ROWS-TAX-001: Decidable Rows (CRITICAL)
Expand Down
8 changes: 4 additions & 4 deletions kits/compete/artifacts/FEATURE-TAXONOMY/rules.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ DO:
- RUN author Section 3 (Feature Rows): 8–20 rows per frame (state the reason when outside the band), each with a crisp definition, an inclusion criterion two analysts would apply identically, and the evidence that first established it
- RUN author Section 4 (Vendor Aliases): one row per (feature, vendor) pair with the vendor's verbatim term and its evidence
- RUN author Section 5 (Union Provenance): every compared vendor listed with the rows its corpus first established, or the explicit "no rows beyond the union" line
- RUN author Section 6 (Boundary) and Section 7 (Original Files)
- SET ID cpt-{system}-tax-{slug}; verify uniqueness with cfs list-ids
- RUN append the back-link "`cpt-{system}-tax-{slug}` — {taxonomy title}" to the commissioning request's Traceability section, replacing its default no-derived-artifacts line when present
- RUN author Section 6 (Boundary), Section 7 (Original Files), and Section 8 (Traceability) with the commissioning request ID
- SET ID cpt-{system}-tax-{slug}; verify uniqueness with cfs list-ids; when the ID already exists, this run is a refresh — update the registered artifact file in place (same ID, same registry entry, refreshed date frontmatter), never a second file with the same ID
- RUN append the back-link "`cpt-{system}-tax-{slug}` — {taxonomy title}" to the commissioning request's Traceability section only when the ID is absent (replace the default no-derived-artifacts line when present); when one or more lines for this ID already exist, collapse them into a single line updated in place (other artifacts' lines stay untouched) — a refresh never appends a duplicate and always repairs duplicates left by earlier runs, and a stale no-derived-artifacts line is removed whenever any back-link is present
- LOAD {feature_taxonomy_checklist} for self-review of semantic quality

RULES:
Expand All @@ -51,7 +51,7 @@ PURPOSE:
Enforce MUST NOT HAVE content; report any occurrence as a violation.

RULES:
- NEVER CPT-TAX-NO-001 (CRITICAL): a row set derived from a subset of the compared vendors — the anchor bias this kind exists to prevent; every vendor's inventory enters the union before rows are fixed
- NEVER CPT-TAX-NO-001 (CRITICAL): a row set derived from a subset of the compared vendors — the anchor bias this kind exists to prevent; every vendor's inventory enters the union before rows are fixed; the sole exemption is a corpus the user explicitly accepted as unmined at the design gate, recorded as an unmined-vendor completeness note in Section 2 that names each unmined vendor and cites the design-gate approval (the turn and option of the user's answer); a generic or vendor-less note grants no exemption
- NEVER CPT-TAX-NO-002 (CRITICAL): a candidate row dropped because the first-mined vendors carry no evidence for it
- NEVER CPT-TAX-NO-003 (CRITICAL): row inclusion presented as a capability or availability claim — cells belong to matrices, not the taxonomy
- NEVER CPT-TAX-NO-004 (HIGH): an alias mapping without evidence of the vendor using the term
Expand Down
7 changes: 6 additions & 1 deletion kits/compete/artifacts/MECHANISM-STUDY/examples/example.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,12 @@ a mechanism's scope.
| Versioned change packaging | OpenSpec | A repository's specification library and a proposed change | Wraps a change as a proposal with specification deltas, technical design, and implementation tasks; applying and archiving the package updates the specifications | Review behaviour in practice, merge-conflict handling, and any quantified review-quality result | `EVD-361`; `FACT-COMP-073-004` |
| Staged lifecycle commands | OpenSpec | The change package and the repository state | Separates the loop into explore, propose, apply, sync, and archive commands installed per tool profile, giving a human a named stage boundary before and after agent work | Depth of each stage's behaviour and whether stages can be enforced rather than skipped | `EVD-362` |
| Gated workflow orchestration | AI-SDLC Framework | Workflow definitions and specification documents | Presents a decision-engine structure with gates, orchestration, reviewer agents, and verification artefacts between workflow stages | Implemented controls versus positioning; gate execution and override behaviour | `EVD-141`; `EVD-142` |
| Machine-local work isolation | OpenSpec | A contributor's in-progress change set | Beta personal worksets are described as machine-local and neither committed nor shared, keeping unreviewed work out of the shared surface | Whether isolation integrates with a review step or merely defers sharing | `EVD-364`; `FACT-COMP-073-007` |

Adjacent surface, excluded from the map: OpenSpec's beta personal
worksets are described as machine-local and neither committed nor shared
(`EVD-364`; `FACT-COMP-073-007`). Whether that isolation integrates with
a review step or merely defers sharing is unestablished, so local
isolation enters no comparison as a review mechanism (Section 4's rule).

## 4. Comparison Fields

Expand Down
6 changes: 3 additions & 3 deletions kits/compete/artifacts/MECHANISM-STUDY/rules.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ DO:
- RUN author Section 3 (Mechanism Map): one row per mechanism with the closest documented analogue, the direct input it processes, the documented action including output/review behaviour, the unobserved elements, and evidence
- RUN author Section 4 (Comparison Fields): the fields a later comparison must record and the conflations they prevent
- RUN author Section 5 (Product Hypothesis) only when the map suggests one: the whitespace, the mechanism it would extend, its evidence, and the explicit not-a-commitment sentence
- RUN author Section 6 (Boundary) and Section 7 (Original Files)
- RUN author Section 6 (Boundary), Section 7 (Original Files), and Section 8 (Traceability) with the commissioning request ID
- SET ID cpt-{system}-mech-{slug} for the study
- RUN verify ID uniqueness with cfs list-ids
- RUN append the back-link "`cpt-{system}-mech-{slug}` — {study title}" to the commissioning request's Traceability section, replacing its default no-derived-artifacts line when present
- RUN verify ID uniqueness with cfs list-ids; when the ID already exists, this run is a refresh — update the registered artifact file in place (same ID, same registry entry, refreshed date frontmatter), never a second file with the same ID
- RUN append the back-link "`cpt-{system}-mech-{slug}` — {study title}" to the commissioning request's Traceability section only when the ID is absent (replace the default no-derived-artifacts line when present); when one or more lines for this ID already exist, collapse them into a single line updated in place (other artifacts' lines stay untouched) — a refresh never appends a duplicate and always repairs duplicates left by earlier runs, and a stale no-derived-artifacts line is removed whenever any back-link is present
- LOAD {mechanism_study_checklist} for self-review of semantic quality

RULES:
Expand Down
4 changes: 2 additions & 2 deletions kits/compete/artifacts/ORIENTATION-CARD/rules.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ DO:
- RUN author Section 4 (Company and Source Posture): visible commercial model or its explicit not-established statement; source posture; source classes labelled; dates carried
- RUN author Section 5 (Important Unknowns) and Section 6 (Original Files)
- SET ID cpt-{system}-ori-{slug} for the card
- RUN verify ID uniqueness with cfs list-ids
- RUN append the back-link "`cpt-{system}-ori-{slug}` — {card title}" to the commissioning request's Traceability section, replacing its default no-derived-artifacts line when present
- RUN verify ID uniqueness with cfs list-ids; when the ID already exists, this run is a refresh — update the registered artifact file in place (same ID, same registry entry, refreshed date frontmatter), never a second file with the same ID
- RUN append the back-link "`cpt-{system}-ori-{slug}` — {card title}" to the commissioning request's Traceability section only when the ID is absent (replace the default no-derived-artifacts line when present); when one or more lines for this ID already exist, collapse them into a single line updated in place (other artifacts' lines stay untouched) — a refresh never appends a duplicate and always repairs duplicates left by earlier runs, and a stale no-derived-artifacts line is removed whenever any back-link is present
- LOAD {orientation_card_checklist} for self-review of semantic quality

RULES:
Expand Down
Loading
Loading