From a1160ec0536bd38e6ac464b22d4f76df596ff5b3 Mon Sep 17 00:00:00 2001 From: junixlabs Date: Sat, 12 Sep 2026 01:35:59 +0700 Subject: [PATCH] v0.2: behavior accountable to intent, and to outcome --- CHANGELOG.md | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++ pyproject.toml | 2 +- 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6faee72..6000f7f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,64 @@ # Changelog +## v0.2 — 2026-09-12 + +Behavior becomes accountable in two directions: back to the decision that asked for it, +forward to an outcome capable of contradicting it. Everything here was forced by +measurement — an outside review, then a repository measuring its own mechanism and +finding it hollow. + +### Added + +- **INV-027 OUTCOME-DECLARES-ITS-CHECK** — an Outcome names the Assertion that checks + whether it occurred. `OUTCOME_REFUTED` is an error and takes integrity to INVALID. + This is the only place in the model where reality can contradict it, and therefore + the first machine-produced evidence that a claim is **wrong** rather than stale. +- **INV-028 INTENT-IS-PROVENANCE** — a Flow cites the frozen record that asked for its + behavior. Verified by provenance, never by truth. No new record format: it cites the + ADRs, issues and commit trailers that already exist. +- **§6.4.1 splits INV-018** — *is the running system healthy* stays out of scope + permanently; *did the declared outcome occur* is verification, not monitoring. +- **Symbol-granular decay** — `git log -L` answers which symbol changed, using git's own + per-language funcname heuristics rather than a bound written here. Measured: 145 of + this repository's file-level decay events narrowed to 23; on a peer's TypeScript + repository, 132 narrowed to 39. +- **`observed_symbol`** — a hash of the cited symbol at the moment it was read, so an + observation survives the squash merge that deletes the commit it was made on. +- **`docs/DIRECTION.md`** — the north star and four horizons, each naming the + measurement that would kill it. + +### Changed + +- **`traceos init` reads no source file.** It used to write `repo-files.txt` — 2,758 + paths indexed at step one, which is both a stored derived value (INV-001) and an + invitation to infer a model from the tree. Discovery is progressive: the boundary, + then one flow, then the evidence that flow's claims need. The coverage denominator is + derived from `--repo` when it is needed. +- **The three skills own three jobs** — model from evidence, scope of one change, + resolving contradictions. `traceos init` is named as a bootstrap operation alongside + Implementation and the validator in what is deliberately left out. +- **Narrowing and the ratchet report what they excluded** (INV-025): every reference + narrowing clears, every uncertain assertion behind a count, and why narrowing could + not answer when it could not. + +### Fixed + +- A reference the change touched but did not invalidate is no longer something to + discharge. Before, clearing the gate meant re-observing references that had not + changed — the rubber stamp INV-024 exists to prevent, generated by the gate itself. +- `validate_observation_refs` returned `None` and the whole suite passed, because + `validate()` with a real `Git` was only reachable through the CLI. There is now a test + that runs the validator against a real repository. + +### Known and deliberate + +The mechanism is built, tested and enforced. **The value claim is unproven**: nobody has +run the measurement in ADR-015 — three real incidents, would this have caught any before +they became one — and nobody has measured what it costs to keep a model current (#10). +The coverage ratchet remains unusable as a gate on a repository whose churn is not the +model (#43), and no mechanism here, or in any system compared against it, detects a claim +that is simply wrong (#42, #45). + ## v0.1 — 2026-09-10 First complete semantic baseline for agent-oriented system reasoning. Defines how diff --git a/pyproject.toml b/pyproject.toml index 839cd81..95d2ca6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "traceos" -version = "0.1.0" +version = "0.2.0" description = "A semantic reasoning framework that lets AI agents trace semantic impact before a change and reconcile the model with reality after it" readme = "README.md" license = { file = "LICENSE" }