Releases: Christopher-Schulze/reconc
Release list
reconc 0.9.8
reconc v0.9.8
Reconc v0.9.8 is a broad hardening release for the repository, action, runtime,
and release boundaries. It keeps every public schema and policy-lock format
stable while making filesystem mutation, retained state, subprocess control,
MCP enforcement, and public reporting substantially more defensive and less
expensive.
Security and privacy
- Filesystem-sensitive operations now bind reads, writes, removals, recovery,
and ownership changes to validated opened identities. Parent replacement,
escaping symlinks, unsafe hard links, inode-split locks, and stale path
observations fail closed across bootstrap, uninstall, update, audit, JSONL,
command proof, action state, and retention paths. - Public proofs, CI reports, impact reports, adapter diagnostics, and command
summaries redact host paths, user identities, quoted sensitive values, and
unsafe tool data at their output boundaries. Public impact actions no longer
expose composed absolute paths. - Strict YAML and JSON admission rejects ambiguous merge semantics, duplicate
keys, oversized aliases, malformed configurations, and unsafe dynamic
launcher arguments before trusted structures are created. - Runtime executables, policy scripts, bootstrap artifacts, receipts, and
embedded harness packs are rebound to their validated bytes and provenance
immediately before use or publication.
Durable state and transactions
- Atomic publication reports whether bytes were not published, published with
uncertain durability, or durably published. Close, sync, validation, and
cleanup failures can no longer be flattened into success. - Bootstrap and repository-sync staging, rollback, recovery, and removal retain
parent handles and exact before/after identities. Interrupted operations
preserve recoverable state without overwriting foreign or drifted bytes. - Audit, run, action-ledger, session, and general JSONL storage share bounded,
cancellable locking and strict mode validation. Rotation and recovery retain
valid data, prevent lock-inode splits, serialize maintenance safely, and
preserve terminal reasons and incomplete lifecycle evidence. - Action reservations, approvals, checkpoints, and pending correlations now
settle or expire deterministically across cancellation, restart, partial
failure, and concurrent readers.
Action and MCP enforcement
- Action evaluation owns one end-to-end deadline covering normalization, cache
lookup, conditions, selectors, globs, inspection, budgets, traces, and final
publication. Cancellation and deadline expiry win before a decision can be
cached or returned. - Tool selectors, budget selectors, namespaced identities, request envelopes,
progress events, results, and strict audit records receive explicit bounded
validation. Malformed upstream requests are isolated without corrupting the
remaining MCP connection. - Gateway shutdown drains calls and pending approvals in a stable order,
preserves independent cleanup failures, stops progress admission, and never
signals an already reaped Unix process group. - Validated compiled action plans, matcher contexts, and immutable identity
reads are safely reused; concurrent action-state reads no longer serialize
behind unrelated read-only work.
Runtime and agent integrations
- Session evidence, pre-decision state, taint resolution, Stop fingerprints,
completion drift, compaction recovery, and hook liveness remain consistent
across retries, restarts, terminal transitions, and interrupted persistence. - Oh My Pi 18.0.11 is covered by the typed project extension with the generic
session_before_compact/session_compactlifecycle, exact approval events,
host-controlled extension loading, and one independently shutdown-safe hook
worker per extension binding. - Generated adapters fail closed on truncated output, sanitize diagnostics,
construct MCP envelopes consistently, and retry hook-worker requests without
duplicating committed effects. - Kimi managed blocks are parsed structurally, mixed hook configuration keeps
unrelated ownership intact, and partial wrapper installation is reported as
partial instead of healthy. - TUI width is measured in terminal cells, preserving CJK, combining, emoji,
keycap, flag, variation-selector, and ZWJ clusters without corrupt output.
Performance and bounded work
- Runtime plans cache immutable command expectations and validated action
programs. Evaluations reuse matcher contexts, short-circuit conditions,
precompiled inspection programs, source-freshness snapshots, Git state,
executable verification, and Stop inputs. - Canonical serialization, lockfile encoding, action traces, session identity,
glob expansion, and evidence normalization avoid redundant allocations and
full-input passes. - Run-log following decodes only validated appended suffixes; artifact and
executable verification stream bounded inputs; subprocess output uses shared
retained-prefix capture; impact filesystem snapshots and Grok continuation
prompts have explicit work and memory ceilings.
Platform and release reliability
- Windows private state applies and validates current-user-only DACLs through
opened handles, preserves write-through replacement semantics, and verifies
bootstrap modes through native contracts. The final native Windows suite and
installer failure paths remain release-blocking. - Offline hook verification is hermetic, self-host fixtures stay synchronized
with current runtime contracts, and generated harness assets remain bound to
the embedded pack. - CI, release publication, and CodeQL diagnostics preserve complete blocking
findings under bounded output and avoid leaking hosted-runner paths.
Compatibility
- The product version advances to
0.9.8without a policy-lock format or
public JSON-contract change. - Format-6 locks continue to use the immutable
reconc-v0.9.7/schemas/v6/policy-lock.schema.jsonidentity. Formats 1 through
5 and every other registered schema retain their exact published URLs,
bytes, aliases, and migration behavior. - Existing policy locks, repository installation receipts, runtime adapters,
and direct installations require no manual data migration.
Verification
The protected release workflow validates the exact tag with native macOS,
Linux, and Windows tests; root and portable-template race suites; Vet,
Staticcheck, Govulncheck, CodeQL, publication audit, release trust, self-hosting,
the pinned external LangChain MCP proof, five release targets, strict manifests,
checksums, deterministic SBOMs and notices, and GitHub build-provenance
attestations.
Upgrade
Use the existing installation owner after publication:
reconc update
reconc doctor --globalNo repository lockfile refresh is required for this release.
reconc 0.9.7
reconc v0.9.7
Reconc v0.9.7 keeps the format-6 policy-lock representation and migration
chain stable while publishing the rule-kind field matrix under a new schema
identity.
Schema and compatibility
- The release publishes Format 6 as
https://raw.githubusercontent.com/Christopher-Schulze/reconc/reconc-v0.9.7/schemas/v6/policy-lock.schema.json. - The schema rejects rule fields that are unsupported by the declared rule kind
before runtime evaluation. - Existing format-6 locks naming the v0.9.6 schema remain accepted through an
input-only compatibility alias; refreshing a lock emits the v0.9.7 identity. - Formats 1 through 5 retain their exact previously published schema URLs and
migration behavior. No format-version migration is required. - Unchanged public schema contracts remain byte-identical at their existing
immutable v0.9.6 identities.
Go 1.27 toolchain and implementation
- The root module and portable harness build with stable Go 1.27. Native macOS
builds consequently require macOS 13 Ventura or later. - Strict action-value and lockfile decoding use Go 1.27's stable
encoding/json/jsontexttoken API while retaining Reconc's duplicate-key,
Unicode, depth, cardinality, decimal, trailing-input, and error contracts. - Canonical action values append into one capacity-hinted output buffer while
preserving identity-bearing legacy escaping. Targeted in-memory concurrency
tests usetesting/synctest, and MCP shutdown regression coverage queries the
exactgoroutineleakworker stack without treating unrelated goroutines as
product leaks.
Transaction and filesystem reliability
- Native installers now require GitHub build-provenance verification against
the fixed repository, release workflow, source tag, hosted-runner identity,
and candidate bytes. Non-zero candidate installation exits can no longer be
reported as success, and repository release assets publish create-only. - Transactional JSONL publication recovers interrupted commits and preserves a
private on-disk layout for audit evidence. - Atomic state, lock, bootstrap, and audit publication verifies parent and open
file identities rather than trusting path names across filesystem races. - Windows private state persists and verifies protected current-user-only DACLs
through the supported named-security contract after descriptor identity
binding. Readonly drift is repaired relative to the bound parent with Go
1.27os.Root.Chmod. Unsupported directory-handle
flushes no longer turn a successful publication into an access denial;
payload sync remains, replacement paths retain write-through behavior, and
Go toolchain notices resolve setup-go junction identity before strict license
reads. A focused native Windows preflight runs immediately after module
download, before Node/Bun setup and the complete native suite. - Production file-lock acquisition is bounded, cancellation-aware, and backed
by a lifecycle-managed same-process gate without changing the authoritative
cross-process deadline. - Binary update and rollback temporaries use owner-only Unix permissions or a
protected current-user-only Windows DACL without changing the executable
directory. Windows mode tests assert only the representable readonly
attribute, and identity-race coverage accepts an operating-system refusal to
replace an opened object as a safe outcome. - Policy sources and TASK files are read through stable file identities, with
path components revalidated across multi-read operations. - Hook workers fail closed on oversized frames, fall back safely, and restart
after crashes or canceled requests without retaining a failed process.
Compiler and policy-ingest correctness
- One locked policy-source snapshot, discovery context, configuration parse,
provenance computation, and normalized rule representation now flow through
compilation without redundant whole-input work. - Policy-source precedence is canonical and reported truthfully across
repository instructions, policy files, and generated inputs. - Glob expansion, inline-policy extraction, parser cardinality, source text,
and template variables are bounded before materialization or retention. - Unsupported rule fields and invalid template-variable grammar are rejected at
their owning boundaries. - Strict lockfile loading preserves duplicate-key, Unicode, depth, number,
root-shape, trailing-data, migration, freshness, and digest checks while
caching validated typed rule and action parts for downstream compilation.
Runtime performance and bounded work
- Runtime path and template matchers plus expected shell invocations are
precompiled; command evidence and stable evidence-file snapshots are
normalized or memoized once per evaluation. - Runtime-plan cache hits revalidate policy-source freshness before reuse.
- Prospective path identities and write-epoch normalization are batched, while
require-script preparation, evidence matching, package-manager ancestry, and
action argument sizing avoid repeated work. - Stop evaluation reuses one bounded lockfile scan and explicit before/after
source snapshots while retaining mutation detection and fail-closed cache
eligibility. - Immutable action plans and action context roots are validated once and reused
safely within an evaluation. - Runtime evidence deduplication and inline-policy extraction use bounded linear
algorithms. Worker response frames use bounded geometric growth instead of
repeated prefix copies. - Context-size accounting is bounded and overflow-safe. Harness-pack payload
limits are enforced before values are retained. - Release and installer tests bind both Reconc state and the fallback user home
to temporary roots, preventing verification from changing a real installation
receipt. Same-version update coverage applies and verifies replacement bytes,
not only discovery. A barereconc updatereturns an exact-version
installation to the default stable channel, while leaving preview still
requires explicit intent. - The downloadable Zsh completion is named
reconc.zsh; the release producer
validates its complete manifest with the same filename contract used by
existing updater binaries before publication.
Evidence, review, and privacy hardening
- Action deltas distinguish warned from blocked operations, and assurance-file
reads expose one stable bounded snapshot. - Extracted rule identifiers are collision-resistant, and proof bundles expose
only sanitized executable identities; command hashes do not encode raw
arguments or complete command lines. - Lockfile diffs deterministically report semantic, provenance, generated,
unsupported, envelope, source-inventory, and rule-provenance changes,
including review-relevant generated-only changes. - Generated harness and publication artifacts remain derived from their
canonical sources. - Runtime diagnostics canonically quote untrusted policy identities, and
evidence-result capacity arithmetic avoids overflowing additions. Fresh
CodeQL reports no open findings for these paths.
Verification
The release is validated by strict-decoder differential and fuzz coverage,
runtime and worker contract tests, race tests, static analysis, schema and
publication audits, harness-pack verification, self-hosting, release trust,
the pinned external LangChain interoperability proof, vulnerability scans, and
the complete five-target release build. Remote schema and release-asset HTTP
checks run in the protected, tag-bound release workflow.
Upgrade
Use the existing installation owner:
reconc update
reconc doctor --globalRepositories with an existing format-6 lock do not need a migration. Run
reconc refresh . when intentionally rewriting the lock with the v0.9.7
schema identity and review the policy source and lockfile together.
reconc 0.9.6
reconc v0.9.6
Reconc v0.9.6 restores immutable public-schema truth and introduces the first
Go-only Action Plane layer. It compiles strict action authoring into one
canonical format-6 policy lock while making every emitted schema identity,
retained compatibility input, release asset, and publication check derive from
one exact registry.
Added
- A typed per-artifact registry for all current and legacy JSON Schema
contracts, including immutable default URLs, local and release paths,
introduction tags, SHA-256 digests, enterprise mirror paths, supported
formats, state, and input-only aliases. - Independent offline Draft 2020-12 compilation for every registered schema,
representative validation for every current and legacy artifact, and
end-to-end validation of every legacy policy-lock migration. - Release-time online verification that every published canonical schema URL
returns HTTP 200 without redirects and is byte-identical to the registered
local file. - Strict
actions.tools,actions.rules, andactions.defaultsauthoring with
typed selectors, effects, phases, conditions, decisions, failure/cache policy,
provenance, deterministic normalization, and frozen resource bounds. reconc why actionfor redacted explanation of canonical action policy,
defaults, provenance, selectors, and legacy lowering.- Strict
actions.ledgerauthoring with required, best-effort, or disabled
recording, bounded selected fields, and declaration, exact, or keyed tool
identity. - A separate private format-1 Action Ledger with nine payload-free lifecycle
events, domain-separated selected-field identities, atomic multi-process
append, bounded rotation, crash recovery, archive continuity, and detached
chain-head verification. reconc action log tail|stats|verify|exportfor deterministic verified
lifecycle inspection and privacy-bounded minimized Impact Lab export. Missing
state is read-only empty; corruption fails; export omissions and replay gaps
remain explicit; output is private and create-only.reconc mcp gatewayas a Go-only, tools-only stdio enforcement boundary
around one operator-selected downstream MCP server. Routed calls receive
strict tool-contract validation, policy and executable identity resampling,
cumulative budgets, signed one-time approvals, required lifecycle recording,
inspected progress and results, bounded stderr diagnostics, and owned child
process-tree shutdown.- Current MCP
2026-07-28and legacy2025-11-25tool-call interoperability
through the pinned official Go MCP SDKv1.7.0, including signed current
input-required and legacy form-elicitation approvals, with direct/native tool
bypasses and unsupported capabilities kept explicit.
Changed
- Current policy authoring uses v4, repository-sync plan/report and
custom-runtime manifests use v2. Restored legacy inputs remain readable; a legacy
custom-runtime route must still budget enough bytes for the current canonical
response metadata, while v2 makes the safe 512-byte minimum explicit. - Current Action Ledger events use schema v2 for gateway approval and delivery
semantics; the published v1 schema remains byte-identical and registered as
a legacy contract. - Release copying, verification, checksums, manifest, SBOM, provenance, project
license, and exact third-party notices consume their canonical inventories
instead of maintaining parallel release lists. - Custom-runtime manifest v2 requires a response budget large enough to hold
the canonical neutral-response metadata introduced by release-pinned schema
identities. - Policy-lock format 6 stores one canonical
actionsplan. Legacymcp
authoring lowers into it, existing host MCP consumers derive their
compatibility view from it, and no parallel runtimemcpplan remains. - The Go-only MCP gateway is now presented as the primary LangChain boundary,
and release publication is blocked by the pinned official LangChain client
interoperability test.
Fixed
- Native Windows state validation accepts Windows-normalized multi-ACE DACLs
only when their complete effective and inherited access remains owner-only
and full. Action-ledger live files, archives, locks, journals, and recovery
backups now enforce that same private DACL contract instead of relying on
POSIX mode checks. Concurrent active-session publication keeps every pointer read
and replacement under the same lock, and release publication waits for the
exact tag to pass native Windows tests, binary smoke, and installer gates. - Private Action Ledger lock creation now secures and verifies a same-directory
candidate before atomically publishing the final lock path. Concurrent
creators converge on that one protected file, transient directory-snapshot
changes are retried within a strict bound, and existing permission, ACL,
symlink, special-file, or identity drift still fails without repair. - Private project-directory initialization now serializes creation and Windows
DACL publication under the retention lock, so concurrent first-use processes
cannot observe a partially secured directory while existing unsafe state
still fails without repair. - Action Ledger lock acquisition remains context-cancellable and strictly
bounded while allowing valid serialized writers enough time to complete
under observed native Windows contention. - Schema files no longer claim mutable, missing-tag, or unreachable canonical
locations. Historical identities remain explicit compatibility aliases and
are never emitted as verified publication URLs. - Semantic additions are no longer retroactively attributed to v1 policy,
repository-sync, or custom-runtime contracts. - Policy-lock v2 and v3 use truthful immutable identities, while the legacy v4
file remains byte-identical to its v0.9.4 tag. - RFC 0001 consistently identifies policy-lock format 6, and the RFC index now
states the immutable schema-evolution rule enforced by the registry. - Action globs and regexes are precompiled, strict URL/path/CIDR operands are
canonicalized once, source precedence matches its declared contract, and all
action-plan views are defensive copies. - Action-ledger rotation now journals backup preparation before any primary
mutation, rejects permission drift without repair, preserves existing generic
JSONL modes, and enforces exact approval, budget, and terminal ordering. - Action-ledger denial evidence now matches persisted budget state: it binds the
live reservation, released capacity, and denied-count-only consumption. - Action-ledger selected-field identities now bind repository and declaration
identity, strict phase/source ownership, and explicit unavailable-identity
completeness. Rotation refuses to prune active calls, and verification keeps
evaluated state separate from completeness. - Native-width JSON Pointer indexes, 32-bit budget windows, publication Git
blob reads, and merged policy capacities now enforce explicit allocation and
conversion bounds.
Compatibility
- Current policy locks use format
6and the immutable v0.9.6
schemas/v6/policy-lock.schema.jsonidentity. - Supported legacy schema aliases and policy-lock formats 1 through 5 continue
to migrate offline. Unknown URLs, crossed URL/format pairs, and future
versions fail closed. - Legacy top-level
mcpauthoring remains accepted during this compatibility
window and preserves existing host behavior after canonical lowering. - Core runtime behavior makes no schema-network request. Online retrieval is a
release-publication gate only.
Upgrade
After the immutable release is published:
reconc update
reconc doctor --globalExact native install on macOS or Linux:
curl -fsSL https://raw.githubusercontent.com/Christopher-Schulze/reconc/reconc-v0.9.6/install.sh \
| sh -s -- --version 0.9.6
export PATH="$HOME/.local/bin:$PATH"
reconc doctor --globalFormats 1 through 5 migrate in memory. Run reconc refresh . when you
intentionally want the repository to persist the current format-6 lock and its
canonical action plan; review and commit policy source and lock together.
reconc 0.9.5
reconc v0.9.5
Reconc v0.9.5 is a compatibility-preserving correctness and release-trust
release. It closes the cache, hook-observation, hostile-input, and false-green
gaps found by auditing the post-v0.9.4 source and its published claims. It does
not introduce a policy or schema migration.
Added
- Bounded, source-free Oh My Pi
user_pythonobservations. Hook liveness and
hook statusexpose a saturating count, latest timestamp,
repository-relative working directory, code byte size, and context-exclusion
flag without storing Python source. - A shared bounded subprocess-output boundary for production helpers, with
boundary-specific limits and explicit overflow failure. - Exact parity tests tying command metadata, custom-runtime reservations,
documented hook kinds, portable workflow-audit routes, and scaffold cache
inputs to their canonical registries.
Improved
- Stop report reuse now binds every reachable policy-declared input with the
same evaluator path semantics and supported content, mode, time, and platform
identity used by the decision. Applicable native assurance always evaluates
rather than relying on an incomplete fixed input set. - Completion captures the exact evaluator inputs, dynamic evidence and
freshness targets, staged command proofs, temporal freshness, and native
assurance authority before and after evaluation. - File-backed audit, run-state, bootstrap, release, SBOM, provenance, and
retention readers validate bounded complete snapshots and reject links,
special files, identity changes, and partial over-budget input. - TASK claim and promotion utilities publish transactionally and refuse
clobbering or moving targets. Legacy pruning applies safe defaults and cannot
erase evidence under an empty policy. - The harness pack includes the complete audited portable safety and parity
suite, and the formatting gate covers non-ignored new Go files before they
are added to Git.
Fixed
- Oversized files, over-budget directories, escaping or nested symlinks,
special files, and unstable policy inputs can no longer preserve a reusable
Stop fingerprint through an approximate identity. - Direct or symlinked FIFO inputs no longer block Stop caching or
hook status
on macOS. - OMP
user_pythonmetadata is persisted instead of being validated and then
discarded, and every invoked OMP route is covered by the executable contract. - Release trust now builds the real shipped
releasetarget. Generated assets,
copied assets, target-derived binaries, the manifest, checksums, and verifier
share canonical inventories, so missing, extra, stale, and drifted output
fail for the asserted reason. - Codex guidance consistently states native
SessionEndcleanup, and route
enumeration can no longer drift silently between the registry, CLI,
documentation, custom runtimes, and portable audit. - Captured Git, worker, Grok, offline-hook, publication, SBOM, and TASK-helper
output can no longer grow memory without a boundary or expose partial success
after overflow.
Upgrade
For an existing direct installation:
reconc update
reconc doctor --globalExact native install on macOS or Linux:
curl -fsSL https://raw.githubusercontent.com/Christopher-Schulze/reconc/reconc-v0.9.5/install.sh \
| sh -s -- --version 0.9.5
export PATH="$HOME/.local/bin:$PATH"
reconc doctor --globalExact native install on Windows x64:
$installer = Join-Path $env:TEMP "reconc-install.ps1"
Invoke-WebRequest https://raw.githubusercontent.com/Christopher-Schulze/reconc/reconc-v0.9.5/install.ps1 -OutFile $installer
& $installer -Version 0.9.5
Remove-Item $installer
$env:Path = "$env:LOCALAPPDATA\Programs\Reconc\bin;$env:Path"
reconc doctor --globalA global CLI update does not rewrite repository-owned files. Repositories that
use Oh My Pi must refresh the owned extension to receive the new redacted
Python observation route:
reconc hook install omp . --json
reconc hook status . --jsonCompatibility And Limits
- Policy locks remain format
4. The v0.9.4
schemas/v4/policy-lock.schema.jsonURL remains the immutable canonical
identity; the compatible v1 artifact and older policy-lock schema identities
remain on their original tags. - No policy can decide arbitrary Python source. OMP
user_pythonis
observation-only;user_bashremains the blocking boundary for shell
commands the user types. - Direct installers remain available for macOS amd64/arm64, Linux amd64/arm64,
and Windows amd64. Windows arm64 is not shipped. - Static configuration and offline contract fixtures are not live proof that a
particular host delivered a route. Usereconc hook status . --jsonfor
runtime claims. - Reconc remains a deterministic repository control layer, not an operating
system sandbox against a hostile same-user process.
reconc 0.9.4
reconc v0.9.4
Reconc v0.9.4 moves the policy lockfile to format version 4 and closes the
host-integration gaps found by verifying every supported runtime against its
own published configuration surface. Format 1, 2, and 3 lockfiles migrate
automatically on read, so no repository action is required.
Added
cache_inputsonrequire_scriptrules and onrequire_scriptchecks inside
composite rules. A gate declares the literal repository-relative files its
script reads, and Stop report reuse binds exactly those files. A gate that
declares nothing is never reused and runs on every Stop.- MCP policy on Claude Code and Codex. Both hosts publish MCP calls as
mcp__<server>__<tool>on their generic tool events and accept a matcher for
that namespace, so exact MCP selectors,unclassified: deny, and MCP write
evidence now work there as they already did on Cursor. - Native
SessionEndrouting for Codex and nativeNotificationrouting for
Claude Code. Both events are part of those hosts' configuration surfaces and
were previously reported as unsupported. - Windows executable-shadow reporting across
PATHEXTin the global diagnostic.
Improved
- The MCP platform vocabulary, the two live JSON schemas,
hook status, and
doctor --deepderive from one ordered source, so a supported host cannot be
accepted by one surface and dropped by another. hook statusanddoctor --deepreport strict unclassified MCP deny as
available on every host that has a discriminator, instead of naming Cursor
alone.- Codex
SessionEnddeclares the three-second timeout that host accepts rather
than a value it clamps and warns about. - The Pi contract fixture records package version 0.84.1 and its exact source
revision. That revision widened the blocking tool result withterminate, a
hint the host honors only under batch unanimity; Reconc has no policy mode
that ends a session, so the adapter keeps returning{block, reason}. - Host coverage is stated rather than implied: Claude Code accepts 31 hook
events and Reconc binds the 15 that carry a decision or attributable
evidence; GitHub Copilot names fourteen and Reconc binds twelve.
Fixed
- Rooted-path decisions no longer depend on the operating system that evaluates
them.filepath.IsAbstreats a POSIX root as relative on Windows, so a
declared cache input or a git ref naming/etc/passwdwas refused on Unix and
resolved against the repository on Windows. One helper now rejects every
rooting convention at once, and the policy-file and script resolvers use it. require_scriptcontainment is enforced on the resolved parent directory, so
an intermediate directory symlink can no longer move execution outside the
repository while every path segment stays a plain name.kill_timeout_secvalues that overflowed the raw conversion no longer wrap
into a negative wait delay that disabled SIGKILL escalation.forbid_commandno longer misses escaped or quoted executables such as\rm.- Oversize hook output keeps the real reason and appends the byte-budget notice
instead of replacing the diagnostic. - Composite
require_scriptchecks validate theircache_inputslike top-level
rules do.
Upgrade
For an existing direct installation:
reconc update
reconc doctor --globalExact native install on macOS or Linux:
curl -fsSL https://raw.githubusercontent.com/Christopher-Schulze/reconc/reconc-v0.9.4/install.sh \
| sh -s -- --version 0.9.4
export PATH="$HOME/.local/bin:$PATH"
reconc doctor --globalExact native install on Windows x64:
$installer = Join-Path $env:TEMP "reconc-install.ps1"
Invoke-WebRequest https://raw.githubusercontent.com/Christopher-Schulze/reconc/reconc-v0.9.4/install.ps1 -OutFile $installer
& $installer -Version 0.9.4
Remove-Item $installer
$env:Path = "$env:LOCALAPPDATA\Programs\Reconc\bin;$env:Path"
reconc doctor --globalA global CLI update does not rewrite repository-owned files. Repositories that
installed Claude Code or Codex hooks before this release keep working, and their
installed artifacts report as stale until they are reinstalled:
reconc hook status . --json
reconc hook install claude-code . --json
reconc hook install codex . --jsonCompatibility And Limits
- Format 4 is published as the v0.9.4
schemas/v4/policy-lock.schema.json
identity. The v0.9.1 schema URLs remain the immutable canonical identities for
the compatible v1 artifact schemas and for the v1, v2, and v3 policy-lock
schemas. cache_inputsaccepts literal repository-relative files and directories.
Globs, template variables, escaping paths, and duplicates are refused at
compile time, because binding them would require a directory walk on the Stop
path.- Direct installers remain available for macOS amd64/arm64, Linux amd64/arm64,
and Windows amd64. Windows arm64 is not shipped. - MCP enforcement before execution requires a host that can tell an MCP call
apart from a built-in tool: a dedicated MCP event on Cursor, themcp__
namespace on Claude Code and Codex. OpenCode, Kilo, OMP, Pi, and ZCode enforce
configured identities but report strict unclassified deny as unavailable. - Static configuration and offline contract fixtures are not live proof that a
particular host binary delivered a hook. Usereconc hook status . --jsonfor
runtime claims. - Reconc remains a deterministic repository control layer, not an operating
system sandbox against a hostile same-user process.
reconc 0.9.3
reconc v0.9.3
Reconc v0.9.3 is a compatibility-preserving quality release. It completes the
native ZCode runtime surface, tightens malformed-input handling and strict
outcome coverage, and brings the public documentation and release metadata to
one consistent current state. It does not introduce a policy or schema
migration.
Added
- Native ZCode support through project-local
.zcode/config.jsonintegration.
The generated adapter wires all seven documented events through the
process-executor transport:SessionStart,UserPromptSubmit,PreToolUse,
PermissionRequest,PostToolUse,PostToolUseFailure, andStop. - Regression coverage for duplicate JSON keys, trailing values, non-object
payloads, invalid JSON Pointers, oversized host payloads, MCP envelopes,
strict Stop outcomes, passive events, and lockfile mode integrity. - Current-state migration and installation guidance for the v0.9.3 source and
release line, including explicit ZCode hook installation and restart
behavior.
Improved
- Runtime documentation, command references, generated agent guidance, the
README, issue template, self-hosting diagnostics, installer examples, and
release metadata now agree on v0.9.3 and the thirteen supported coding-agent
runtimes. - Test-depth reporting remains measurement-only review evidence and never blocks
a build or release on a numeric result. - Release provenance fixtures and versioned recovery-path tests now exercise the
v0.9.3 source line instead of stale v0.9.2 examples.
Fixed
- Windows Bun hook timeouts now terminate the complete wrapper process tree,
preventing detached shell descendants from poisoning the next hook event. - Draft release reconciliation now addresses the release by its immutable
GitHub release ID, so draft assets can be replaced and verified before
publication instead of failing on the tag-only API view. - Removed stale current-release references that could direct users to the
superseded v0.9.2 installer while leaving historical v0.9.2 migration and
release notes intact.
Upgrade
For an existing direct installation:
reconc update
reconc doctor --globalExact native install on macOS or Linux:
curl -fsSL https://raw.githubusercontent.com/Christopher-Schulze/reconc/reconc-v0.9.3/install.sh \
| sh -s -- --version 0.9.3
export PATH="$HOME/.local/bin:$PATH"
reconc doctor --globalExact native install on Windows x64:
$installer = Join-Path $env:TEMP "reconc-install.ps1"
Invoke-WebRequest https://raw.githubusercontent.com/Christopher-Schulze/reconc/reconc-v0.9.3/install.ps1 -OutFile $installer
& $installer -Version 0.9.3
Remove-Item $installer
$env:Path = "$env:LOCALAPPDATA\Programs\Reconc\bin;$env:Path"
reconc doctor --globalA global CLI update does not rewrite repository-owned files. Install the ZCode
adapter explicitly where needed and restart ZCode so it snapshots the updated
configuration:
reconc hook install zcode . --json
reconc hook status . --jsonCompatibility And Limits
- The v0.9.1 schema URLs remain the immutable canonical identities for the
compatible v1 artifact schemas and v3 policy-lock schema. - Direct installers remain available for macOS amd64/arm64, Linux amd64/arm64,
and Windows amd64. Windows arm64 is not shipped. - ZCode pre-tool, permission, and synchronous Stop routes can block when the
host provides the required decision boundary. Host timeouts remain
ZCode-owned fail-open behavior, and Stop continuation is capped by ZCode at
three consecutive blocks. - Static configuration and offline contract fixtures are not live proof that a
particular ZCode binary delivered a hook. Usereconc hook status . --json
and bounded host verification for runtime claims. - Reconc remains a deterministic repository control layer, not an operating
system sandbox against a hostile same-user process.
reconc 0.9.2
reconc v0.9.2
Reconc v0.9.2 is a compatibility-preserving patch release that hardens the
public CLI, repository-owned transactions, agent integrations, and release
truth built on v0.9.1. It does not introduce a policy or schema migration.
Added
- Native Oh My Pi support through a project-owned
.omp/extensions/reconc.ts
extension with awaited pre-tool and main-session Stop enforcement, complete
tool outcomes, lifecycle events, compaction, shutdown, and bounded
continuation handling. - Native Pi Coding Agent support through a trust-aware project-owned
.pi/extensions/reconc.tsextension with blocking tool and user-shell
boundaries, lifecycle and result observation, compaction, shutdown, and
bounded settled-state continuation requests. - Kimi Code CLI support through an explicit user-global 16-event TOML hook
integration. The managed block preserves unrelated configuration, discovers
an explicitly configured Reconc repository from the invocation directory,
and otherwise no-ops. - Registry-derived Cursor CLI surface events and exact live-route reporting,
including the officialagentexecutable and thecursor-agent
compatibility alias. reconc sourcesfor body-free effective source provenance.- Nested
reconc helppaths backed by the same authoritative command metadata
used for dispatch, completions, the man page, and command documentation. - Checksum-bound
reconc repo sync resolvestrategies and
reconc repo sync recoverfor reviewed drift and interrupted transactions. - Durable, fail-closed TASK transaction recovery with exact before-image,
destination, journal, and mode validation.
Improved
- OMP and Pi now participate in hook generation, installation, removal, status,
doctor, bootstrap, scaffold sync, host probes, portable harnesses, MCP policy,
release inventory, and the canonical CLI and documentation surfaces. - Generated adapter transports enforce bounded combined output and timeout
contracts across OpenCode, Kilo Code, OMP, and Pi without sequential-drain
deadlocks or platform-dependent process races. - Offline update selection reads regular release metadata through one bounded
path, verifies the exact manifest bytes it decoded, and rejects oversized
checksum metadata. - TASK archive cache Git commands now use the classified 15-second audit runner
instead of unbounded subprocesses. - Repository sync now plans from one hermetic Git snapshot, binds the complete
plan to its digest and preconditions, writes a durable before/after journal
before mutation, and verifies the full result under the repository lock. - Repository sync resolution publishes an ownership receipt, requires a fresh
plan, and never treats receipt or journal deletion as remediation. - Cursor integration separates documented surface events, artifact loading,
exact-route observation, negative enforcement proof, and unsupported host
behavior instead of promoting static configuration into live proof. - Kimi Code installation is deliberately excluded from
init, bootstrap, and
repository scaffold sync because the host configuration is user-global. - CLI operands, help, completion, man-page, and documentation contracts now
derive from one command catalog and reject ambiguous or extra operands. - Policy compilation, migrations, source ingestion, audit JSONL, lock diffs,
templates, retention, and release discovery use stricter bounds and
deterministic identities. - Semantic-version ordering handles arbitrarily large numeric prerelease
identifiers without integer overflow and uses POSIXCcollation in the
native installer.
Fixed
- Stabilized the Windows Bun transport contract while preserving simultaneous
stdout and stderr backpressure coverage, and made the hanging-process timeout
regression deterministic without orphaning a child process. - Completed the documented host and adapter timeout inventory for Cursor and
OMP so the public runtime contract matches the registry and generated assets. - Removed the non-production
reconc demosurface and its private fixture
engine. The project video remains the demonstration path. - Removed misleading legacy and quality command surfaces that duplicated
canonical commands or implied guarantees they did not provide. - TASK mutations now publish all related files as one no-clobber transaction,
retain exact file modes, reject symlink and destination drift, and recover
only from a valid strict journal. - Repository sync no longer evaluates a moving worktree between policy,
ownership, and publication checks. - Cursor
postToolUseFailureis failure evidence only, while
afterShellExecutionremains passive because the host supplies no
authoritative exit status. - Kimi Code crashes, timeouts, non-2 failures, and post-tool payloads without
an authoritative exit status can no longer be represented as enforced
success. - Release inventory, schema-lock integrity, safe names, case-aware path
identity, and retained audit data reject malformed, ambiguous, or
unbounded inputs instead of normalizing them into a pass. - The exhaustive publication audit retains a hard deadline but now has enough
headroom for race-instrumented and resource-constrained CI while scanning
every tracked file and post-boundary history blob. - Windows tests and transactions now model native file-mode, home-directory,
executable-lock, and non-directory path semantics without weakening the
corresponding POSIX ownership and permission checks. - Async continuation tests preserve their accelerated timeout contract while
allowing realistic Windows process-start latency and identify every expected
failure route instead of accepting an aggregate diagnostic count.
Upgrade
For an existing direct installation:
reconc update
reconc doctor --globalExact native install on macOS or Linux:
curl -fsSL https://raw.githubusercontent.com/Christopher-Schulze/reconc/reconc-v0.9.2/install.sh \
| sh -s -- --version 0.9.2
export PATH="$HOME/.local/bin:$PATH"
reconc doctor --globalExact native install on Windows x64:
$installer = Join-Path $env:TEMP "reconc-install.ps1"
Invoke-WebRequest https://raw.githubusercontent.com/Christopher-Schulze/reconc/reconc-v0.9.2/install.ps1 -OutFile $installer
& $installer -Version 0.9.2
Remove-Item $installer
$env:Path = "$env:LOCALAPPDATA\Programs\Reconc\bin;$env:Path"
reconc doctor --globalA global CLI update does not rewrite repository-owned files. Review and apply
repository changes explicitly with reconc repo sync plan, reconc repo sync apply, and reconc repo sync verify. Reinstall a specific agent hook only
when that repository should receive its updated generated adapter.
Compatibility And Limits
- The v0.9.1 schema URLs remain the immutable canonical identities for the
compatible v1 artifact schemas and v3 policy-lock schema. - Direct installers remain available for macOS amd64/arm64, Linux amd64/arm64,
and Windows amd64. Windows arm64 is not shipped. - Kimi Code hooks are user-global and opt-in. Static configuration is not live
enforcement proof, host timeouts fail open, and post-tool output has no
authoritative exit status. - OMP project extensions are discovered from
.omp/extensions; its awaited
pre-tool and main-session Stop boundaries fail closed, while shutdown is
observational. OMP tool events expose no authoritative MCP server identity. - Pi project extensions load from
.pi/extensionsonly after the project is
trusted. Pi has no permission event, MCP discriminator, synchronous Stop
event, post-user-shell event, or continuation delivery acknowledgement;
settled continuation is therefore reported as inferred rather than enforced. - Cursor surfaces do not promise identical hook delivery.
workspaceOpen
proves artifact loading only, and Cursor exposes no generic tool hook for
AskQuestion. - Reconc remains a deterministic repository control layer, not an
operating-system sandbox against a hostile same-user process. - Direct POSIX, direct Windows, and source installation are the only supported
distribution channels in this release.
reconc 0.9.1
reconc v0.9.1
v0.9.1 is the Windows direct-installer reliability patch for the v0.9 CLI
line. It preserves the v0.9.0 policy, repository, ownership, schema, and
embedded harness-pack contracts.
Fixed
- The native PowerShell installer now handles a real HTTPS
Content-Length
header as the numeric value PowerShell exposes instead of calling nullable
members that are unavailable on that value. - Missing headers remain accepted, while negative or over-limit values fail
before writing a destination. - The streamed 2 MiB metadata and 256 MiB binary caps, checksum validation,
GitHub provenance verification, downgrade protection, and atomic
binary-plus-receipt publication remain enforced. - Native Windows CI now exercises the numeric, missing, over-limit, and
negative header paths. The post-publication live-release job verifies the
complete tagged installer over HTTPS.
Install
Exact native install on macOS or Linux:
curl -fsSL https://raw.githubusercontent.com/Christopher-Schulze/reconc/reconc-v0.9.1/install.sh \
| sh -s -- --version 0.9.1
export PATH="$HOME/.local/bin:$PATH"
reconc doctor --globalExact native install on Windows x64:
$installer = Join-Path $env:TEMP "reconc-install.ps1"
Invoke-WebRequest https://raw.githubusercontent.com/Christopher-Schulze/reconc/reconc-v0.9.1/install.ps1 -OutFile $installer
& $installer -Version 0.9.1
Remove-Item $installer
$env:Path = "$env:LOCALAPPDATA\Programs\Reconc\bin;$env:Path"
reconc doctor --globalUpgrade
Rerun the immutable v0.9.1 native installer or use the existing source-owned
update path. Then run reconc doctor --global. No repository receipt, policy
lock, hook, schema, or harness-pack migration is required for this patch.
Supported Platforms
| Platform | Direct installer |
|---|---|
| macOS amd64 | yes |
| macOS arm64 | yes |
| Linux amd64 | yes |
| Linux arm64 | yes |
| Windows amd64 | yes |
| Windows arm64 | no |
reconc 0.9.0
reconc v0.9.0
v0.9.0 turns the standalone toolkit into one globally installed,
ownership-aware CLI with transactional repository ownership and upgrade.
Highlights
reconc init .is the canonical non-interactive onboarding command. It
inspects, selects, plans, applies, receipts, and verifies one create-only
transaction.reconc bootstrap .remains a compatibility alias.reconc doctor --globalreports the real installation owner, channel,
binary identity, PATH shadows, receipt health, checksum, target, and
provenance without mutation.reconc update check|applysupports stable, preview, and exact versions for
direct installs and requires explicit downgrade intent.reconc uninstallremoves only verified installation-owned global state.
Repository policy, hooks, TASKs, docs, and evidence remain separate.reconc repo sync plan|apply|verifyupgrades repository-owned Reconc files
from the portable receipt. Plans are digest-bound, stale-state checked,
drift-blocking, rollback-capable, and offline.- The binary embeds the immutable
advanced@1.0.0public harness pack.
Initialization and sync no longer depend on a copied source checkout. - Direct installers support stable, preview, and exact selection, preserve the
selected channel in the receipt, bound downloads, verify checksums and
release provenance, reject silent downgrades, and never edit shell profiles.
Install
Exact native install on macOS or Linux:
curl -fsSL https://raw.githubusercontent.com/Christopher-Schulze/reconc/reconc-v0.9.0/install.sh \
| sh -s -- --version 0.9.0
export PATH="$HOME/.local/bin:$PATH"
reconc doctor --globalExact native install on Windows x64:
$installer = Join-Path $env:TEMP "reconc-install.ps1"
Invoke-WebRequest https://raw.githubusercontent.com/Christopher-Schulze/reconc/reconc-v0.9.0/install.ps1 -OutFile $installer
& $installer -Version 0.9.0
Remove-Item $installer
$env:Path = "$env:LOCALAPPDATA\Programs\Reconc\bin;$env:Path"
reconc doctor --globalUpgrade From v0.8.8
- Use the exact v0.9.0 native installer for direct installations or a
path-qualified v0.9.0install-clifor source builds. - Run
reconc doctor --global. Resolve any PATH shadow before repository
mutation. - Plan the repository upgrade with
reconc repo sync plan . --output /tmp/reconc-v0.9-sync.json. - Review every action, then apply the exact emitted digest with
reconc repo sync apply --plan /tmp/reconc-v0.9-sync.json --digest SHA256. - Run
reconc repo sync verify .,reconc status ., and
reconc hook status . --json.
Legacy private bootstrap receipts are accepted only as bounded migration
evidence. They do not grant ownership of user-edited policy, instructions,
docs, TASKs, or unrelated files. Drift and orphaned legacy paths stop before
mutation and receive explicit review actions.
Compatibility And Breaking Boundaries
- The old positional installer version remains accepted, but stable is now the
default channel when no selector is supplied. - Exact downgrades now require
--allow-downgradeon POSIX,
-AllowDowngradeon PowerShell, or the equivalent CLI update flag. - A direct or source install becomes globally owned only after the installed
binary is the exact barereconcPATH identity. An off-PATH binary is not
falsely receipted. init --forceis rejected. Managed-block acceptance remains explicit and
whole-file drift is never overwritten.
Release Trust
The release contains five native binaries, both native installers,
Bash/Zsh/Fish completions, the generated man page, all public schemas, the
advanced harness pack, deterministic SPDX 2.3 and CycloneDX 1.6 SBOMs,
release-manifest.json, and SHA256SUMS.
Every checksummed artifact is tied to the protected tag by GitHub build
provenance. The release workflow stays manual-only and draft-first, verifies
the complete inventory before publication, and rejects stale generated
surfaces.
Supported Platforms
| Platform | Direct installer |
|---|---|
| macOS amd64 | yes |
| macOS arm64 | yes |
| Linux amd64 | yes |
| Linux arm64 | yes |
| Windows amd64 | yes |
| Windows arm64 | no |
Known Limits
- Windows arm64 has no native v0.9 artifact and is rejected explicitly.
- Generated shell hook wrappers and shell policy scripts on Windows require
sh; Git for Windows provides the supported path. - GitHub attestation verification is optional when
ghis absent unless
RECONC_REQUIRE_ATTESTATION=1is set. - Reconc is not an operating-system sandbox. A hostile same-user process still
requires an external sandbox and protected remote CI. - There is no background updater, daemon, telemetry, shell-profile mutation,
implicit privilege elevation, or mutable-maininstaller path.
reconc 0.8.8
reconc v0.8.8
v0.8.8 is the final v0.8.x patch baseline before the separately planned
v0.9.0 CLI productization. It publishes the complete standalone line since
v0.8.7: lossless bounded-evidence continuity, explicit taint recovery,
reachable lockfile repair, a stable user CLI installation contract, stronger
cross-platform behavior, and materially higher test coverage.
Evidence continuity and termination
- Long agent sessions now seal complete raw evidence into bounded,
SHA-256-linked segments instead of truncating the evidence window. Every
policy, claim, CI, Stop, and completion consumer verifies and replays the
complete chain plus live evidence. - Full-chain replay deduplicates evidence in linear time and validates
multi-segment links, so rotation stays operational under sustained command
load without turning summaries into synthetic proof. - Evidence that cannot fit an empty segment, segment exhaustion, storage
failure, or chain corruption creates a durable project-scoped taint with the
exact field and limit cause. Successor sessions inherit it, material actions
remain blocked, and no certified policy or completion pass is possible. - With repository run disabled, a tainted session may terminate only as
explicitly uncertified. Run-enabled Stop remains blocked. Recovery requires
reconc hook evidence-statusfollowed by token-bound
reconc hook evidence-resolvewith an operator reason. - Session-state readers and the shared active-session pointer now use explicit
cross-process serialization, including native Windows sharing semantics and
one-way lock ordering.
Policy and workflow recovery
- Stale-lockfile blocks admit only a fully parsed
reconc refreshor
reconc compileinvocation while all other gated work remains blocked.
Compound commands, pipes, dynamic executables, and unrelated chained work
cannot inherit the repair exemption. - Shell-analysis failures now report the exact bounded cause and concrete
remediation instead of one generic refusal. - Repository cleanliness scans use a dedicated classified timeout, and
publication root identity uses the operating system's canonical filesystem
identity instead of case-sensitive string equality. - Portable workflow audits distinguish unreferenced TASK details from arbitrary
Markdown in reserved TASK directories and keep remediation explicit.
Stable user CLI and bootstrap
reconc install-cliatomically installs the exact running executable into
the stable user command location, rejects unsafe targets, verifies the
installed checksum and executable mode, and proves barereconcresolves to
that build.- Mutating compatibility and transactional bootstrap establish the same user
CLI contract before repository writes. Bootstrap verification checks it
again, and both native installers emit exact PATH remediation when the
installed command is missing or shadowed. - Run-control guidance now uses the canonical repository-root form
reconc run on|status|off, so users and agents no longer need versioned or
repository-local binary paths for routine operation.
Coverage and portability
- Whole-module coverage is now enforced for both Go modules. The release
baseline measures 84.4824% for the standalone module and 85.0377% for the
portable template, with permanent non-regression floors of 84% and 85%. - Strict behavioral tests add positive, negative, malformed, boundary,
concurrency, rollback, parser, CLI, bootstrap, runtime, audit, and
publication coverage without exclusions or denominator tricks. - Windows-native regressions cover user-CLI cleanup, PATH guidance, TASK
reference normalization, concurrent session state, and installer behavior.
Canonical-path and template tests remain platform-neutral on macOS, Linux,
and Windows.
Install
macOS or Linux:
curl -fsSL https://raw.githubusercontent.com/Christopher-Schulze/reconc/reconc-v0.8.8/install.sh \
| sh -s -- 0.8.8
export PATH="$HOME/.local/bin:$PATH"
reconc demoWindows x64:
$installer = Join-Path $env:TEMP "reconc-install.ps1"
Invoke-WebRequest https://raw.githubusercontent.com/Christopher-Schulze/reconc/reconc-v0.8.8/install.ps1 -OutFile $installer
& $installer 0.8.8
Remove-Item $installer
$env:Path = "$env:LOCALAPPDATA\Programs\Reconc\bin;$env:Path"
reconc demoSet RECONC_REQUIRE_ATTESTATION=1 to require gh attestation verify. Core
repository control remains one offline Go binary with no Node, Bun, model,
daemon, Docker, or runtime network dependency.
Release artifacts
The release uploads SHA256SUMS plus exactly twenty checksum-bound artifacts:
reconc-0.8.8-darwin-amd64reconc-0.8.8-darwin-arm64reconc-0.8.8-linux-amd64reconc-0.8.8-linux-arm64reconc-0.8.8-windows-amd64.exeinstall.shandinstall.ps1- Bash, Zsh, and Fish completions plus the generated man page
- six immutable v1 schemas plus the current v2 policy-lock schema
- deterministic SPDX 2.3 and CycloneDX 1.6 SBOMs
Every manifest-listed artifact is checksum-verified before upload and covered
by the release workflow's GitHub build-provenance attestation.