Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 46 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,52 @@

## Unreleased

- Close ticket-016 from integrated default branch evidence.
### Governance housekeeping

- Close ticket-016 from integrated default branch evidence (ticket-017).
- Close tickets 017–019 from integrated evidence (ticket-020).
- Close tickets 021–022 from integrated evidence (ticket-023).
- Close ticket 025 from integrated evidence (ticket-026).
- Close ticket 027 from integrated evidence (ticket-028).
- Close ticket 028 and update TODO.md, README.md, CHANGELOG.md, and
project/README.md ticket index (ticket-029).

### Browser-backed source adapter (ticket-019)

- Add `CurllmAdapter` for `semcod/curllm` BQL browser page extractions in
`src/data2dsl_adapters.py`.
- Unit tests for valid and unevaluable Curllm observations in
`tests/test_golden_case_e2e.py`.

### Docker compliance (ticket-021)

- Pin `python:3.12-alpine` base image to immutable SHA-256 digest in
`Dockerfile`, resolving `GOV-DOCKER-002`.

### Architecture decisions (ticket-022)

- ADR-003: Evaluate `semcod/nlp2dsl` integration for natural language query
compilation. Decision: delegate NLP to `nlp2dsl` outer boundary; `data2dsl`
core remains zero-LLM, deterministic.

### Contract promotion (ticket-024)

- Promote `autogrammar.data2dsl.comparison` contract from `experimental` /
`0.1.0-dev` to `stable` / `0.1.0` in `dsl-manifest.json`.

### Agent skill interface (ticket-025)

- Implement `Data2DslSkill` conforming to `wellmanifest.skills/v1` in
`src/data2dsl_skill.py`.
- Expose `data2dsl_compare` and `data2dsl_self_test` tool definitions for
MCP / JSON Schema agent discovery.
- CLI `--self-test` and tool execution tests in `tests/test_cli.py`.

### Bug fix (ticket-027)

- Fix adapter normalization in `data2dsl_skill.py` for `CurllmAdapter`,
`Code2LogicAdapter`, and `Code2SchemaAdapter` raw input handling.

- Update TODO.md with Phase 5 task proposals for 2026-08-20.

## 0.1.0-dev (2026-08-19)
Expand Down
15 changes: 9 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -185,19 +185,22 @@ repository require that repository's owner-approved workflow.
## Current state

- Phases 0 through 4 are complete with governed ticket evidence.
- Four source adapters are implemented: GitHub/Diagit commit metrics,
Markdown claim extraction (via `mdflow`), Code2Logic (CFG/DFG), and
Code2Schema (entity/CQRS).
- Five source adapters are implemented: GitHub/Diagit commit metrics,
Markdown claim extraction (via `mdflow`), Code2Logic (CFG/DFG),
Code2Schema (entity/CQRS), and Curllm (browser-backed BQL sources).
- The deterministic comparator produces `MATCH`, `CONFLICT`, `MISSING_LEFT`,
`MISSING_RIGHT` and `UNEVALUABLE` outcomes with typed deltas and SHA-256
evidence chains.
- The CLI provides `compare`, `compare-golden`, `validate` and `feed-consumer`
subcommands.
- The consumer fact feed is integrated with `semcod/todo2code` while preserving
strict separation of factual acquisition from reasoning.
- The comparison contract `autogrammar.data2dsl.comparison` v`0.1.0-dev` is
validated against `wellmanifest/dsl` profiles.
- Docker bootstrap and the deterministic governance gate pass.
- The comparison contract `autogrammar.data2dsl.comparison` v`0.1.0` is stable
and validated against `wellmanifest/dsl` profiles.
- The `Data2DslSkill` agent tool interface conforms to `wellmanifest.skills/v1`
and exposes `data2dsl_compare` and `data2dsl_self_test` for agent discovery.
- Docker bootstrap uses a pinned SHA-256 base image and the deterministic
governance gate passes.
- End-to-end tests cover the golden case (`work-summary.md` vs GitHub), adapter
error handling, and all five comparison outcomes.

Expand Down
77 changes: 52 additions & 25 deletions TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,49 +88,76 @@ Proponowane na podstawie analizy repozytorium i ekosystemu

### Governance housekeeping (workstream: `governance`)

- [ ] **Zamknij ticket-016**: Zweryfikuj integrację na `main`, ustaw
- [x] **Zamknij ticket-016**: Zweryfikuj integrację na `main`, ustaw
`DONE / DONE`. Zregeneruj `project/README.md` (ticket index zatrzymany na
ticket-006).
- [ ] **Zaktualizuj CHANGELOG.md**: Uzupełnij wpisy za Phase 1A–4 z datami
merge'ów PR #6–#16 (aktualnie wymieniony tylko Phase 0 bootstrap).
- [ ] **Zaktualizuj README.md sekcja "Current state"**: Odzwierciedl faktyczny
stan — pełna implementacja golden case, CLI, konsumer feed, testy E2E.
ticket-006). — ticket-017
- [x] **Zaktualizuj CHANGELOG.md**: Uzupełnij wpisy za Phase 1A–4 z datami
merge'ów PR #6–#16 (aktualnie wymieniony tylko Phase 0 bootstrap). — ticket-017
- [x] **Zaktualizuj README.md sekcja "Current state"**: Odzwierciedl faktyczny
stan — pełna implementacja golden case, CLI, konsumer feed, testy E2E. — ticket-017

### Release preparation (workstream: `integration`)

- [ ] **Bump VERSION do `0.1.0`**: Obecne `0.0.0` nie odzwierciedla stanu.
- [x] **Bump VERSION do `0.1.0`**: Obecne `0.0.0` nie odzwierciedla stanu.
Wymaga ticketu w workstreamie `integration` (plik `VERSION` jest owned path
`integration`).
- [ ] **Utwórz `pyproject.toml`**: Zdefiniuj pakiet `data2dsl` z zależnością
`integration`). — ticket-018
- [x] **Utwórz `pyproject.toml`**: Zdefiniuj pakiet `data2dsl` z zależnością
`jsonschema>=4.26.0`. Wymagane przez `integration` workstream
(`manifest.json` → `coordination.integration.requiredForPaths`).
(`manifest.json` → `coordination.integration.requiredForPaths`). — ticket-018

### Contract stabilization (workstream: `application`)

- [ ] **Promuj kontrakt z `experimental` na `stable`**: Przenieś
- [x] **Promuj kontrakt z `experimental` na `stable`**: Przenieś
`autogrammar.data2dsl.comparison` z `0.1.0-dev` do `0.1.0` w
[`dsl-manifest.json`](src/data2dsl_contract_v0/dsl-manifest.json). Wymaga
powiązanego upstream review w `wellmanifest/dsl`.
- [ ] **Pin Docker base image digest**: Zamień `python:3.12-alpine` na
powiązanego upstream review w `wellmanifest/dsl`. — ticket-024
- [x] **Pin Docker base image digest**: Zamień `python:3.12-alpine` na
`python:3.12-alpine@sha256:...` w [`Dockerfile`](Dockerfile) (rozwiązuje
potencjalne `GOV-DOCKER-002`).
potencjalne `GOV-DOCKER-002`). — ticket-021

### Phase 5: NLP query builder & multi-source expansion (workstream: `application`)

- [ ] **Zbadaj integrację `semcod/nlp2dsl`**: Oceń rozszerzenie
- [x] **Zbadaj integrację `semcod/nlp2dsl`**: Oceń rozszerzenie
`IntentPipeline` o vocabulary `data2dsl` — generowanie bounded comparison
query z naturalnego pytania. Zapisz ADR-003.
- [ ] **Dodaj adapter `curllm` (browser-backed source)**: Zaprojektuj thin
query z naturalnego pytania. Zapisz ADR-003. — ticket-022
- [x] **Dodaj adapter `curllm` (browser-backed source)**: Zaprojektuj thin
adapter na `semcod/curllm` BQL do akwizycji faktów z przeglądarki jako
trzecie źródło obserwacji.
- [ ] **Zbadaj integrację `wellmanifest/skills`**: Oceń publikację `data2dsl`
trzecie źródło obserwacji. — ticket-019
- [x] **Zbadaj integrację `wellmanifest/skills`**: Oceń publikację `data2dsl`
CLI jako governed agent skill (skill manifest + deterministic error routing).
— ticket-025

### Priorytet na dziś

Wykonaj w kolejności zależności:
1. Zamknij ticket-016 (governance) — odblokowuje inne workstreamy
2. CHANGELOG + README update (governance) — aktualizacja dokumentacji
3. VERSION bump + pyproject.toml (integration) — przygotowanie release
4. Docker digest pin (infrastructure) — compliance
5. Analiza NLP/curllm/skills (application) — research/ADR bez implementacji
Wykonano w kolejności zależności:
1. ~~Zamknij ticket-016 (governance)~~ — ticket-017 ✓
2. ~~CHANGELOG + README update (governance)~~ — ticket-017 ✓
3. ~~VERSION bump + pyproject.toml (integration)~~ — ticket-018 ✓
4. ~~Docker digest pin (infrastructure)~~ — ticket-021 ✓
5. ~~Analiza NLP/curllm/skills (application)~~ — ticket-019, 022, 025 ✓

---

## Zadania na dziś — 2026-08-21

### Governance housekeeping (workstream: `governance`, ticket-029)

- [x] **Zamknij ticket-028**: PR #29 merged (`c0bb0db`), ustaw `DONE / DONE`.
- [ ] **Zaktualizuj TODO.md**: Odznacz zadania z 08-20, dodaj sekcję 08-21.
- [ ] **Napraw README.md**: `0.1.0-dev` → `0.1.0` w sekcji "Current state",
dodaj wzmiankę o adapterze Curllm i agent skill.
- [ ] **Zregeneruj project/README.md**: Rozszerz ticket index z 6 do 29.
- [ ] **Zaktualizuj CHANGELOG.md**: Dodaj wpisy za tickety 017–028.

### Jakość i stack compliance (workstream: `application`)

- [ ] **Dodaj `conftest.py`**: Skonfiguruj `pytest` z automatycznym
`PYTHONPATH=src` bez ręcznego env.
- [ ] **Uruchom stack checks**: `ruff`, `mypy` — baseline raport jakości kodu
wg `.governance/stack-profiles.json`.

### Research (workstream: `integration`)

- [ ] **Research `nlp2dsl` IntentPipeline**: Przeanalizuj mechanizm vocabulary
extension w `semcod/nlp2dsl`, zapisz notatkę w `docs/`.

23 changes: 23 additions & 0 deletions project/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,27 @@ This file indexes governance tickets without taking ownership of
| **ticket-004** | [`README.md`](./ticket-004/README.md) | [`preprompt.md`](./ticket-004/preprompt.md) | - | [`ai-codex.md`](./ticket-004/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-004/ai-codex-logs.txt) | [`changelog.md`](./ticket-004/changelog.md) |
| **ticket-005** | [`README.md`](./ticket-005/README.md) | [`preprompt.md`](./ticket-005/preprompt.md) | - | [`ai-codex.md`](./ticket-005/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-005/ai-codex-logs.txt) | [`changelog.md`](./ticket-005/changelog.md) |
| **ticket-006** | [`README.md`](./ticket-006/README.md) | [`preprompt.md`](./ticket-006/preprompt.md) | - | [`ai-codex.md`](./ticket-006/ai-codex.md) | [`ai-codex-logs.txt`](./ticket-006/ai-codex-logs.txt) | [`changelog.md`](./ticket-006/changelog.md) |
| **ticket-007** | [`README.md`](./ticket-007/README.md) | [`preprompt.md`](./ticket-007/preprompt.md) | - | [`ai-antigravity.md`](./ticket-007/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-007/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-007/changelog.md) |
| **ticket-008** | [`README.md`](./ticket-008/README.md) | [`preprompt.md`](./ticket-008/preprompt.md) | - | [`ai-antigravity.md`](./ticket-008/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-008/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-008/changelog.md) |
| **ticket-009** | [`README.md`](./ticket-009/README.md) | [`preprompt.md`](./ticket-009/preprompt.md) | - | [`ai-antigravity.md`](./ticket-009/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-009/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-009/changelog.md) |
| **ticket-010** | [`README.md`](./ticket-010/README.md) | [`preprompt.md`](./ticket-010/preprompt.md) | - | [`ai-antigravity.md`](./ticket-010/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-010/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-010/changelog.md) |
| **ticket-011** | [`README.md`](./ticket-011/README.md) | [`preprompt.md`](./ticket-011/preprompt.md) | - | [`ai-antigravity.md`](./ticket-011/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-011/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-011/changelog.md) |
| **ticket-012** | [`README.md`](./ticket-012/README.md) | [`preprompt.md`](./ticket-012/preprompt.md) | - | [`ai-antigravity.md`](./ticket-012/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-012/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-012/changelog.md) |
| **ticket-013** | [`README.md`](./ticket-013/README.md) | [`preprompt.md`](./ticket-013/preprompt.md) | - | [`ai-antigravity.md`](./ticket-013/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-013/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-013/changelog.md) |
| **ticket-014** | [`README.md`](./ticket-014/README.md) | [`preprompt.md`](./ticket-014/preprompt.md) | - | [`ai-antigravity.md`](./ticket-014/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-014/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-014/changelog.md) |
| **ticket-015** | [`README.md`](./ticket-015/README.md) | [`preprompt.md`](./ticket-015/preprompt.md) | - | [`ai-antigravity.md`](./ticket-015/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-015/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-015/changelog.md) |
| **ticket-016** | [`README.md`](./ticket-016/README.md) | [`preprompt.md`](./ticket-016/preprompt.md) | - | [`ai-antigravity.md`](./ticket-016/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-016/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-016/changelog.md) |
| **ticket-017** | [`README.md`](./ticket-017/README.md) | [`preprompt.md`](./ticket-017/preprompt.md) | - | [`ai-antigravity.md`](./ticket-017/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-017/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-017/changelog.md) |
| **ticket-018** | [`README.md`](./ticket-018/README.md) | [`preprompt.md`](./ticket-018/preprompt.md) | - | [`ai-antigravity.md`](./ticket-018/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-018/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-018/changelog.md) |
| **ticket-019** | [`README.md`](./ticket-019/README.md) | [`preprompt.md`](./ticket-019/preprompt.md) | - | [`ai-antigravity.md`](./ticket-019/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-019/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-019/changelog.md) |
| **ticket-020** | [`README.md`](./ticket-020/README.md) | [`preprompt.md`](./ticket-020/preprompt.md) | - | [`ai-antigravity.md`](./ticket-020/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-020/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-020/changelog.md) |
| **ticket-021** | [`README.md`](./ticket-021/README.md) | [`preprompt.md`](./ticket-021/preprompt.md) | - | [`ai-antigravity.md`](./ticket-021/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-021/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-021/changelog.md) |
| **ticket-022** | [`README.md`](./ticket-022/README.md) | [`preprompt.md`](./ticket-022/preprompt.md) | - | [`ai-antigravity.md`](./ticket-022/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-022/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-022/changelog.md) |
| **ticket-023** | [`README.md`](./ticket-023/README.md) | [`preprompt.md`](./ticket-023/preprompt.md) | - | [`ai-antigravity.md`](./ticket-023/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-023/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-023/changelog.md) |
| **ticket-024** | [`README.md`](./ticket-024/README.md) | [`preprompt.md`](./ticket-024/preprompt.md) | - | [`ai-antigravity.md`](./ticket-024/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-024/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-024/changelog.md) |
| **ticket-025** | [`README.md`](./ticket-025/README.md) | [`preprompt.md`](./ticket-025/preprompt.md) | - | [`ai-antigravity.md`](./ticket-025/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-025/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-025/changelog.md) |
| **ticket-026** | [`README.md`](./ticket-026/README.md) | [`preprompt.md`](./ticket-026/preprompt.md) | - | [`ai-antigravity.md`](./ticket-026/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-026/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-026/changelog.md) |
| **ticket-027** | [`README.md`](./ticket-027/README.md) | [`preprompt.md`](./ticket-027/preprompt.md) | - | [`ai-antigravity.md`](./ticket-027/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-027/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-027/changelog.md) |
| **ticket-028** | [`README.md`](./ticket-028/README.md) | [`preprompt.md`](./ticket-028/preprompt.md) | - | [`ai-antigravity.md`](./ticket-028/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-028/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-028/changelog.md) |
| **ticket-029** | [`README.md`](./ticket-029/README.md) | [`preprompt.md`](./ticket-029/preprompt.md) | - | [`ai-antigravity.md`](./ticket-029/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-029/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-029/changelog.md) |
<!-- AUTO:TICKET_INDEX:END -->
1 change: 1 addition & 0 deletions project/TICKETS.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,5 @@ analysis-generated `project/README.md`.
| **ticket-026** | [`README.md`](./ticket-026/README.md) | [`preprompt.md`](./ticket-026/preprompt.md) | - | [`ai-antigravity.md`](./ticket-026/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-026/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-026/changelog.md) |
| **ticket-027** | [`README.md`](./ticket-027/README.md) | [`preprompt.md`](./ticket-027/preprompt.md) | - | [`ai-antigravity.md`](./ticket-027/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-027/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-027/changelog.md) |
| **ticket-028** | [`README.md`](./ticket-028/README.md) | [`preprompt.md`](./ticket-028/preprompt.md) | - | [`ai-antigravity.md`](./ticket-028/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-028/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-028/changelog.md) |
| **ticket-029** | [`README.md`](./ticket-029/README.md) | [`preprompt.md`](./ticket-029/preprompt.md) | - | [`ai-antigravity.md`](./ticket-029/ai-antigravity.md) | [`ai-antigravity-logs.txt`](./ticket-029/ai-antigravity-logs.txt) | [`changelog.md`](./ticket-029/changelog.md) |
<!-- AUTO:TICKET_INDEX:END -->
4 changes: 2 additions & 2 deletions project/ticket-028/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

- **ID**: ticket-028
- **Owner**: unresolved:human
- **Status**: IN_PROGRESS
- **Workflow state**: PUBLICATION
- **Status**: DONE
- **Workflow state**: DONE
- **Created**: 2026-08-20

## Goal and scope
Expand Down
31 changes: 31 additions & 0 deletions project/ticket-029/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Ticket 029: Governance housekeeping: close ticket-028, update TODO, README, CHANGELOG, project index

- **ID**: ticket-029
- **Owner**: unresolved:human
- **Status**: IN_PROGRESS
- **Workflow state**: PUBLICATION
- **Created**: 2026-08-21

## Goal and scope

Governance-only housekeeping: close ticket-028 from integrated evidence on
`main`, fix documentation inconsistencies (TODO.md checkboxes, README.md
version string), regenerate the project ticket index, and update CHANGELOG.md
with entries for tickets 017–028.

No product behavior changes. No source code modifications.

## Acceptance criteria

- [x] AC-01: Ticket-028 status is `DONE / DONE` on `main`.
- [x] AC-02: TODO.md "Zadania na dziś — 2026-08-20" checkboxes are marked `[x]`.
- [x] AC-03: TODO.md has a new section for 2026-08-21.
- [x] AC-04: README.md "Current state" says `0.1.0` (not `0.1.0-dev`), mentions Curllm adapter and agent skill.
- [x] AC-05: project/README.md ticket index covers tickets 001–029.
- [x] AC-06: CHANGELOG.md unreleased section includes entries for tickets 017–028.
- [x] AC-07: The deterministic governance gate passes.

## Participants

- Human participant: unresolved; no user-* file was created by this script.
- Agent participant: [ai-antigravity.md](ai-antigravity.md)
Empty file.
19 changes: 19 additions & 0 deletions project/ticket-029/ai-antigravity.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Agent log: ticket-029

**Agent**: antigravity
**Session**: 2026-08-21
**Authorization**: SESSION_EXECUTION_AUTHORIZATION from user ("pracuj dalej pamietaj o narzedziach i zasadach z wellmanifest")

## Plan

1. Mark ticket-028 as DONE / DONE (already done — PR #29 merged as c0bb0db)
2. Update TODO.md — mark 2026-08-20 tasks as [x], add 2026-08-21 section
3. Fix README.md — `0.1.0-dev` → `0.1.0`, add Curllm and skill mentions
4. Regenerate project/README.md — extend ticket index from 6 to 29
5. Update CHANGELOG.md — add entries for tickets 017–028

## Execution log

- 2026-08-21T10:28: ticket-028 set to DONE / DONE (PR #29 merged as c0bb0db)
- 2026-08-21T10:29: ticket-029 allocated via new-ticket.sh
- 2026-08-21T10:30: Starting governance documentation updates
10 changes: 10 additions & 0 deletions project/ticket-029/changelog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Ticket Changelog (ticket-029)

## [0.1.0] - 2026-08-21

- Initial governance scaffold created.
- Closed ticket-028 (DONE / DONE).
- Updated TODO.md checkboxes and added 2026-08-21 task section.
- Fixed README.md version string and added Curllm/Skill mentions.
- Regenerated project/README.md ticket index (tickets 001-029).
- Updated CHANGELOG.md with tickets 017-028.
Loading