Conversation
…le substitution coverage
…rkin-first AC, and @id tracing - Replace flat feature .md docs with folder-per-feature structure - Add 4-phase scope model: project discovery, feature discovery, stories, criteria - Switch from UUID acceptance criteria to Gherkin @id:<8-char-hex> Examples - Add gen-tests and gen-id taskipy tasks; add gen_test_stubs.py script - Rewrite scope/SKILL.md with INVEST gate, declarative Gherkin rule, MoSCoW triage - Add Rules + Constraints sections to discovery template (Example Mapping layer) - Delete extend-criteria skill; absorb gap-handling into PO and reviewer roles - Absorb code-quality into verify/SKILL.md; leave code-quality as redirect - Rewrite developer.md, reviewer.md with new paths and escalation model - Add deprecated pytest marker with auto-skip conftest hook - Add 4 new academic research entries (INVEST, Example Mapping, Declarative Gherkin, MoSCoW) - Add Boehm Cost of Change Curve as research entry #16 BREAKING CHANGE: folder structure changed from flat docs/features/<name>.md to docs/features/<state>/<name>/ with .feature files inside; test layout changed from tests/ flat to tests/features/<name>/ + tests/unit/
…stitution checks - Replace root main.py with app/__main__.py as the single entry point - Update tests/version_test.py to import from app.__main__ and patch app.__main__ - Fix setup-project.md Step 3d: create __main__.py and delete main.py - Fix setup-project.md Step 3f: add grep verification after substitutions - Fix setup-project.md Step 4: replace smoke test with uv run task test-fast
- Phase 2: make entity-derivation + interview cycle explicit (pre-mortem before first round, iterate until stakeholder says baseline) - Feature Decomposition Threshold: >2 concerns OR >8 candidate Examples triggers mandatory split - Phase 4: replace soft 3-10 limit with concern-based split rule; note multiple .feature files per folder - Implementation cycle: add hard STOP/WAIT gates, one test at a time before any reviewer interaction - Reviewer per-test scope: code-design only (YAGNI/KISS/DRY/SOLID/ObjCal/patterns + semantic alignment); no lint/pyright/coverage - Quality tooling (lint, static-check, coverage) deferred to developer handoff only - Developer Quality Gate Priority Order added to AGENTS.md and implementation/SKILL.md - TODO.md: add Step 4 cycle-aware format with Cycle State + reviewer scope legend
…indentation - Replace 6 regexes + 3 brittle parsing functions with gherkin-official canonical parser (Cucumber project, actively maintained, single dep) - Fix textwrap.dedent bug causing Given/When/Then docstring lines to land at column 0 instead of 4-space indented in generated test stubs - Add gherkin-official>=39.0.0 to dev dependency group
…kflow hardening - Fix YAGNI > KISS > DRY > SOLID > ObjCal > patterns order across all 8 files (developer.md, reviewer.md, implementation/SKILL.md, session-workflow/SKILL.md, verify/SKILL.md, AGENTS.md) - Add gen_todo.py merge-write script for TODO.md structural enforcement - Rewrite session-workflow, implementation, tdd, verify skills v2.1 with mandatory Cycle State, WIP check, prereq check, STOP/WAIT language, gen-tests --check - Add D6 global @id duplicate detection (WARNING + continue) to gen_test_stubs.py - Add gen-todo task to pyproject.toml
…fication - Add mandatory package verification step at architecture start (Step 2) to prevent code being created under wrong package name - Add Design Self-Declaration checklist to REFACTOR phase (per-test), covering YAGNI > KISS > DRY > SOLID > OC rules 1-9 with file:line evidence - Add SELF-DECLARE as explicit cycle phase between REFACTOR and REVIEWER - Replace compact 3-line reviewer template with structured claims-vs-verdict table so reviewer independently audits each declared rule - Strip Self-Verification Before Handoff to quality tooling only — declaration already done per-test; no duplication at handoff - Add imports-use-correct-package-name check to verify/SKILL.md section 4g - Update Scope Guard in verify/SKILL.md to reference self-declaration flow - Bump both skills to v2.2
… fix lint errors in scripts
…r setup substitutions - Replace project_defaults.json with template-config.yaml (YAML, declarative substitution map) - Fix stale Dockerfile references: python_package_template.python_module_template → app - Fix stale docker-compose.yml references: python_package_template → app - Update setup-project.md to read template-config.yaml instead of project_defaults.json - Agent now follows the substitution map directly, no implicit knowledge of patterns needed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
.featurefiles and adiscovery.mdper feature@id:<8-char-hex>Examples with a stub-generator script (gen_test_stubs.py) that keeps test files in sync with.featurefilesBreaking Changes
docs/features/<name>.md→docs/features/<state>/<name>/(folder withdiscovery.md+*.featurefiles inside)tests/<name>_test.pyflat →tests/features/<name>/<story-slug>_test.py+tests/unit/@id:<8-char-hex>Example blocksextend-criteriadeleted; gap handling absorbed into PO/reviewer roles inlinecode-qualitynow redirects toverify(all quality checks consolidated)Changes by File
New files
.opencode/skills/tdd/scripts/gen_test_stubs.py— stub generator that syncs pytest tests from.featurefiles.opencode/skills/scope/discovery-template.md— per-feature blank discovery template (Status + Entities + Rules + Constraints + Questions)docs/features/discovery.md— project-level discovery template (Status + Questions only)Full rewrites
AGENTS.md— new folder structure, 4-phase scope, Gherkin format, 4 markers, gen-tests commands.opencode/agents/product-owner.md— PO=AI agent, stakeholder=human, 4-phase workflow, gap handling table.opencode/agents/developer.md— new paths, escalate gaps to PO, reviewer-checks-each-green-test cycle.opencode/agents/reviewer.md— gap reporting table, @id format, adversarial verification.opencode/skills/scope/SKILL.md— 4-phase guide with INVEST gate, declarative Gherkin rule, MoSCoW triage, Rules+Constraints sections.opencode/skills/verify/SKILL.md— absorbed code-quality content, evidence-required rule, @id format.opencode/skills/tdd/SKILL.md— gen-tests workflow, new function naming, no UUID in docstrings.opencode/skills/implementation/SKILL.md— reviewer-per-green-test cycle, spec gap escalation.opencode/skills/session-workflow/SKILL.md— folder-aware session start, @id:hex in TODO.mdDeleted
.opencode/skills/extend-criteria/SKILL.mdUpdated
pyproject.toml— addedgen-idandgen-teststaskipy tasks; addeddeprecatedpytest markertests/conftest.py— auto-skip hook for@pytest.mark.deprecateddocs/academic_research.md— added entries feat(template): add AI-driven themed naming for releases #16-20 (Boehm Cost of Change, INVEST, Example Mapping, Declarative Gherkin, MoSCoW)README.md,.opencode/skills/pr-management/SKILL.md,.opencode/skills/create-skill/SKILL.md— format updatesTesting
uv run task test✓ (100% coverage)uv run task gen-testsruns cleanlyuv run task gen-idproduces valid 8-char hexuv run task lint— not run (docs-only changes; no source code modified)Reviewer Notes
Legacy artifacts intentionally preserved in old format:
tests/version_test.py— old UUID docstring format, flat layout (reference implementation)docs/features/completed/display-version.md— old flat markdown AC format (shipped feature, not migrated)The
setup-project.mdagent was updated to reference either layout with a flexible note.