Implementation Plan: Rename Ceremony Commit to Status Commit
Branch: main (planning), lane branch at implement time | Date: 2026-05-28 | Spec: spec.md Input: Feature specification from kitty-specs/rename-ceremony-to-status-commit-01KSPN6C/spec.md Mission ID: 01KSPN6C5DWX7MRFMCD2BG1SBT (mid8: 01KSPN6C) Change mode: bulk_edit (occurrence map required before first WP) Source: GitHub Issue #1325
Summary
Pure terminology rename. Replace every active-source occurrence of "ceremony" and the partially-landed alternative "status-writing" with the canonical term "status commit". The glossary anchors the canonical term and lists both old terms as deprecated synonyms. A new architectural test asserts the forbidden terms cannot reappear. No runtime behavior changes; no command surface, file-format, or commit-policy semantics change. The proposed config flag named in the F-09 findings doc was verified at spec time to be proposal-only (not in live code), so only the doc reference is rewritten.
Technical Context
Language/Version: Python 3.11+ (existing spec-kitty codebase) Primary Dependencies: ruamel.yaml (glossary edits), pytest (architectural guard test), ripgrep/grep (occurrence discovery during plan + verification at acceptance) Storage: Filesystem only (markdown/YAML/Python source files); no database, no schema migration Testing: Existing pytest suite must pass unchanged (identifier renames included). One new architectural test added at tests/architectural/test_no_legacy_terminology.py runs git grep/ripgrep over src/, tests/, docs/ for the forbidden terms and asserts zero hits, excluding kitty-specs/. Target Platform: Repository source tree (developer-facing); no runtime deployment surface affected Project Type: single (spec-kitty CLI codebase — same source layout as the existing project) Performance Goals: Architectural grep guard must complete in <2 s on the existing test machine (single ripgrep pass over src/ tests/ docs/). Test suite wall-clock delta ≤5% versus pre-rename baseline per NFR-005. Constraints: Behavioral fidelity — no semantic changes to commands, hooks, file formats, or commit policy. Pure string + identifier substitution. kitty-specs/ historical mission artifacts are out of scope. Past commit messages and git history are not rewritten. The user's local checkout path (spec-kitty-dev/ceremony/spec-kitty) is irrelevant — local directory naming, not a repository artifact. Scale/Scope: ~25–30 active-source occurrences across ~12 files (11 ceremony files surveyed at spec time + commit_helpers.py status-writing reconciliation). Single PR via mission lane workflow.
Charter Check
GATE: Must pass before Phase 0 research. Re-check after Phase 1 design.
Charter context loaded for action plan (see spec-kitty charter context --action plan). Relevant project policy:
- typer / rich / ruamel.yaml / pytest / mypy strict — established stack; this mission introduces no new dependency.
- 90%+ test coverage for new code — the only new code is the architectural grep guard test (which IS the test itself, so coverage is structurally satisfied) and the glossary YAML edit (a data file, not code).
- mypy --strict must pass — applies to any Python identifier renames in
commit_helpers.pyand renamed test fixtures. - Integration tests for CLI commands — no CLI command behavior changes; existing integration tests must remain green w/ identifier renames propagated to callers.
Glossary precedent: .kittify/glossaries/spec_kitty_core.yaml already supports status: deprecated (5 prior entries) and synonyms_to_avoid. This mission follows the established schema; no new YAML conventions are introduced.
Directives in scope (from charter context):
- DIRECTIVE_003 (Decision Documentation Requirement): two
decision_ids minted and resolved at plan phase (01KSPP3SSZ5GKHTTB1C9EJQ13Vrewording strategy,01KSPP3W3VW8GB4WCXFF7J7X1Zregression guard). - DIRECTIVE_010 (Specification Fidelity Requirement): plan strictly tracks the 14 FRs in spec.md. Any deviation surfaces during implement review.
Charter Check: PASS (no violations; no Complexity Tracking entries needed).
Project Structure
Documentation (this feature)
kitty-specs/rename-ceremony-to-status-commit-01KSPN6C/
├── plan.md # This file (/spec-kitty.plan command output)
├── spec.md # Spec (already committed)
├── research.md # Phase 0 output (rename research + occurrence discovery)
├── data-model.md # Phase 1 output (terminology data: canonical + deprecations)
├── quickstart.md # Phase 1 output (operator runbook for the rename)
├── contracts/ # Phase 1 output (term-rename contract listing replacements)
├── occurrence_map.yaml # Phase 1 output (REQUIRED for bulk-edit missions)
├── decisions/ # Decision artifacts (auto-managed by `agent decision`)
│ ├── DM-01KSPP3SSZ5GKHTTB1C9EJQ13V.md # Doctrine rewording strategy
│ └── DM-01KSPP3W3VW8GB4WCXFF7J7X1Z.md # Regression guard strategy
├── checklists/
│ └── requirements.md # Spec quality checklist (created at specify phase)
└── tasks/ # Populated by /spec-kitty.tasks
Source Code (repository root) — files touched by this mission
src/
├── specify_cli/
│ └── git/
│ └── commit_helpers.py # FR-002, FR-003, FR-004 — reconcile "status-writing" → "status commit"
└── doctrine/
├── procedures/
│ └── README.md # FR-001, FR-008 — "Feature merge ceremony" → reworded
├── missions/software-dev/actions/tasks/
│ └── guidelines.md # FR-001, FR-008 — "inflating them with ceremony" → reworded
└── skills/spec-kitty-program-orchestrate/
└── SKILL.md # FR-001, FR-008 — 4 occurrences of "full ceremony" → semantic rewrite
tests/
├── architectural/
│ ├── _baselines.yaml # FR-011 — rewrite line 17 comment
│ └── test_no_legacy_terminology.py # NEW — grep guard (FR-013, FR-014 + decision 01KSPP3W3VW8GB4WCXFF7J7X1Z)
├── doctrine/procedures/
│ ├── conftest.py # FR-005 — fixture ID `mission-merge-ceremony`
│ └── test_models.py # FR-005 — assertion on fixture ID
├── e2e/
│ └── conftest.py # FR-005 — `E2E_CEREMONY_BRANCH`, `_checkout_e2e_ceremony_branch` (6 occurrences)
└── git_ops/
└── test_safe_commit_helper_integration.py # FR-005 — function name + docstring (lines 105-106 per issue)
docs/
├── development/
│ ├── org-doctrine-layer-architecture-review.md # FR-009 — "degrades to ceremony"
│ └── 3-2-publication-checklist.md # FR-009 — "specify/plan/tasks ceremony"
└── engineering_notes/
├── reflections/README.md # FR-009 — "ceremony surfaces"
└── finding/2026-05-24-mission-01KSAF14-orchestration-findings.md # FR-009, FR-010 — 5 occurrences incl. proposed flag name
.kittify/glossaries/
└── spec_kitty_core.yaml # FR-006, FR-007 — add canonical + 2 deprecated entries
Structure Decision: Single-project structure. All edits land in the existing repository tree at the paths shown above. No new packages or directories created (one new test file under tests/architectural/).
Phase 0: Research
Output: research.md. Summary:
1. Glossary schema research: confirmed the existing .kittify/glossaries/spec_kitty_core.yaml schema supports status: deprecated and synonyms_to_avoid. Pattern established by 5 prior deprecated entries (main repo, main repository, main repository root, plus 2 others). No schema invention required. 2. Config-flag live-state verification: grep -rn "allow_ceremony_commits_on_target_branch\|allow_status_commits_on_target_branch" src/ returns zero hits. Confirmed at spec time and re-confirmed at plan time. Only the F-09 findings doc references the proposed flag; no compat alias, no code-side rename needed. 3. Active-source occurrence discovery: grep -rln 'ceremony' src/ tests/ docs/ --include='.py' --include='.md' --include='*.yaml' enumerated 11 files; grep -rln 'status-writing' src/ enumerated 1 file (commit_helpers.py). Total = 12 files. Detailed occurrence list captured in occurrence_map.yaml. 4. Doctrine rewording strategy: Decision 01KSPP3SSZ5GKHTTB1C9EJQ13V resolved — semantic rewrite per context. The occurrence_map.yaml classifies each occurrence as either commit_class (replace w/ "status commit") or workflow_sense (rewrite to convey the actual meaning, e.g., "full mission workflow", "all phases"). 5. Regression guard choice: Decision 01KSPP3W3VW8GB4WCXFF7J7X1Z resolved — pytest architectural test that runs ripgrep over src/ tests/ docs/ for both forbidden terms. New file at tests/architectural/test_no_legacy_terminology.py. Excludes kitty-specs/ historical artifacts.
Phase 1: Design & Contracts
Data Model
Output: data-model.md. The only "entities" in a terminology mission are the terms themselves:
- Canonical term:
status commit— auto-commit recording workflow state changes. - Deprecated term 1:
ceremony commit(and variants: "ceremony", "ceremony write", "ceremony command") → resolves tostatus commit. - Deprecated term 2:
status-writing operation(and "status-writing command") → resolves tostatus commit.
State transitions: none. Invariants: only the canonical term appears in active source.
Contracts
Output: contracts/term-rename-contract.md. The "contract" is the replacement mapping: per-pattern source → target text, plus the doctrine-prose semantic-rewrite categories.
No API endpoints, no payloads, no webhooks. The contract is purely lexical.
Quickstart
Output: quickstart.md. Operator runbook covering:
1. Lane workspace creation: spec-kitty implement WP01 --mission rename-ceremony-to-status-commit-01KSPN6C 2. Verifying the occurrence map matches reality (re-run grep) 3. Acceptance grep at end: grep -rn 'ceremony' src/ tests/ docs/ --include='.py' --include='.md' --include='*.yaml' must return zero, and same for status-writing 4. Test suite, mypy, ruff invocations
Occurrence Map (bulk-edit guardrail artifact)
Output: occurrence_map.yaml. Required for change_mode: bulk_edit. Enumerates every active-source occurrence of "ceremony" and "status-writing" with file, line number, surrounding context, replacement text, and category classification (one of: code_symbols, import_paths, filesystem_paths, serialized_keys, cli_commands, user_facing_strings, tests_fixtures, logs_telemetry). Categories absent in this rename are marked category_not_applicable: true w/ a one-line rationale.
Complexity Tracking
Charter Check passed; no violations to justify.
No entries.