v1.2.0-beta.1
Pre-release
Pre-release
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. - Plugin SDD pipeline modularized (655→379 lines + src/ modules).
Fixed
- FEV-14 — Progress bar re-creation on every
stage_start(CRITICAL):showProgressBar()was called on every event, orphaning previousclack.progress()instances. Fixed: addedbarStartedclosure flag — bar initializes once, advances on subsequent events. - FEV-14 — Progress total included skipped files:
totalcounted all non-virtual rules, but only some got staged. Fixed:FileMergeEnginepre-computesstageDecisionsMap;totalreflects only staged files. Bar always reaches 100%. - FEV-14 — Symlink/gitignore logs emitted before operations (CRITICAL): Success log was emitted before the actual symlink/gitignore creation. If creation failed, log falsely claimed success. Fixed: logs moved inside
runPostInstallSteps(). - FEV-14 — Redundant
completeProgress()calls: Use cases calledcompleteProgress()on merge failure, but the progress callback already handled this via theerrorevent. Fixed: removed 3 redundant calls. - FEV-14 — Inline
import()types in tests: Test file usedimport("path").Typesyntax 6 times. Fixed: top-level imports added, inline references removed. - FEV-16 — TECH_DEBT items resolved: TD-1.1, TD-2.1, TD-5.1, TD-5.2, TD-6.2 all closed.
- FD-6.2 — Standard directory updates: New files in standard directories now reach existing users during update (was: entire directory skipped).
- CR-Fixes — Error context enrichment:
wrapMergeError()preservesMergeErrorphase/path in user-facing messages (e.g. "Disk full during staging of opencode.json"). AffectsInstallUseCaseBaseandUpdateWorkspaceUseCase. - CR-Fixes — stageOne standard Result:
FileMergeEngine.stageOne()returnsResult<void, MergeError>instead of null sentinel. Call sites use!result.okfor consistency. - CR-Fixes — Exhaustiveness guard:
shouldStage()instagePlanner.tsusesassertNever()for compile-time safety onRuleCategory. Unreachablereturn falsereplaced. - CR-Fixes — Coverage script hardening:
coverage-check.shpasses lcov path via env var instead of shell-in-Python interpolation.
Removed
- BREAKING:
.devin/optional directory removed. The.devin/compatibility layer (7 symlinks:skills,workflows,rules/*) is no longer installed.DEVIN_SYMLINKSconfiguration,devinSymlinksparameter from the use case chain, and.devinmanifest entry all removed. 6 tests eliminated, 838 pass/0 fail. Users who selected.devinduring installation will no longer see it in the optional files menu. - Binary compilation recipes —
just build,just build-allremoved from Justfile - Binary distribution from CI/CD —
ci.ymlno longer builds/smoke-tests/upload binaries;release.ymlno longer builds/checksums/attaches binaries to GitHub Releases - Binary resolution from E2E test infrastructure —
setup_binary()and related fallback logic (80+ lines) replaced with directbun run src/cli/main.ts - Binary install documentation — Offline/air-gapped binary install section removed from README
- Binary build instructions — Removed from CONTRIBUTING.md
- SC-15 — "Compiled binaries are produced for Linux, macOS, and Windows x64" removed from SPEC.md