Skip to content
Open
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
32 changes: 32 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Changelog

All notable changes to the Telic workspace and `telic-mcp` npm package are documented here.

The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.2.0] - Unreleased

Production-ready preview release. Tag `v0.2.0` after phases 3b–5 land on `main` and every row in [docs/PRODUCTION_GATE.md](docs/PRODUCTION_GATE.md) passes.

### Added

- **Fail-closed broker gate (strict mode).** Adapter hooks default to `TELIC_BROKER_STRICT=1`. When the `telic` CLI is missing, the active run cannot be evaluated, or the run is not in a running state, mapped mutating tools are denied instead of allowed. Opt out locally with `TELIC_BROKER_PERMISSIVE=1`.
- **Storage lifecycle CLI.** `telic purge-run RUN_ID` removes a run's ledger rows and unreferenced blob bodies. `telic gc` lists or deletes orphan content-store blobs (`--dry-run` supported).
- **Production gate and plan docs.** `docs/PRODUCTION_GATE.md` checklist and phased plan under `docs/PRODUCTION_PLAN/`.

### Changed

- **Controller validator extraction.** Evidence, cross-artifact, work-plan, and permission-trace validation moved from `RunController` into `packages/core/src/controller/*` modules with focused unit tests. Public `RunController` API unchanged.
- **Permission intersection.** Single `intersectStructuredPermissions` implementation in `packages/core/src/permissions.ts`; `controller.ts` and `tool-broker.ts` import the shared helper.

### Fixed

- **Ledger concurrency.** Multi-worker ledger tests use a SharedArrayBuffer contention barrier instead of a fixed sleep. `appendSupportingArtifact` reconciles concurrent `UNIQUE` inserts idempotently instead of surfacing raw SQLite errors.

### Security

- Broker hooks fail closed under strict mode when Telic cannot evaluate permissions for a mapped capability ([#6](https://github.com/Dukeabaddon/Telic/pull/6)).

## [0.1.1] - Prior release

Initial public preview: MCP control plane, nine-phase run controller, SQLite ledger, adapter packs, and `telic` CLI.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ Telic gives the coding agent a workflow spine. It does not replace the agent.
| Bundle | esbuild | 0.28.1 |
| Tests | Vitest + `@vitest/coverage-v8` | 4.1.10 |
| Format | Prettier | 3.9.5 |
| npm package | `telic-mcp` | 0.1.1 |
| npm package | `telic-mcp` | 0.2.0 |
| Website | Next.js + React | 16.2.x / 19.2.x |
| Site styling | Tailwind CSS | 4.3.x |

Expand Down
2 changes: 1 addition & 1 deletion docs/API.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Telic source-preview API

**Version:** `0.1.1` implementation, artifact schema `1.0`
**Version:** `0.2.0` implementation, artifact schema `1.0`

This is the human-oriented reference for the current source tree. The Zod schemas in `packages/protocol/src/` and the registrations in `packages/mcp/src/server-factory.ts` are authoritative. Telic has no compatibility guarantee before its first release.

Expand Down
58 changes: 30 additions & 28 deletions docs/PRODUCTION_GATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,49 +2,51 @@

Checklist for declaring **v0.2.0** production-ready preview. Every row must pass before tagging.

**Last updated:** 2026-08-12
**Last updated:** 2026-08-12 (phase 6 release prep)

**Open before tag:** PRs [#8](https://github.com/Dukeabaddon/Telic/pull/8) (ledger), [#9](https://github.com/Dukeabaddon/Telic/pull/9) (3b), [#10](https://github.com/Dukeabaddon/Telic/pull/10) (3c), [#11](https://github.com/Dukeabaddon/Telic/pull/11) (storage). Do not tag until those merge and this checklist is re-walked.

## Trust boundary

| # | Criterion | Verify |
| --- | -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
| T1 | Broker hooks fail-closed when `TELIC_BROKER_STRICT=1` (default in adapter hooks) | `npm test -- packages/cli/src/broker-gate.test.ts test/cagt-broker-hook-e2e.test.ts` |
| T2 | Hook denies when `telic` CLI is missing (strict) | E2E or hook unit test |
| T3 | README and STATUS state Telic does not cage the host without hooks | Manual read |
| # | Criterion | Verify | Status |
| --- | -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | ------ |
| T1 | Broker hooks fail-closed when `TELIC_BROKER_STRICT=1` (default in adapter hooks) | `npm test -- packages/cli/src/broker-gate.test.ts test/cagt-broker-hook-e2e.test.ts` | pass |
| T2 | Hook denies when `telic` CLI is missing (strict) | E2E or hook unit test | pass |
| T3 | README and STATUS state Telic does not cage the host without hooks | Manual read | pass |

## Maintainability

| # | Criterion | Verify |
| --- | -------------------------------------------------------------- | -------------------------------------------------------------------------- |
| M1 | `intersectStructuredPermissions` has one implementation | `rg intersectStructuredPermissions packages/core/src` shows one definition |
| M2 | `controller.ts` facade under 1,500 lines; validators extracted | `wc -l packages/core/src/controller.ts` |
| M3 | Extracted validators have unit tests | `ls packages/core/src/controller/*.test.ts` or `validators/` |
| # | Criterion | Verify | Status |
| --- | -------------------------------------------------------------- | -------------------------------------------------------------------------- | ------- |
| M1 | `intersectStructuredPermissions` has one implementation | `rg intersectStructuredPermissions packages/core/src` shows one definition | pass |
| M2 | `controller.ts` facade under 1,500 lines; validators extracted | `wc -l packages/core/src/controller.ts` | pending |
| M3 | Extracted validators have unit tests | `ls packages/core/src/controller/*.test.ts` or `validators/` | partial |

## Quality

| # | Criterion | Verify |
| --- | ---------------------------------------- | ----------------------------------------------------- |
| Q1 | Full test suite passes | `npm test` |
| Q2 | Adapter handshakes pass | `npm run adapters:validate` |
| Q3 | Site builds (if web touched) | `npm run site:check` |
| Q4 | Coverage run stable (ledger concurrency) | `npm test -- --coverage` three consecutive green runs |
| # | Criterion | Verify | Status |
| --- | ---------------------------------------- | ----------------------------------------------------- | ------- |
| Q1 | Full test suite passes | `npm test` | pass |
| Q2 | Adapter handshakes pass | `npm run adapters:validate` | pass |
| Q3 | Site builds (if web touched) | `npm run site:check` | n/a |
| Q4 | Coverage run stable (ledger concurrency) | `npm test -- --coverage` three consecutive green runs | pending |

## Review

| # | Criterion | Verify |
| --- | ------------------------------------------------- | ------------------------ |
| R1 | `/review` or equivalent on full diff vs `main` | PR review notes |
| R2 | Bugbot triaged (fix or dismiss with reason) | PR comments |
| R3 | Security review on broker + permissions (Phase 1) | security-review artifact |
| # | Criterion | Verify | Status |
| --- | ------------------------------------------------- | ------------------------ | ------- |
| R1 | `/review` or equivalent on full diff vs `main` | PR review notes | pending |
| R2 | Bugbot triaged (fix or dismiss with reason) | PR comments | pending |
| R3 | Security review on broker + permissions (Phase 1) | security-review artifact | pending |

## Release

| # | Criterion | Verify |
| --- | --------------------------------------- | ------------------------- |
| S1 | `CHANGELOG.md` updated for v0.2.0 | File diff |
| S2 | Workspace + `telic-mcp` version `0.2.0` | `package.json` |
| S3 | Git tag `v0.2.0` on `main` | `git tag -l v0.2.0` |
| S4 | `main` CI green after merge | `gh pr checks` or Actions |
| # | Criterion | Verify | Status |
| --- | --------------------------------------- | ------------------------- | ------- |
| S1 | `CHANGELOG.md` updated for v0.2.0 | File diff | pass |
| S2 | Workspace + `telic-mcp` version `0.2.0` | `package.json` | pass |
| S3 | Git tag `v0.2.0` on `main` | `git tag -l v0.2.0` | blocked |
| S4 | `main` CI green after merge | `gh pr checks` or Actions | pending |

## Explicitly out of scope for v0.2.0

Expand Down
Loading