codexspec 0.7.15__tar.gz → 0.7.16__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {codexspec-0.7.15 → codexspec-0.7.16}/PKG-INFO +1 -1
- {codexspec-0.7.15 → codexspec-0.7.16}/pyproject.toml +1 -1
- {codexspec-0.7.15 → codexspec-0.7.16}/src/codexspec/__init__.py +1 -1
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/distill.md +7 -7
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/onboard.md +1 -1
- {codexspec-0.7.15 → codexspec-0.7.16}/.gitignore +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/LICENSE +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/README.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/codexspec-icon.svg +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/codexspec-logo-dark.svg +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/codexspec-logo-light.svg +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/scripts/bash/check-i18n-completeness.sh +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/scripts/bash/check-i18n-structure.sh +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/scripts/bash/check-prerequisites.sh +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/scripts/bash/common.sh +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/scripts/bash/create-new-feature.sh +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/scripts/bash/review-context.sh +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/scripts/powershell/check-prerequisites.ps1 +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/scripts/powershell/common.ps1 +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/scripts/powershell/create-new-feature.ps1 +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/scripts/powershell/review-context.ps1 +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/src/codexspec/automation.py +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/src/codexspec/blueprint.py +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/src/codexspec/commands/__init__.py +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/src/codexspec/commands/installer.py +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/src/codexspec/i18n.py +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/src/codexspec/idea.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/src/codexspec/integrations/__init__.py +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/src/codexspec/integrations/base.py +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/src/codexspec/integrations/claude.py +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/src/codexspec/integrations/codex.py +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/src/codexspec/profile.py +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/src/codexspec/translator.py +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/analyze.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/auto-dev.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/blueprint.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/checklist.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/clarify.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/commit-staged.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/config.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/constitution.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/debug.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/evolve.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/generate-spec.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/implement-tasks.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/plan-to-tasks.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/pr.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/quick.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/release-notes.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/reverse-spec.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/review-code.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/review-design.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/review-plan.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/review-spec.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/review-tasks.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/spec-to-design.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/spec-to-plan.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/specify.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/commands/tasks-to-issues.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/docs/checklist-template.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/docs/constitution-template.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/docs/design-template.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/docs/plan-template-detailed.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/docs/plan-template-simple.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/docs/requirements-template.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/docs/spec-template-detailed.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/docs/spec-template-simple.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/docs/tasks-template-detailed.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/docs/tasks-template-simple.md +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/translations/de.json +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/translations/en.json +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/translations/es.json +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/translations/fr.json +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/translations/ja.json +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/translations/ko.json +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/translations/pt-BR.json +0 -0
- {codexspec-0.7.15 → codexspec-0.7.16}/templates/translations/zh-CN.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: codexspec
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.16
|
|
4
4
|
Summary: CodexSpec - A Requirements-First SDD toolkit for Claude Code
|
|
5
5
|
Project-URL: Homepage, https://github.com/Zts0hg/codexspec
|
|
6
6
|
Project-URL: Repository, https://github.com/Zts0hg/codexspec
|
|
@@ -58,7 +58,7 @@ from .profile import ensure_profile_scaffold, inject_profile_block
|
|
|
58
58
|
from .translator import SUPPORTED_LANGUAGES, translate
|
|
59
59
|
|
|
60
60
|
# Version info
|
|
61
|
-
__version__ = "0.7.
|
|
61
|
+
__version__ = "0.7.16"
|
|
62
62
|
__author__ = "CodexSpec Team"
|
|
63
63
|
|
|
64
64
|
# Constitution file path constants
|
|
@@ -55,7 +55,7 @@ Apply this boundary test to every candidate: **"Would a single feature's `requir
|
|
|
55
55
|
|
|
56
56
|
## The profile store: `.codexspec/profile/`
|
|
57
57
|
|
|
58
|
-
Six **category directories**, each holding **one record per file** (`<id>.md`) with **only current-effective** knowledge — dense, with no "retired" section (git history is the ledger). One-file-per-record is deliberate: parallel feature branches each add differently-named files, so distilled knowledge merges without conflict. Create the directory and record file on first write.
|
|
58
|
+
Six **category directories**, each holding **one record per file** (`<id>.md`, or `<id>-<slug>.md` — see the `id` rule below) with **only current-effective** knowledge — dense, with no "retired" section (git history is the ledger). One-file-per-record is deliberate: parallel feature branches each add differently-named files, so distilled knowledge merges without conflict. Create the directory and record file on first write.
|
|
59
59
|
|
|
60
60
|
- `constraints/` — negative constraints (`严禁 / 仅允许`). These carry the **highest** weight and MUST be honored first.
|
|
61
61
|
- `conventions/` — positive cross-feature conventions / steering.
|
|
@@ -70,7 +70,7 @@ There is **no** `facts/` category — a bare fact with no "therefore do X" is ei
|
|
|
70
70
|
|
|
71
71
|
Every record MUST separate the distilled claim from the evidence it rests on:
|
|
72
72
|
|
|
73
|
-
- `id` — **type letter + full source-feature id + local sequence**, e.g. `P-2026-0812-14054p-1` or `Con-2026-0812-14054p-1`.
|
|
73
|
+
- `id` — **type letter + full source-feature id + local sequence**, e.g. `P-2026-0812-14054p-1` or `Con-2026-0812-14054p-1`. The `### <id>: <title>` heading keeps the bare id; the **filename** is `<id>-<slug>.md`, where the **slug** is a semantic suffix derived from the record title: lowercase ASCII letters and digits with hyphens as separators (`^[a-z0-9]+(-[a-z0-9]+)*$`, no leading/trailing hyphen), at most 50 characters, rendered in English when the title is not ASCII. When no meaningful slug can be derived, write the legacy bare form `<id>.md` — both forms are valid store members. The slug never enters the id, the heading, or `[[id]]` links, and never participates in uniqueness. Locating a record from its id stays mechanical: the record's file is exactly the one named `<id>.md` or the one named `<id>-<slug>.md`; because the slug admits only `[a-z0-9-]`, no other filename can begin with `<id>` followed by `-` or `.`, so a lookup by id is unambiguous even when one sequence number is a digit-prefix of another. The **source-feature id** is the distilling feature's full spec-dir id `{YYYY-MMDD-HHMM}{rr}` (e.g. `2026-0812-14054p`); it is globally unique by the timestamp+random scheme spec directories use, so records distilled on parallel feature branches never collide on id **or filename** (they merge with no conflict) — uniqueness is carried entirely by the id. Keep the **full** id (not a short tail) so the record is self-describing: the date supports recency/staleness reading, and the feature id ties the record to its originating change for decision context and scope. When distilling with no feature context, generate a fresh `{YYYY-MMDD-HHMM}{rr}` id now (same convention as create-new-feature). **Never** use a bare sequential id such as `P-001` — those collide across parallel branches.
|
|
74
74
|
- `claim` — one-sentence reusable **summary** (a title line, not the actionable body — for a `pitfall` the usable content lives in the three body parts below, not in this sentence).
|
|
75
75
|
- `type` — `convention` | `constraint` | `pitfall` | `decision` | `strategy` | `runbook` (`constraint` = highest priority).
|
|
76
76
|
- `scope/when` — natural-language applicability condition (e.g. "when editing Python code"); omit for global. **No formal syntax.**
|
|
@@ -105,7 +105,7 @@ If you cannot state these parts, the strategy or runbook is not yet worth record
|
|
|
105
105
|
|
|
106
106
|
This separation is what makes a later error locatable as **misread** (facts wrong) vs **overreach** (claim over-generalized) vs **stale** (state no longer holds).
|
|
107
107
|
|
|
108
|
-
Example — a `convention` (claim + evidence is enough), file `conventions/Con-2026-0809-2219gg-1.md`:
|
|
108
|
+
Example — a `convention` (claim + evidence is enough), file `conventions/Con-2026-0809-2219gg-1-prefer-absolute-imports.md`:
|
|
109
109
|
|
|
110
110
|
```markdown
|
|
111
111
|
### Con-2026-0809-2219gg-1: Prefer absolute imports
|
|
@@ -118,7 +118,7 @@ Example — a `convention` (claim + evidence is enough), file `conventions/Con-2
|
|
|
118
118
|
- status: vetted
|
|
119
119
|
```
|
|
120
120
|
|
|
121
|
-
Example — a `pitfall` (note the required `root-cause` / `workaround` / `lesson` body), file `pitfalls/P-2026-0810-1330ab-1.md`:
|
|
121
|
+
Example — a `pitfall` (note the required `root-cause` / `workaround` / `lesson` body), file `pitfalls/P-2026-0810-1330ab-1-re-sub-string-replacement-corruption.md`:
|
|
122
122
|
|
|
123
123
|
```markdown
|
|
124
124
|
### P-2026-0810-1330ab-1: `re.sub` with a string replacement corrupts blocks containing backslashes
|
|
@@ -134,7 +134,7 @@ Example — a `pitfall` (note the required `root-cause` / `workaround` / `lesson
|
|
|
134
134
|
- status: candidate
|
|
135
135
|
```
|
|
136
136
|
|
|
137
|
-
Example — a `strategy` (note the `trigger` / `action` body), file `strategies/S-2026-0813-1606fz-1.md`:
|
|
137
|
+
Example — a `strategy` (note the `trigger` / `action` body), file `strategies/S-2026-0813-1606fz-1-suspect-markdown-emphasis-first.md`:
|
|
138
138
|
|
|
139
139
|
```markdown
|
|
140
140
|
### S-2026-0813-1606fz-1: When a substring contract test fails, suspect markdown emphasis first
|
|
@@ -149,7 +149,7 @@ Example — a `strategy` (note the `trigger` / `action` body), file `strategies/
|
|
|
149
149
|
- status: candidate
|
|
150
150
|
```
|
|
151
151
|
|
|
152
|
-
Example — a `runbook` (note the ordered `steps` + `failure-recovery` body), file `runbooks/R-2026-0813-1143el-1.md`:
|
|
152
|
+
Example — a `runbook` (note the ordered `steps` + `failure-recovery` body), file `runbooks/R-2026-0813-1143el-1-release-a-new-codexspec-version.md`:
|
|
153
153
|
|
|
154
154
|
```markdown
|
|
155
155
|
### R-2026-0813-1143el-1: Release a new CodexSpec version
|
|
@@ -191,7 +191,7 @@ When a new item conflicts with an existing rule, resolve in this order:
|
|
|
191
191
|
|
|
192
192
|
Change the profile **only** through three conceptual operations (you edit the files directly — these are a discipline, **not** a tool API or matching algorithm):
|
|
193
193
|
|
|
194
|
-
- `add` — create a new record file `<category>/<id>.md` for a verified item.
|
|
194
|
+
- `add` — create a new record file `<category>/<id>-<slug>.md` (bare `<category>/<id>.md` when no meaningful slug applies) for a verified item.
|
|
195
195
|
- `replace` — supersede an outdated/wrong item **in its own file** (keeps records dense).
|
|
196
196
|
- `remove` — delete the record's file when a changed environment invalidates it.
|
|
197
197
|
|
|
@@ -65,7 +65,7 @@ onboard **never** extracts `decisions`, `pitfalls`, `strategies`, or `runbooks`.
|
|
|
65
65
|
|
|
66
66
|
## Record Format
|
|
67
67
|
|
|
68
|
-
onboard **reuses `distill`'s profile store and record format verbatim** — one record per file under a category directory (`conventions/<id>.md`, `constraints/<id>.md`), ids namespaced by the source-feature id, and `claim` physically separated from `evidence`. See `distill.md` for the canonical format. onboard writes with these **deltas**:
|
|
68
|
+
onboard **reuses `distill`'s profile store and record format verbatim** — one record per file under a category directory (`conventions/<id>-<slug>.md`, `constraints/<id>-<slug>.md`; bare `<id>.md` when no meaningful slug applies), ids namespaced by the source-feature id, and `claim` physically separated from `evidence`. See `distill.md` for the canonical format. onboard writes with these **deltas**:
|
|
69
69
|
|
|
70
70
|
- `provenance` marks the **onboard scan** as the source (distinct from `distill`), with `derivation: inferred` — always, because the knowledge is inferred from code, never quoted from the user.
|
|
71
71
|
- An onboard record's `status` is always **`candidate`** at write time — onboard **never** writes `vetted` itself. Its `inferred` origin is **not** a permanent barrier: such a record can later be promoted to `vetted` via `/distill review` once it is outcome-verified and the user approves it (the `evolve` gate remains `vetted`). See the `status` rule in `distill.md`.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|