brief-spec 0.5.0__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.
Files changed (78) hide show
  1. brief_spec-0.5.0/.claude-plugin/plugin.json +18 -0
  2. brief_spec-0.5.0/.codex-plugin/plugin.json +36 -0
  3. brief_spec-0.5.0/.gitignore +13 -0
  4. brief_spec-0.5.0/CHANGELOG.md +323 -0
  5. brief_spec-0.5.0/LICENSE +21 -0
  6. brief_spec-0.5.0/PKG-INFO +577 -0
  7. brief_spec-0.5.0/README.md +534 -0
  8. brief_spec-0.5.0/hooks/copilot.json +45 -0
  9. brief_spec-0.5.0/hooks/hooks.json +60 -0
  10. brief_spec-0.5.0/integrations/copilot/cloud/README.md +22 -0
  11. brief_spec-0.5.0/integrations/copilot/settings.json.example +14 -0
  12. brief_spec-0.5.0/plugin.json +13 -0
  13. brief_spec-0.5.0/pyproject.toml +99 -0
  14. brief_spec-0.5.0/schemas/brief-spec-bundle-manifest.schema.json +49 -0
  15. brief_spec-0.5.0/schemas/brief-spec-delivery-receipt.schema.json +49 -0
  16. brief_spec-0.5.0/schemas/brief-spec-delivery.schema.json +177 -0
  17. brief_spec-0.5.0/schemas/brief-spec-event.schema.json +67 -0
  18. brief_spec-0.5.0/schemas/brief-spec-evidence.schema.json +19 -0
  19. brief_spec-0.5.0/schemas/brief-spec-frame-receipt.schema.json +26 -0
  20. brief_spec-0.5.0/schemas/brief-spec-frame-request.schema.json +15 -0
  21. brief_spec-0.5.0/schemas/brief-spec-outcome-brief.schema.json +34 -0
  22. brief_spec-0.5.0/schemas/brief-spec-session-checkpoint.schema.json +60 -0
  23. brief_spec-0.5.0/schemas/briefspec-delivery.schema.json +105 -0
  24. brief_spec-0.5.0/schemas/bundle-manifest.schema.json +49 -0
  25. brief_spec-0.5.0/schemas/delivery-receipt.schema.json +47 -0
  26. brief_spec-0.5.0/schemas/evidence.schema.json +36 -0
  27. brief_spec-0.5.0/schemas/outcome-brief.schema.json +65 -0
  28. brief_spec-0.5.0/schemas/session-checkpoint.schema.json +144 -0
  29. brief_spec-0.5.0/skills/brief-spec/SKILL.md +83 -0
  30. brief_spec-0.5.0/skills/brief-spec/agents/openai.yaml +5 -0
  31. brief_spec-0.5.0/skills/brief-spec/references/debugging.md +6 -0
  32. brief_spec-0.5.0/skills/brief-spec/references/exploration.md +6 -0
  33. brief_spec-0.5.0/skills/brief-spec/references/general.md +6 -0
  34. brief_spec-0.5.0/skills/brief-spec/references/implementation.md +6 -0
  35. brief_spec-0.5.0/skills/brief-spec/references/operations.md +6 -0
  36. brief_spec-0.5.0/skills/brief-spec/references/planning.md +6 -0
  37. brief_spec-0.5.0/skills/brief-spec/references/research.md +6 -0
  38. brief_spec-0.5.0/skills/brief-spec/references/review.md +6 -0
  39. brief_spec-0.5.0/skills/outcome-brief/SKILL.md +81 -0
  40. brief_spec-0.5.0/skills/outcome-brief/agents/openai.yaml +5 -0
  41. brief_spec-0.5.0/skills/outcome-brief/references/contract.md +39 -0
  42. brief_spec-0.5.0/skills/outcome-brief/references/examples.md +51 -0
  43. brief_spec-0.5.0/skills/session-checkpoint/SKILL.md +43 -0
  44. brief_spec-0.5.0/skills/session-checkpoint/agents/openai.yaml +5 -0
  45. brief_spec-0.5.0/skills/session-checkpoint/references/examples.md +51 -0
  46. brief_spec-0.5.0/skills/session-checkpoint/references/modes.md +71 -0
  47. brief_spec-0.5.0/src/brief_spec/__init__.py +15 -0
  48. brief_spec-0.5.0/src/brief_spec/__main__.py +5 -0
  49. brief_spec-0.5.0/src/briefspec/__init__.py +7 -0
  50. brief_spec-0.5.0/src/briefspec/__main__.py +5 -0
  51. brief_spec-0.5.0/src/briefspec/adapters/__init__.py +3 -0
  52. brief_spec-0.5.0/src/briefspec/adapters/base.py +184 -0
  53. brief_spec-0.5.0/src/briefspec/adapters/claude.py +10 -0
  54. brief_spec-0.5.0/src/briefspec/adapters/codex.py +10 -0
  55. brief_spec-0.5.0/src/briefspec/adapters/copilot.py +10 -0
  56. brief_spec-0.5.0/src/briefspec/adapters/registry.py +25 -0
  57. brief_spec-0.5.0/src/briefspec/artifacts.py +134 -0
  58. brief_spec-0.5.0/src/briefspec/bundle.py +340 -0
  59. brief_spec-0.5.0/src/briefspec/capabilities.py +12 -0
  60. brief_spec-0.5.0/src/briefspec/cli.py +669 -0
  61. brief_spec-0.5.0/src/briefspec/config.py +125 -0
  62. brief_spec-0.5.0/src/briefspec/continuity.py +94 -0
  63. brief_spec-0.5.0/src/briefspec/delivery.py +1100 -0
  64. brief_spec-0.5.0/src/briefspec/diagnostics.py +503 -0
  65. brief_spec-0.5.0/src/briefspec/errors.py +17 -0
  66. brief_spec-0.5.0/src/briefspec/events.py +425 -0
  67. brief_spec-0.5.0/src/briefspec/frames.py +100 -0
  68. brief_spec-0.5.0/src/briefspec/harnesses.py +317 -0
  69. brief_spec-0.5.0/src/briefspec/hooks.py +579 -0
  70. brief_spec-0.5.0/src/briefspec/installers.py +1167 -0
  71. brief_spec-0.5.0/src/briefspec/markdown.py +377 -0
  72. brief_spec-0.5.0/src/briefspec/models.py +299 -0
  73. brief_spec-0.5.0/src/briefspec/renderers.py +126 -0
  74. brief_spec-0.5.0/src/briefspec/resources.py +21 -0
  75. brief_spec-0.5.0/src/briefspec/state.py +202 -0
  76. brief_spec-0.5.0/src/briefspec/triggers.py +92 -0
  77. brief_spec-0.5.0/src/briefspec/verification.py +711 -0
  78. brief_spec-0.5.0/src/briefspec/work_types.py +737 -0
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "brief-spec",
3
+ "version": "0.5.0",
4
+ "description": "Type-aware, evidence-backed reading and delivery for AI coding agents.",
5
+ "author": {
6
+ "name": "Luan Moreno Maciel"
7
+ },
8
+ "homepage": "https://github.com/luanmorenommaciel/brief-spec",
9
+ "repository": "https://github.com/luanmorenommaciel/brief-spec",
10
+ "license": "MIT",
11
+ "keywords": [
12
+ "brief",
13
+ "checkpoint",
14
+ "evidence",
15
+ "developer-productivity"
16
+ ],
17
+ "skills": "./skills/"
18
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "brief-spec",
3
+ "version": "0.5.0",
4
+ "description": "Type-aware, evidence-backed reading and delivery for AI coding agents.",
5
+ "author": {
6
+ "name": "Luan Moreno Maciel",
7
+ "url": "https://github.com/luanmorenommaciel"
8
+ },
9
+ "homepage": "https://github.com/luanmorenommaciel/brief-spec",
10
+ "repository": "https://github.com/luanmorenommaciel/brief-spec",
11
+ "license": "MIT",
12
+ "keywords": [
13
+ "brief",
14
+ "checkpoint",
15
+ "evidence",
16
+ "developer-productivity"
17
+ ],
18
+ "skills": "./skills/",
19
+ "interface": {
20
+ "displayName": "Brief-Spec",
21
+ "shortDescription": "Predictable evidence-backed agent handoffs",
22
+ "longDescription": "Standardize substantive agent handoffs with a concise Outcome Brief and safe-boundary Session Checkpoints in orient, teach, and spoken modes.",
23
+ "developerName": "Luan Moreno Maciel",
24
+ "category": "Productivity",
25
+ "capabilities": [
26
+ "Interactive"
27
+ ],
28
+ "websiteURL": "https://github.com/luanmorenommaciel/brief-spec",
29
+ "defaultPrompt": [
30
+ "Close this task with an evidence-backed Outcome Brief",
31
+ "Orient me with a Session Checkpoint",
32
+ "Teach me what changed, then give me the next move"
33
+ ],
34
+ "brandColor": "#64D8FF"
35
+ }
36
+ }
@@ -0,0 +1,13 @@
1
+ .DS_Store
2
+ .briefspec/
3
+ .coverage
4
+ .pytest_cache/
5
+ .ruff_cache/
6
+ .venv/
7
+ __pycache__/
8
+ *.egg-info/
9
+ *.py[cod]
10
+ build/
11
+ dist/
12
+ coverage.xml
13
+ htmlcov/
@@ -0,0 +1,323 @@
1
+ # Changelog
2
+
3
+ All notable changes follow [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
4
+ This project uses semantic versioning.
5
+
6
+ ## [Unreleased]
7
+
8
+ ### Added
9
+
10
+ - Compact Outcome Brief for honest `DONE` results: Status, Outcome, and Proof only. The omitted
11
+ Human action, Gaps, Next, and Open fields are read as `None`, so the canonical object equals the
12
+ full form. Every other status still needs all seven fields, and `enforce` does not ask to wrap a
13
+ compact brief in the typed region.
14
+ - Every stop now validates the terminal message under every policy and records the brief kind,
15
+ validity, status, first errors, and running valid/invalid counts in session state. Claude Code
16
+ shows a one-line `systemMessage` warning when a brief is present but invalid.
17
+ - `brief-spec doctor codex` reproduces Codex's hook-approval hash and reports each Brief-Spec hook
18
+ as approved, not yet reviewed, or changed since review. Codex skips unapproved hooks without an
19
+ error, and `codex exec` never shows the review screen.
20
+ - Grok receives the classification through a `PreToolUse` hook, once per decision, because it
21
+ discards prompt-hook output. A Stop correction counts as delivery. The hook never returns a
22
+ permission decision.
23
+ - Copilot receives the classification on the first `postToolUse` of each classified task, because
24
+ command hooks cannot add context from `userPromptSubmitted`.
25
+ - Portuguese classification rules for all eight work types and the built-in subjects, including
26
+ Portuguese negation masking.
27
+ - A `session_end` event. Grok's observe-only Stop at session end (`channel_closed`, `shutdown`) maps
28
+ to it and changes no state.
29
+ - `tests/test_reading_experience.py`, including a labeled everyday-prompt corpus.
30
+
31
+ - `brief-spec frame` with versioned request and receipt schemas for bounded,
32
+ presentation-only Human Frames. Lifecycle coordinators can delegate Markdown
33
+ rendering without delegating approval or dispatch authority.
34
+
35
+ - Experimental `brief-spec-chronicle` package with explicit per-project activation, private
36
+ append-only material-event segments, idempotent ingestion, hash-chain receipts, a rebuildable
37
+ SQLite relation index, deterministic drift rules, canonical Project Chronicle snapshots, Human
38
+ Review Packs, transactional exports, external receipts, archive/restore, doctor, exact deletion,
39
+ and reviewed lesson export.
40
+ - Public `brief-spec-event/1.0` schema and dependency-free artifact primitives for canonical JSON,
41
+ hashing, atomic output sets, manifests, and receipts.
42
+ - Method contexts for Seamwise, Task-Spec, Converge, and general work, kept independent from work
43
+ type, subject, presentation, and lifecycle horizon.
44
+ - Harness capability reporting for Human Frame delivery tiers.
45
+ - Bounded source normalization for Brief-Spec delivery, Seamwise, Task-Spec, Converge, Exa,
46
+ Tavily, Firecrawl, and RAFT records, plus correlation-based cross-harness deduplication.
47
+ - Ingest-order replay across monthly segments, explicit ledger cutoffs, visible late arrivals,
48
+ human-approved pivot baselines, expanded deterministic drift rules, and a disposable
49
+ Seamwise → Task-Spec → Converge end-to-end journey.
50
+ - Generic HTML-to-PDF and spoken-script-to-MP3 helpers that preserve the existing renderer
51
+ contracts while allowing Chronicle to reuse their verified engines.
52
+ - Experimental `brief-spec-renderer-video` package for offline storyboard scenes, H.264/AAC MP4,
53
+ captions, transcript, chapters, source hashes, and renderer-fingerprint-scoped determinism.
54
+ - Comprehensive behavior catalog covering all eight work types, four reading experiences, six
55
+ continuity horizons, method-aware Human Frames, Outcome states, evidence edge cases, downloads,
56
+ harnesses, Chronicle operations, and explicit non-goals.
57
+ - Enforced repository-layout contract that requires canonical package-directory/distribution name
58
+ alignment while preserving the intentional `0.x` import and entry-point compatibility surfaces.
59
+
60
+ ### Changed
61
+
62
+ - Classifier adapter `1.2`: an explicit request verb weighs twice as much as a noun that only
63
+ mentions other work, so "find the root cause after the last deploy" is debugging and "deploy the
64
+ new build" is operations. Two request verbs of different types still abstain to `general`.
65
+ "Now that X is done," clauses are read as background. A labeled corpus of 31 everyday prompts
66
+ moved from 20 to 31 correct types and from 20 to 30 correct subjects; all 40 live-harness
67
+ prompts keep their expected classification.
68
+ - Subject selection prefers the subject that fits the chosen type, accepts plurals, and no longer
69
+ reads the word "table" as data work.
70
+ - A valid Outcome Brief closes the task. The decision stays recorded, a plain follow-up receives no
71
+ guidance, and the next substantive prompt is classified afresh. A soft cue such as "now that" or
72
+ "moving on" switches the type only when the new prompt classifies as a different, non-fallback
73
+ type.
74
+ - Full classification guidance is sent once per context window; later prompts receive a one-line
75
+ reminder with the sections and exact typed marker. Session start and compaction reset the window.
76
+ OMP and Grok always receive the full text.
77
+ - Checkpoint time and volume are measured since the last valid checkpoint or Outcome Brief instead
78
+ of since session start. Under `suggest`, the model receives one suggestion per window rather than
79
+ one every cooldown period.
80
+ - The session context is one paragraph without a mid-sentence line break and mentions the compact
81
+ form.
82
+ - Method context needs a product reference. The ordinary verb "converge" no longer selects the
83
+ Converge frame; `taskmesh` now selects Task-Spec.
84
+ - OMP capabilities no longer list `agent_end`, which the extension does not register.
85
+ - README, installation, compatibility, architecture, configuration, skills, examples, repository
86
+ layout, and contributing docs now match the installed behavior and paths.
87
+
88
+ - Renamed the PDF and audio renderer source directories to
89
+ `packages/brief-spec-renderer-pdf` and `packages/brief-spec-renderer-audio`; their legacy internal
90
+ Python modules and `briefspec.renderers` entry points remain operational through `0.x`.
91
+ - Expanded the README feature map, Human Continuity matrix, repository map, complete candidate
92
+ installation, documentation index, development gates, and honest limits to match the current
93
+ source tree.
94
+ - Documented the tracked multi-model `output/` corpus separately from runtime exports and defined
95
+ the ownership and cleanup policy for tracked release inputs, local evidence, builds, and caches.
96
+
97
+ ### Fixed
98
+
99
+ - Host-inserted prompt text no longer drives the reading frame. Claude Code passes background task
100
+ notifications through the prompt hook; their words could reclassify the task, select a method,
101
+ or turn "orient checkpoint" into an explicit checkpoint request. Notifications, system
102
+ reminders, slash-command echoes, and hook feedback are now removed first, and a prompt made only
103
+ of them is not a user turn.
104
+ - The router skill's typed-marker example now includes `decision_id`, which the hook requires to
105
+ accept the wrapper.
106
+ - The typed review example in `docs/examples.md` used `##` headings that the parser rejects.
107
+ - The README first journey ran `brief-spec types` after installing `v0.2.0`, which ships only the
108
+ `briefspec` command and has no `types` command.
109
+ - Project destinations for OMP (`.omp/`) and Kimi (`.kimi-code/skills/`) were documented as
110
+ `.agents/skills/`; the Cursor and Goose rows had no command.
111
+ - The Copilot cloud README and architecture doc used legacy `briefspec` file names, and the
112
+ installation guide referenced a `v0.5.0` tag that does not exist.
113
+
114
+ - Atomic writes now support Windows Python versions without `os.fchmod` and close the temporary
115
+ descriptor before cleaning up a failed permission change, preserving the original destination
116
+ and error.
117
+ - Chronicle ZIP creation and reading now share one owned temporary stream, avoiding Windows
118
+ pathname-sharing failures while preserving deterministic archive contents.
119
+ - Repository Claude instructions now live in `.claude/CLAUDE.md`, retaining the `OPERATING.md`
120
+ import without triggering strict plugin-root validation warnings.
121
+ - Optional-renderer smoke checks now compare canonical JSON between export and bundle and verify
122
+ each MP3 independently, rather than requiring separate speech generations to be byte-identical.
123
+ PDF byte-identity and rendered-artifact integrity checks remain enforced.
124
+ - Made path-rendering and POSIX-permission tests platform-aware so Windows validates native path
125
+ behavior without pretending that Unix mode bits are enforceable.
126
+ - Chronicle doctor now reports the Windows permission boundary explicitly instead of producing a
127
+ permanent false warning, while retaining `0700`/`0600` enforcement on POSIX systems.
128
+ - The hosted macOS audio gate now installs `ffmpeg`/`ffprobe` before rendering and verification.
129
+ - Installation snapshots now retain full-stack rollback commands when Chronicle and video wheels
130
+ are present, including restoration of the separate Chronicle executable.
131
+ - OMP integration now injects the classification context through the turn system prompt
132
+ (`before_agent_start` → `systemPrompt`) instead of a hidden transcript message, primes the model
133
+ with session context, and enforces the terminal Outcome/typed wrapper at `session_stop`. The dead
134
+ `agent_end` block path and the unmapped `SessionStop` event were removed.
135
+ - Grok Stop no longer continues a turn that already has a valid Outcome Brief or Session
136
+ Checkpoint. Grok paints that message and opens suggested-question chips plus the follow-up
137
+ queue before Stop runs; a continuation held the queue, wiped the chips, and could send the
138
+ wrong next prompt. Stop still supplies one classification repair when the brief itself is
139
+ missing.
140
+ - Grok Stop no longer forces an Outcome Brief onto a non-substantive follow-up. Sticky work
141
+ type from an earlier review was wrapping a literal `PINEAPPLE` reply as a codebase review.
142
+
143
+ ### Security
144
+
145
+ - Chronicle is disabled until explicit project initialization, writes only below
146
+ `$BRIEF_SPEC_HOME/chronicles`, rejects credential/transcript/prompt/tool-output fields before
147
+ persistence, bounds events to 64 KiB, and requires an exact project ID for deletion.
148
+ - Lesson approval creates an offline proposal export only; it cannot modify a knowledge system,
149
+ method, skill, policy, or canonical project state.
150
+
151
+ ## [0.5.0] - Unreleased candidate
152
+
153
+ ### Added
154
+
155
+ - Canonical Brief-Spec identity: `brief-spec` distribution and CLI plus the
156
+ `brief_spec` Python package, while preserving all `briefspec` 0.x aliases.
157
+ - Eight deterministic work-type profiles and open subject slugs with local,
158
+ bounded classification; explicit, host, inferred, and fallback origins;
159
+ categorical confidence; sticky task behavior; and pivot handling.
160
+ - `types list`, `types show`, and `classify` CLI commands, plus the universal
161
+ `brief-spec` routing skill.
162
+ - Typed Markdown wrapper and `brief-spec-delivery/2.0` canonical schema with
163
+ classification, ordered explanations, harness/model metadata, provenance,
164
+ artifacts, work items, manifests, and receipts.
165
+ - Data-driven harness registry and native user/project installers for Codex,
166
+ Claude Code, OMP, Grok Build, and Kimi Code; experimental adapters for
167
+ Copilot, Cursor Agent, and Goose.
168
+ - OMP native extension lifecycle and Kimi user-plugin integration, including
169
+ the project-scope skills-only capability boundary.
170
+ - Canonical `brief-spec-delivery/2.0` exports for deterministic Markdown,
171
+ JSON, self-contained offline HTML, ZIP, spoken text, and SSML, with optional
172
+ PDF and MP3 renderer packages.
173
+ - Provider-neutral provenance for Exa, Tavily, Firecrawl, local files, and
174
+ future research systems without adding their SDKs to the core package.
175
+ - Ordered bundle manifests, external delivery receipts, SHA-256 integrity,
176
+ fixed ZIP metadata, and structural, resolved, rendered, and delivered
177
+ verification levels.
178
+ - Portable Outcome Brief, Session Checkpoint, evidence, delivery, manifest,
179
+ and receipt schemas plus a self-contained offline compound schema bundle.
180
+ - Sanitized, source-fingerprinted live-host evidence and exact-SHA release
181
+ authorization inputs for build-once publication.
182
+ - Browser, PDF, local-audio, clean-wheel, clean-sdist, rollback, hermetic-host,
183
+ and cross-harness live acceptance gates.
184
+
185
+ ### Changed
186
+
187
+ - The unpublished `0.3.0` delivery and `0.4.0` renderer candidates are folded
188
+ into this release; no intermediate packages will be published.
189
+ - Canonical state uses `BRIEF_SPEC_HOME` and `~/.local/state/brief-spec`, while
190
+ the legacy variable, state, markers, receipts, schemas, and renderer entry
191
+ point group remain readable through the `0.x` line.
192
+ - Optional renderer distribution names are now `brief-spec-renderer-pdf` and
193
+ `brief-spec-renderer-audio`, version-aligned at `0.5.0`.
194
+ - Human-facing Markdown, HTML, and PDF projections are status-first while the
195
+ unchanged Outcome Brief and Session Checkpoint `1.0` contracts remain
196
+ backward compatible.
197
+ - Verification is zero-network and no-plugin by default. Public URL checks and
198
+ renderer code loading require explicit consent.
199
+ - Inferred classifications are capped at medium confidence; ambiguous or
200
+ conflicting intent falls back to `general` instead of fabricating certainty.
201
+ - Harness maturity is evidence-based: Codex, Claude Code, OMP, Grok Build, and
202
+ Kimi Code pass their required local live matrices; Copilot, Cursor, and Goose
203
+ remain explicitly experimental.
204
+
205
+ ### Fixed
206
+
207
+ - Grok Build now accepts native camelCase assistant payloads, obtains exact
208
+ classification metadata through one bounded Stop-hook repair, and uses the
209
+ actual `read_file`/`search_replace` native tool IDs for its disposable
210
+ implementation gate.
211
+ - Receipt ownership now requires the recorded path and prior hash. Locally
212
+ modified managed files are preserved and staged beside the new candidate
213
+ rather than overwritten.
214
+ - Runtime auto-detection follows explicit payload, stable session identifier,
215
+ mutually exclusive host markers, then deterministic fallback precedence.
216
+ - Doctor and installer tests no longer depend on optional host executables from
217
+ the maintainer's real `PATH`.
218
+
219
+ ### Security
220
+
221
+ - Resolved verification rejects loopback, private, link-local, metadata,
222
+ multicast, unspecified, redirected-private, and other non-public network
223
+ targets unless the relevant operation is explicitly permitted.
224
+ - File and archive verification now bounds input size, member count, expanded
225
+ size, compression ratio, redirects, requests, headers, and fetched bodies.
226
+ - Path traversal, absolute archive members, duplicate names, special files,
227
+ symlink escapes, command-like evidence, and silent workspace escapes are
228
+ rejected.
229
+ - Hook input, transcript tails, session state, and repair behavior remain
230
+ bounded; secrets and raw transcripts are excluded from artifacts and
231
+ receipts.
232
+
233
+ ## [0.4.0] - Unpublished candidate folded into 0.5.0
234
+
235
+ ### Added
236
+
237
+ - Optional `briefspec-renderer-pdf` package using canonical offline HTML and Playwright Chromium,
238
+ with A4/Letter output and Poppler-backed verification.
239
+ - Optional `briefspec-renderer-audio` package for local macOS `say` plus `ffmpeg` MP3 output and
240
+ explicitly consented OpenAI text-to-speech.
241
+ - Renderer discovery through the `briefspec.renderers` Python entry-point group.
242
+ - Linux PDF/browser and macOS local-audio end-to-end CI jobs, plus mocked OpenAI boundaries.
243
+
244
+ ## [0.3.0] - Unpublished candidate folded into 0.5.0
245
+
246
+ ### Added
247
+
248
+ - Canonical `briefspec-delivery/1.0` envelope with source metadata, provenance, artifacts, and
249
+ multi-agent work activity.
250
+ - Deterministic Markdown, JSON, self-contained HTML, and ZIP downloads generated from one object.
251
+ - External delivery receipts and structural, resolved, rendered, and delivered verification.
252
+ - `export`, `bundle`, `verify`, `deliver`, `setup`, and `capabilities` CLI commands.
253
+ - Atomic multi-runtime setup plus doctor repair, all-scope inventory, and version-drift checks.
254
+ - PyPI Trusted Publishing workflow, release manifest, restart-safe digest checks, and staged
255
+ GitHub Release finalization.
256
+
257
+ ### Changed
258
+
259
+ - Rich evidence annotations can include a safe `kind=` hint while legacy annotations remain valid.
260
+ - Spoken text and SSML are exportable only from a Spoken Checkpoint.
261
+
262
+ ## [0.2.1] - Unpublished candidate from 2026-08-03
263
+
264
+ ### Fixed
265
+
266
+ - Codex project hook commands resolve the Brief-Spec bundle from the Git root, so all lifecycle
267
+ events continue to work when a task starts in a nested repository directory.
268
+ - Codex project installs include a PowerShell `commandWindows` override with the same root-stable
269
+ behavior.
270
+ - The README badge, installation command, and verification record now stay aligned with the
271
+ package version.
272
+ - Session Checkpoint JSON fields now match all Orient, Teach, and Spoken human-facing contracts.
273
+ - Markdown validation rejects proof without an inspectable locator and warns when evidence basis
274
+ and result labels are missing.
275
+ - Repeat installation upgrades unchanged receipt-owned skill references while preserving
276
+ independently modified files.
277
+
278
+ ### Added
279
+
280
+ - Executable nested-directory regression coverage for Codex project hooks.
281
+ - A tag-driven release workflow that builds once, verifies the wheel, records SHA-256 checksums,
282
+ generates GitHub build provenance, and attaches the artifacts to the release.
283
+ - Contract-equivalence tests for every Session Checkpoint mode.
284
+ - Full-SHA GitHub Actions pins with Dependabot maintenance.
285
+
286
+ ## [0.2.0] - 2026-07-31
287
+
288
+ ### Fixed
289
+
290
+ - Checkpoint suggestions are delivered once per pending checkpoint and repeat only after the
291
+ configured cooldown, instead of on every completed tool call.
292
+
293
+ ### Changed
294
+
295
+ - Claude Code project installs write skills to `.claude/skills/` so the host lists
296
+ `outcome-brief` and `session-checkpoint` natively.
297
+ - Claude Code project hook commands anchor on `$CLAUDE_PROJECT_DIR` so they no longer depend
298
+ on the session's working directory.
299
+ - `doctor` resolves scope automatically: a project install for the current directory wins,
300
+ the user install is the fallback, and `--scope` forces either. The report header now names
301
+ the scope it checked.
302
+
303
+ ## [0.1.0] - 2026-07-31
304
+
305
+ ### Added
306
+
307
+ - `outcome-brief` with five honest terminal statuses and an evidence-first field order.
308
+ - `session-checkpoint` with orient, teach, and spoken modes.
309
+ - Dependency-free Python control plane for validation, safe-boundary triggers, and bounded state.
310
+ - Codex, Claude Code, and GitHub Copilot lifecycle adapters.
311
+ - Native plugin and marketplace manifests for all three ecosystems.
312
+ - Reversible user and project installers with receipts and conflict preservation.
313
+ - Network-free Copilot cloud bridge built as a deterministic Python zipapp.
314
+ - Doctor, configuration, state-retention, and validation commands.
315
+ - Synthetic Apex experience pilot and clean-room verification surfaces.
316
+
317
+ [Unreleased]: https://github.com/luanmorenommaciel/brief-spec/compare/v0.5.0...HEAD
318
+ [0.5.0]: https://github.com/luanmorenommaciel/brief-spec/compare/v0.2.0...v0.5.0
319
+ [0.4.0]: https://github.com/luanmorenommaciel/brief-spec/compare/v0.3.0...v0.4.0
320
+ [0.3.0]: https://github.com/luanmorenommaciel/brief-spec/compare/v0.2.1...v0.3.0
321
+ [0.2.1]: https://github.com/luanmorenommaciel/brief-spec/compare/v0.2.0...v0.2.1
322
+ [0.2.0]: https://github.com/luanmorenommaciel/brief-spec/compare/v0.1.0...v0.2.0
323
+ [0.1.0]: https://github.com/luanmorenommaciel/brief-spec/releases/tag/v0.1.0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Luan Moreno Maciel
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.