Releases: Fisherk2/codice-opencode
Releases · Fisherk2/codice-opencode
Release list
v1.2.0
Added
- Review fixes from
/shipv1.2.0-beta.1: All observations from the 4-persona ship review addressed:- Security:
CODICE_BYPASS_URL_VALIDATIONis now gated behindNODE_ENV=testso the URL-validation escape hatch can never be active in production (src/infrastructure/config/constants.ts). Coordinated with the 4 E2E scripts andtests/integration/cli/main.test.tsthat set it. - Path safety:
withTrailingSeparator("/")now returns the filesystem root unchanged instead of producing//(src/infrastructure/adapters/pathResolver.ts). - Perf:
FileMergeEngine.execute()only allocates the optional-path list when standard directory rules exist; staging cleanup now also runs when nothing was staged (total === 0). - Comments: Untrusted-input note for
.codice-versionparsing inUpdateWorkspaceUseCase; empty catch insafeEmitdocumented as intentional;PROGRESS_EMITTERScomment corrected. - Tests: Direct unit tests added for
isPathWithin/withTrailingSeparator(tests/unit/adapters/path-resolver.test.ts) andisRuleSelected(tests/unit/domain/file-rule-manifest.test.ts); unused_makeRulehelper removed fromtests/integration/use-cases/update-granularity.test.ts.
- Security:
- Dependencies:
@biomejs/biome2.5.3 → 2.5.6,@types/semver7.7.1 → 7.8.0 (TypeScript 6.x deferred — 7.x not yet adopted). - ADR-011: Binary Removal — documents the architectural decision (see
specs/adr/adr-011-binary-removal.md) tests/e2e/codice.sh: Wrapper script forbun run src/cli/main.tsin E2E tests- FEV-13 — SDD Plugin Auto-Discovery (Issue #53): 6 hardcoded maps extracted to
autoDiscovery.ts—COMMAND_AGENT_MAP,VALID_SUBAGENTS, andAGENT_MENTION_PATTERNSnow detected automatically from filesystem (commands/*.md,agents/*.md). New files:autoDiscovery.ts(182 lines),destructivePatterns.ts,normalizeBash.ts. See ADR-013. - FEV-13 — Config-Driven Plugin Behavior (Issue #53):
INTENT_PATTERNS,COMMAND_PHASE_MAP,PHASE_SUGGESTIONSmoved todefaults.tswith optionalopencode.jsonsddPipelinesection override. Plugin works without config (backward compatible). - FEV-14 — Progress bar during installation (Issue #47):
ProgressEventdiscriminated union (6 variants:stage_start,stage_complete,stage_skip,commit_start,commit_complete,error) in Domain layer.ProgressCallbackoptional onIFileMergeEngine.execute().ClackPromptsAdapterimplementsclack.progress()(heavy style) withshowProgressBar(total, label),updateProgress(current, filePath),completeProgress().logProgressEvent(message)dispatches by category prefix:commit:→ success,symlink:→ success,gitignore:→ info,error:→ error,skip:→ warn. Visible in all three modes (Clean, Project, Update). - FEV-14 — New
/helpslash command for onboarding (Issue #56): Interactive help menu with 6 options — discover Códice, start a new project, update workspace, learn the SDD cycle, list all 13 commands, troubleshoot issues. Assigned to Huitzilopochtli. Template:template/obligatorio/commands/help.md(63 lines). - FEV-14 —
/helpregistered in pipeline maps: Added toCOMMAND_AGENT_MAP,INTENT_PATTERNS(15 EN/ES keywords),COMMAND_PHASE_MAP(idle), andPHASE_SUGGESTIONSindefaults.ts. - FEV-14 — Spec/ADR templates with industry formats: MADR v4.0 ADR template (
template/estandar/specs/adr/adr-template.md) and RFC-based spec template (template/estandar/specs/spec-template.md) replace previous placeholders. - FEV-14 — 14 new integration tests for progress events, structured logs, and adapter methods.
- FEV-14 — E2E test extended with progress assertions (commit/symlink messages in stdout).
- FEV-15 — Project Code of Conduct (Issue #55):
CODE_OF_CONDUCT.mdadded to repo root, adapted from Contributor Covenant v2.1. Contact:dev@fisherk2.com. - FEV-15 — Template Code of Conduct:
template/estandar/CODE_OF_CONDUCT.mdcreated as a customizable placeholder. Includes 2 placeholders ([PROJECT_NAME],[CONTACT_EMAIL]). - FEV-15 — Manifest integration:
CODE_OF_CONDUCT.mdregistered inFileRuleManifestData.tswithcategory: "standard"(11 standard files, was 10). - FEV-15 — Cross-references:
CONTRIBUTING.mdandREADME.mdupdated with## Code of Conductsections. - FEV-15 — E2E test extension:
tests/e2e/01-clean-install.shassertsCODE_OF_CONDUCT.mddelivery and content. - FEV-16 — Pre-release Tech Debt Closure: Resolves 5 TECH_DEBT.md items (TD-1.1, TD-2.1, TD-5.1, TD-5.2, TD-6.2):
- Coverage foundation:
resolveInteractiveMode()extracted frommain.tsfor testability. 9 new unit tests.main.tscoverage 86.21% → 98.90%. - Use case refactor: Template Method pattern applied to
CleanInstallUseCase+ProjectInstallUseCase. NewInstallUseCaseBaseabstract class. 166+147 → 73+72 lines. - Performance benchmarks:
just benchrecipe withhyperfinefor 3 installation modes. 3 standalone benchmark scripts +assert-no-regression.shfor SC-9/10/11 verification. - Update granularity: Tree-level diff (
diffTrees()) for standard directories.FileMergeEngineupdated to stage only new files in update mode. 11 unit + 3 integration + 1 E2E test. - Coverage instrumentation:
c8evaluated (incompatible with Bun/JSC). Native Bun coverage used with 95% CI gate. main.ts 98.90%, overall 98.10%.
- Coverage foundation:
/testcommand: now ensures atest/directory exists withunit/,integration/, ande2e/subdirectories; iftest/exists but is not separated, prompts the user (viaquestion) whether to refactor and standardize existing tests into those three directories (per@skills/test-driven-development/SKILL.mdtest-pyramid convention)./shipcommand: adds a post-Phase-C incremental-fix phase that resolves all review observations one at a time using@skills/incremental-implementation/SKILL.md, verifies all tests pass, then creates atomic commits with descriptive messages (matching/code-simplifyand/testconventions).
Changed
- BREAKING: Binary compilation removed. The only installation method is now
bunx @fisherk2-dev/codice(ornpx @fisherk2-dev/codice). Compiled binaries are no longer produced or distributed. Users in air-gapped environments can usenpm packto download the tarball. See ADR-011 for migration details. - FEV-12 (References Restructuring): 59 reference files moved from centralized
template/obligatorio/references/toskills/<name>/references/for co-location with their primary skill.opencode.jsonnow includes areferencessection with 3 example entries (local path + 2 remote repos).docs/WORKFLOW.mdanddocs/TECH_DEBT.mdremoved frominstructionsarray. Agent models updated: huitzilopochtli → deepseek-v4-flash, moctezuma steps 20→30, tlaloc steps 90→100.docs-mcp-serverremoved;codebase-memory-mcpadded (disabled by default). See ADR-012. - FEV-13 — Wiki Rewrite (Issue #51): 8 Wiki pages rewritten for end users — removed all "edit sdd-pipeline.ts" references. Instructions now direct users to create
agents/my-agent.md,commands/my-command.md,skills/my-skill/SKILL.mdinstead. - FEV-13 — Quality Infrastructure (Issue #53): Biome config extended to plugin directories. Justfile targets added:
check-plugin,test-plugin-unit,test-plugin-integration. Plugin test suites:tests/plugin/unit/,tests/plugin/integration/. - FEV-13 — Documentation Reduction (Issue #51): WORKFLOW.md, CHANGELOG.md, SPEC.md audited and trimmed to target line counts (<300, <350, <400 respectively).
- FEV-14 — DRY extraction —
createProgressCallback()helper: Duplicated ~30-line progress callback (3 copies × 30 lines = ~90 lines) extracted to sharedcreateProgressCallback(userPrompt, label)insrc/application/helpers.ts. All 3 use cases now call the shared helper (each reduced by ~28 lines). - FEV-14 — Symlink/gitignore log events moved to
postInstall.ts: Log events (symlink: Created .opencode/agents,gitignore: Generated .gitignore) now emit AFTER each operation completes inrunPostInstallSteps(), not predicted before. Fixes false success on failure. - FEV-14 — 13 command files updated with explicit subagent delegation patterns (sequential only, never parallel).
- SC-15: Updated to "npm package (tarball) size < 5MB" (previous SC-15 about compiled binaries removed)
- ARCHITECTURE.md: Added ADR-011 to ADR table
- FEV-15 — FileRuleManifestData delivery surface: 1 new entry in
FileRuleManifestData.ts(now tracks 11 standard files, was 10). - FEV-16 — FileMergeEngine: Tree-level diff replaces directory-level skip. Standard rules in update mode now deliver new files.
- FEV-16 — CleanInstallUseCase / ProjectInstallUseCase: Reduced from 313 → 145 lines (-168) via Template Method.
- FEV-16 — Coverage thresholds: CI now enforces ≥95% lines/functions (was unenforced).
- FEV-16 — main.ts:
runModerestructured from switch to if/else for complete branch coverage. - FEV-16 — Code review simplifications:
stageOne()extraction,stagePlannertotal folding,walkRelativehelper,resolveInteractiveModereturn type narrowed,promptForModeasync removed. - FEV-17 — Code simplification pass (Issue #53):
IFileMergeEngine.executeacceptsMergeExecuteOptionsobject instead of positional params (improves call-site readability).FileRuleManifest.isRuleSelectedshared optional-filter predicate extracted fromCleanInstallUseCaseandProjectInstallUseCase.- Test-only dead surface removed:
IUserPrompt.showSpinner/stopSpinner,IGitHubClient.getLatestReleaseNotes, `IVersionComparator.isUpdateAvailable/g...
v1.2.0-beta.2
Added
/testcommand: now ensures atest/directory exists withunit/,integration/, ande2e/subdirectories; iftest/exists but is not separated, prompts the user (viaquestion) whether to refactor and standardize existing tests into those three directories (per@skills/test-driven-development/SKILL.mdtest-pyramid convention)./shipcommand: adds a post-Phase-C incremental-fix phase that resolves all review observations one at a time using@skills/incremental-implementation/SKILL.md, verifies all tests pass, then creates atomic commits with descriptive messages (matching/code-simplifyand/testconventions).
v1.2.0-beta.1
Added
- Review fixes from
/shipv1.2.0-beta.1: All observations from the 4-persona ship review addressed:- Security:
CODICE_BYPASS_URL_VALIDATIONis now gated behindNODE_ENV=testso the URL-validation escape hatch can never be active in production (src/infrastructure/config/constants.ts). Coordinated with the 4 E2E scripts andtests/integration/cli/main.test.tsthat set it. - Path safety:
withTrailingSeparator("/")now returns the filesystem root unchanged instead of producing//(src/infrastructure/adapters/pathResolver.ts). - Perf:
FileMergeEngine.execute()only allocates the optional-path list when standard directory rules exist; staging cleanup now also runs when nothing was staged (total === 0). - Comments: Untrusted-input note for
.codice-versionparsing inUpdateWorkspaceUseCase; empty catch insafeEmitdocumented as intentional;PROGRESS_EMITTERScomment corrected. - Tests: Direct unit tests added for
isPathWithin/withTrailingSeparator(tests/unit/adapters/path-resolver.test.ts) andisRuleSelected(tests/unit/domain/file-rule-manifest.test.ts); unused_makeRulehelper removed fromtests/integration/use-cases/update-granularity.test.ts.
- Security:
- Dependencies:
@biomejs/biome2.5.3 → 2.5.6,@types/semver7.7.1 → 7.8.0 (TypeScript 6.x deferred — 7.x not yet adopted). - ADR-011: Binary Removal — documents the architectural decision (see
specs/adr/adr-011-binary-removal.md) tests/e2e/codice.sh: Wrapper script forbun run src/cli/main.tsin E2E tests- FEV-13 — SDD Plugin Auto-Discovery (Issue #53): 6 hardcoded maps extracted to
autoDiscovery.ts—COMMAND_AGENT_MAP,VALID_SUBAGENTS, andAGENT_MENTION_PATTERNSnow detected automatically from filesystem (commands/*.md,agents/*.md). New files:autoDiscovery.ts(182 lines),destructivePatterns.ts,normalizeBash.ts. See ADR-013. - FEV-13 — Config-Driven Plugin Behavior (Issue #53):
INTENT_PATTERNS,COMMAND_PHASE_MAP,PHASE_SUGGESTIONSmoved todefaults.tswith optionalopencode.jsonsddPipelinesection override. Plugin works without config (backward compatible). - FEV-14 — Progress bar during installation (Issue #47):
ProgressEventdiscriminated union (6 variants:stage_start,stage_complete,stage_skip,commit_start,commit_complete,error) in Domain layer.ProgressCallbackoptional onIFileMergeEngine.execute().ClackPromptsAdapterimplementsclack.progress()(heavy style) withshowProgressBar(total, label),updateProgress(current, filePath),completeProgress().logProgressEvent(message)dispatches by category prefix:commit:→ success,symlink:→ success,gitignore:→ info,error:→ error,skip:→ warn. Visible in all three modes (Clean, Project, Update). - FEV-14 — New
/helpslash command for onboarding (Issue #56): Interactive help menu with 6 options — discover Códice, start a new project, update workspace, learn the SDD cycle, list all 13 commands, troubleshoot issues. Assigned to Huitzilopochtli. Template:template/obligatorio/commands/help.md(63 lines). - FEV-14 —
/helpregistered in pipeline maps: Added toCOMMAND_AGENT_MAP,INTENT_PATTERNS(15 EN/ES keywords),COMMAND_PHASE_MAP(idle), andPHASE_SUGGESTIONSindefaults.ts. - FEV-14 — Spec/ADR templates with industry formats: MADR v4.0 ADR template (
template/estandar/specs/adr/adr-template.md) and RFC-based spec template (template/estandar/specs/spec-template.md) replace previous placeholders. - FEV-14 — 14 new integration tests for progress events, structured logs, and adapter methods.
- FEV-14 — E2E test extended with progress assertions (commit/symlink messages in stdout).
- FEV-15 — Project Code of Conduct (Issue #55):
CODE_OF_CONDUCT.mdadded to repo root, adapted from Contributor Covenant v2.1. Contact:dev@fisherk2.com. - FEV-15 — Template Code of Conduct:
template/estandar/CODE_OF_CONDUCT.mdcreated as a customizable placeholder. Includes 2 placeholders ([PROJECT_NAME],[CONTACT_EMAIL]). - FEV-15 — Manifest integration:
CODE_OF_CONDUCT.mdregistered inFileRuleManifestData.tswithcategory: "standard"(11 standard files, was 10). - FEV-15 — Cross-references:
CONTRIBUTING.mdandREADME.mdupdated with## Code of Conductsections. - FEV-15 — E2E test extension:
tests/e2e/01-clean-install.shassertsCODE_OF_CONDUCT.mddelivery and content. - FEV-16 — Pre-release Tech Debt Closure: Resolves 5 TECH_DEBT.md items (TD-1.1, TD-2.1, TD-5.1, TD-5.2, TD-6.2):
- Coverage foundation:
resolveInteractiveMode()extracted frommain.tsfor testability. 9 new unit tests.main.tscoverage 86.21% → 98.90%. - Use case refactor: Template Method pattern applied to
CleanInstallUseCase+ProjectInstallUseCase. NewInstallUseCaseBaseabstract class. 166+147 → 73+72 lines. - Performance benchmarks:
just benchrecipe withhyperfinefor 3 installation modes. 3 standalone benchmark scripts +assert-no-regression.shfor SC-9/10/11 verification. - Update granularity: Tree-level diff (
diffTrees()) for standard directories.FileMergeEngineupdated to stage only new files in update mode. 11 unit + 3 integration + 1 E2E test. - Coverage instrumentation:
c8evaluated (incompatible with Bun/JSC). Native Bun coverage used with 95% CI gate. main.ts 98.90%, overall 98.10%.
- Coverage foundation:
Changed
- BREAKING: Binary compilation removed. The only installation method is now
bunx @fisherk2-dev/codice(ornpx @fisherk2-dev/codice). Compiled binaries are no longer produced or distributed. Users in air-gapped environments can usenpm packto download the tarball. See ADR-011 for migration details. - FEV-12 (References Restructuring): 59 reference files moved from centralized
template/obligatorio/references/toskills/<name>/references/for co-location with their primary skill.opencode.jsonnow includes areferencessection with 3 example entries (local path + 2 remote repos).docs/WORKFLOW.mdanddocs/TECH_DEBT.mdremoved frominstructionsarray. Agent models updated: huitzilopochtli → deepseek-v4-flash, moctezuma steps 20→30, tlaloc steps 90→100.docs-mcp-serverremoved;codebase-memory-mcpadded (disabled by default). See ADR-012. - FEV-13 — Wiki Rewrite (Issue #51): 8 Wiki pages rewritten for end users — removed all "edit sdd-pipeline.ts" references. Instructions now direct users to create
agents/my-agent.md,commands/my-command.md,skills/my-skill/SKILL.mdinstead. - FEV-13 — Quality Infrastructure (Issue #53): Biome config extended to plugin directories. Justfile targets added:
check-plugin,test-plugin-unit,test-plugin-integration. Plugin test suites:tests/plugin/unit/,tests/plugin/integration/. - FEV-13 — Documentation Reduction (Issue #51): WORKFLOW.md, CHANGELOG.md, SPEC.md audited and trimmed to target line counts (<300, <350, <400 respectively).
- FEV-14 — DRY extraction —
createProgressCallback()helper: Duplicated ~30-line progress callback (3 copies × 30 lines = ~90 lines) extracted to sharedcreateProgressCallback(userPrompt, label)insrc/application/helpers.ts. All 3 use cases now call the shared helper (each reduced by ~28 lines). - FEV-14 — Symlink/gitignore log events moved to
postInstall.ts: Log events (symlink: Created .opencode/agents,gitignore: Generated .gitignore) now emit AFTER each operation completes inrunPostInstallSteps(), not predicted before. Fixes false success on failure. - FEV-14 — 13 command files updated with explicit subagent delegation patterns (sequential only, never parallel).
- SC-15: Updated to "npm package (tarball) size < 5MB" (previous SC-15 about compiled binaries removed)
- ARCHITECTURE.md: Added ADR-011 to ADR table
- FEV-15 — FileRuleManifestData delivery surface: 1 new entry in
FileRuleManifestData.ts(now tracks 11 standard files, was 10). - FEV-16 — FileMergeEngine: Tree-level diff replaces directory-level skip. Standard rules in update mode now deliver new files.
- FEV-16 — CleanInstallUseCase / ProjectInstallUseCase: Reduced from 313 → 145 lines (-168) via Template Method.
- FEV-16 — Coverage thresholds: CI now enforces ≥95% lines/functions (was unenforced).
- FEV-16 — main.ts:
runModerestructured from switch to if/else for complete branch coverage. - FEV-16 — Code review simplifications:
stageOne()extraction,stagePlannertotal folding,walkRelativehelper,resolveInteractiveModereturn type narrowed,promptForModeasync removed. - FEV-17 — Code simplification pass (Issue #53):
IFileMergeEngine.executeacceptsMergeExecuteOptionsobject instead of positional params (improves call-site readability).FileRuleManifest.isRuleSelectedshared optional-filter predicate extracted fromCleanInstallUseCaseandProjectInstallUseCase.- Test-only dead surface removed:
IUserPrompt.showSpinner/stopSpinner,IGitHubClient.getLatestReleaseNotes,IVersionComparator.isUpdateAvailable/getReleaseType/ReleaseType,IStagingSystem.getStagingPath,IFileSystem.readTemplateFile(447 lines, 29 files). pathResolver.withTrailingSeparatorandisPathWithinshared helpers;TemplateResolver,BunSymlinkCreator,BunGitignoreCreatorrefactored to use them.GitHubRestClientouter try/catch removed (redundant after domain error mapping).ClackPromptsAdapter.selectOptionalredundantas string[]cast removed.BunSymlinkCreatorverbose log now reportsresolvedLinkPath(actual created path).- Plugin
configLoader.ts226→88 lines; extractedmergeConfig.ts(159 lines) for config merging helpers. - P...
v1.1.3
Fixed
- Windows EPERM in
destinationExists()(commit86cb31e): On Windows,fs.access()throwsEPERMinstead ofEACCESwhen a directory has restricted permissions (e.g.chmod 0o000). Now bothEACCESandEPERMare treated as "path exists but unreadable", returningtrueso staging surfaces the real error downstream. Fixes CI failure onwindows-latestrunner.
v1.1.2
Changed
confirmOverwrite()DRY extraction (commitsede8389,bd17d3b,eaf5c5d): Shared helper extracted from duplicated confirmation logic inCleanInstallUseCase,ProjectInstallUseCase, andUpdateWorkspaceUseCase. Eliminates ~40 lines of duplicated guard code (force → isEmpty → prompt → cancel). All 3 use cases now delegate to the same helper.VERSIONmodule extraction (commiteaf5c5d): Architectural fix —VERSIONconstant moved fromoutput.ts(presentation layer) to neutralsrc/cli/version.ts.container.ts(DI wiring) andoutput.tsnow both import from the neutral module, removing an import across layer boundaries.GitHubRestClienterror handling simplification (commitsda30dce→57e075a): Consolidated separate404/403/other HTTP error branches into a singleif (!response.ok) return null. Removed deadAbortErrorbranch — both abort and network-error paths returned the samenull. Comment documents the design rationale.AtomicStagerI/O primitive change (commiteaf5c5d): Switched fromBun.file(source).text()+Bun.write(dest, content)tofs.copyFile(source, dest)for staging template files. Kernel-level copy avoids loading entire files into JavaScript heap, preventing OOM on large templates and improving cross-device safety.BunSymlinkCreatorpath normalization (commiteaf5c5d): ExtractedrootWithSeplocal variable for consistent prefix matching (used twice). Matches thepathResolver.ts:22pattern.FileRuleManifestDatacomment condensation (commiteaf5c5d): 3 verbose NOTE blocks (~30 lines) shortened to concise ADR references (~5 lines). Historical context preserved in ADRs.
Fixed
- Windows system directory validation (commit
c0842ae): Path prefix matching used hardcoded/which is never produced bypath.normalize()on Windows (uses\). Fixed topath.sep. Also added missing system directories:C:\ProgramData,C:\Users. Added bare drive root check (/^[A-Z]:\\?$/i) coveringD:\,E:\, etc. AtomicStagerbackup detection consistency (commits2d7496f→3d693b4):Bun.file().exists()returnsfalsefor directories — switched tofs.access()in bothrenameStagedFileandrestoreBackups. Same bug class as FEV-3 Issue #2.restoreBackupsBun.file().exists() (ship review fix): RemainingBun.file().exists()call in the rollback path switched tofs.access()for API consistency with the rest of the file.
Security
- Windows system directory protection expanded: Added
C:\ProgramData,C:\Users, and drive root check to the--destvalidation blocklist. Covers non-C: drives via regex pattern. - Symlink path containment hardened:
BunSymlinkCreatornormalizesworkspaceRootviapath.resolve()before appending trailing separator for prefix matching. Ensures consistent containment checking regardless of constructor input format (trailing.., no trailing separator, etc.).
Tests
- 7 new tests (commit
3d693b4):confirmOverwrite()unit tests (4 — force, empty, confirm, cancel),VERSIONsemver format validation (2),resolveNewVersion()fallback to"0.0.0"(1 integration). - 3 isEmpty skip path integration tests: Clean Install, Project Install, and Update Workspace — all verify the
isEmpty()check skips the confirmation prompt when the destination directory is empty. - showCancel assertion added to the update rejection test.
- Coverage: 100.00% functions / 97.99% lines (596 tests, 1289 expects).
v1.1.1
Release 1.1.1
No changelog section found for this version. Please update CHANGELOG.md.
See CHANGELOG.md for the full history.
v1.0.15
Fixed
- Wiki
README.mdremoved from GitHub Wiki:docs/wiki-source/README.mdes documentación interna del proceso de sincronización, no una página de usuario. Eliminado del wiki remoto. - npm republish blocked: v1.0.14 no pudo republicarse tras unpublish (política de npm). Release bump a v1.0.15.
Changed
- Wiki repo clonado dentro del proyecto: En vez de
/tmp/wiki, ahora se clona endocs/wiki-source/.wiki/(gitignored). Sincronización conrsync --exclude='README.md'. .gitignoreactualizado: Nueva entrada/docs/wiki-source/.wiki/para excluir el clon de la Wiki del repo principal.- Instrucciones de sincronización actualizadas:
docs/wiki-source/README.mdahora documenta el uso dersynccon--exclude='README.md'.
v1.0.13 — SDD Command Refactor + Governance
Added
- New
docs-update/command: Dedicated command for updating, migrating, and synchronizing documentation with code and configuration files. Includes pre-flight analysis of existing docs, question-tool integration for resolving contradictions, and strict restrictions (notasks/writes, no code implementation). - New
diagnosis/command: Analyzes remote repository issues, detects problems, and documents technical diagnostics indocs/diagnosis/. Creates structured diagnosis files with metadata, symptoms, root cause analysis, and verification steps. Includesdocs/diagnosis/README.mdanddiagnosis-template.mdin the template. docs/diagnosis/directory in template: New standard directory for operational technical knowledge. Contains README explaining its purpose and a template for documenting diagnoses.
Changed
- Refactored
evolve/command: Simplified scope to only create new specs for mature projects with robust versions. Removed ability to write totasks/or implement code. Added pre-flight to detect project maturity level. - Agent governance — Quetzalcoatl: Updated permissions to prohibit writing to
tasks/, source code (src/), and configuration files. Quetzalcoatl now exclusively writes documentation. - Agent governance — Moctezuma: Updated permissions to restrict writing exclusively to
tasks/directory and its files. - SDD determinism: All SDD lifecycle commands now suggest the next command to execute upon completion (e.g.,
spec/suggestsplan/,plan/suggestsbuild/, etc.). - Removed command suggestions from agent configurations: Primary agents no longer suggest specific commands. Instead, they suggest invoking other primary agents (e.g., Quetzalcoatl suggests invoking Moctezuma for execution planning).
Fixed
- Issue #15: Resolved governance and determinism issues in workspace commands.
evolve/no longer executes tasks outside its scope (writing totasks/, implementing code). Clear separation of concerns between documentation (Quetzalcoatl), planning (Moctezuma), and implementation (Tlaloc).
v1.0.12
Fixed
- Windows CI: broken symlink test skipped on Windows: Symlink tests (
destinationExists) now skip on Windows where elevated privileges are required forfs.symlink(). - E2E: stdout verification for update success message: E2E scenario 15 now captures both stdout and stderr. Assertion #9 checks for "Workspace update complete" in stdout (where
@clack/promptswrites it), not stderr.