# Project profile for the skills plugin. # # Drop a copy of this file at /.claude/dev-cycle-profile.yml # and edit. See ~/dev/skills/docs/profile-schema.md for the full schema # and per-key documentation. paths: spec_dir: docs/specs plan_dir: docs/plans # glossary: docs/glossary.md # optional — if set, read as # standing reading by every role # design_ledger: docs/design/INDEX.md # optional # design_contracts: design/contracts # optional # design_models: design/models # optional code_roots: [src] # bench_dir: bench # optional # public_interface: [README.md, docs] # what fieldtester may read; everything else is forbidden # fieldtest_examples: examples/fieldtest # where fieldtester writes fixtures naming: counter_dirs: [docs/specs, docs/plans, design/contracts, design/models] policy: stable_per_directory_4digit # stable_per_directory_4digit | date_prefix | flat slug_separator: "-" commands: build: "" # REQUIRED — e.g. "cargo build" or "npm run build" test: "" # REQUIRED — e.g. "cargo test" or "npm test" # lint: "" # optional # doc_build: "" # e.g. "cargo doc --no-deps 2>&1" — used by docwriter regression: [] # list of shell commands run by audit; non-zero exit = regress architect_sweeps: [] # optional project-specific architect sweeps; non-zero exit = drift suspicion # spec_validation: # optional — fence label -> validator for spec code blocks # parsers: # key = fence info-string; labels with no entry are skipped + documented # ail: # ext: ".ail" # extension for the temp file the harness writes the block into # cmd: "ail parse {file}" # {file} = temp-file path; exit 0 = clean parse, non-zero = BLOCK # ail-json: # ext: ".ail.json" # cmd: "ail check {file}" vocabulary: cycle: cycle # one round in the pipeline graph (NOT the top-level container) subcycle: iteration # a sub-unit of a cycle milestone: milestone # tracker container spanning many cycles; closes only when complete AND functional ledger_entry: contract # what one design-ledger entry is called standing_reading: always: - CLAUDE.md - "git log -10 --format=full" by_role: # architect: [design/contracts] # debugger: ["git log -5 --format=full"] git: main_sacrosanct: true only_orchestrator_commits: true protected_branches: [main] issue_tracker: kind: none # gitea | github | linear | none close_marker: "closes #N" # url: "" # human-browsable issue list URL # list_cmd: "" # e.g. "tea issues ls --repo X/Y --state open" notifications: # command: "" # e.g. "~/.claude/notify.sh"; boss falls back to chat if empty pipeline: brainstorm: { gates: [planner] } planner: { gates: [implement] } implement: {} audit: { mandatory_at: cycle_close } debug: { trigger: bug, red_first: true } # tdd: { trigger: test_specifiable_feature, red_first: true, alt_to: brainstorm } # opt-in: executable-spec-first entry, alternative to brainstorm # boss: { user_invoked: true } # autonomous orchestrator mode, /boss # fieldtest: { boss_only: true, when: surface_touch } # per-cycle usability test # milestone_fieldtest: { boss_only: true, when: surface_touch, gates_close: milestone } # closing gate: end-to-end proof of the milestone's promise # docwriter: { boss_only: true, when: api_stable_across_n_cycles }