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
103 changes: 61 additions & 42 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,35 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [9.0.0] - 2026-09-22
## [Unreleased]

### Added

- Optional typed System-1 decisions via A3S Apofasi: Cargo features `apofasi`
(lexical + script router), `apofasi-infer` (Candle checkpoints), and
`apofasi-metal` (Apple Silicon Metal). Host API:
`TypedDecisionEngine` / `TypedDecisionService` / `decide_and_gate` /
`TypedDecisionReceiptV1` / `GatePolicy`, plus Advanced inventory id
`typed_decisions` and `CodeError::TypedDecision`. Empty requests fail closed.
Not enabled by `local-code`, `scientific`, or `full` — hosts must opt in.
Does not add a Use-projected capability kind. When `apofasi` is enabled,
Code refuses to replace planning pre-analysis, because that generation also
returns intent, a goal, a plan, and optimized input. Goal achievement
returns `achieved`, `progress`, and `remaining_criteria`. Both call sites
refuse to skip the generation. Code does not add a keyword classifier and
does not lower `GatePolicy`. At the default gate, Auto makes zero
generations and Escalate makes one; the escalate prompt includes the task
state. Model text stays evidence. The system prompt is unchanged. Other
call sites stay host-owned.
- Typed-decision end-to-end coverage: hermetic host composition
(`compose_host_decision`) proves default-gate Auto with an engine above
`0.7` makes zero generations, and the lexical refund request at that same
gate makes one. Model text stays evidence and the escalate prompt includes
the task state. Ignored Layer C tests pin
`boyue/bailian/deepseek-v4-flash` to declared
`boyue/bailian/deepseek-v4.1-flash` and reject the `bailina` typo.

## [9.0.0] - 2026-09-26

### Changed

Expand All @@ -19,21 +47,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
in-process oneshot or a timer. A missing tool result is run once on resume.
A steer is another `user.message` fact. The tool-round cap is an empty tool
list on the next completion, not a synthetic user message.
- Enterprise GA is not achieved. `fa0a92ca` records Layer C
`LAYER_C_PASS model=boyue/bailian/deepseek-v4-flash` and L6 Actions reports
with `passed: true`. L7 Harbor `TB-QUAL1`, `DM-PROD1`, and `CAR-01`…`CAR-05`
have no close receipt and no product waiver.

## [Unreleased]

### Fixed

- Honor `NO_PROXY` / `no_proxy` on explicit `HTTP(S)_PROXY` clients used by MCP
HTTP transports, OAuth, and model HTTP (`build_reqwest_client`) (#171).
- Python `SessionOptions.verifier_enabled` getter/setter so hosts can opt into
the Core read-only verifier (#163).
- Rolling context compaction mechanically re-pins the original `## Goal` when
the summarizer omits it (#174).

### Added

Expand All @@ -57,29 +70,35 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
`a3s-effect` 0.1.0. Omit the option to keep the legacy `coding_actor` tree.
Permission overlay and completion gate remain Core-owned. Manual:
[META_HARNESS.md](manual/META_HARNESS.md).
- Optional typed System-1 decisions via A3S Apofasi: Cargo features `apofasi`
(lexical + script router), `apofasi-infer` (Candle checkpoints), and
`apofasi-metal` (Apple Silicon Metal). Host API:
`TypedDecisionEngine` / `TypedDecisionService` / `decide_and_gate` /
`TypedDecisionReceiptV1` / `GatePolicy`, plus Advanced inventory id
`typed_decisions` and `CodeError::TypedDecision`. Empty requests fail closed.
Not enabled by `local-code`, `scientific`, or `full` — hosts must opt in.
Does not add a Use-projected capability kind. When `apofasi` is enabled,
Code refuses to replace planning pre-analysis, because that generation also
returns intent, a goal, a plan, and optimized input. Goal achievement
returns `achieved`, `progress`, and `remaining_criteria`. Both call sites
refuse to skip the generation. Code does not add a keyword classifier and
does not lower `GatePolicy`. At the default gate, Auto makes zero
generations and Escalate makes one; the escalate prompt includes the task
state. Model text stays evidence. The system prompt is unchanged. Other
call sites stay host-owned.
- Typed-decision end-to-end coverage: hermetic host composition
(`compose_host_decision`) proves default-gate Auto with an engine above
`0.7` makes zero generations, and the lexical refund request at that same
gate makes one. Model text stays evidence and the escalate prompt includes
the task state. Ignored Layer C tests pin
`boyue/bailian/deepseek-v4-flash` to declared
`boyue/bailian/deepseek-v4.1-flash` and reject the `bailina` typo.
- `DM-PROD1` host qualification harness (`dm-prod1-host` feature,
`core/examples/durable_memory_prod1_host`): Redis `VectorIndex` with
index-revision CAS, fenced `SET NX EX` lease, restart, failover, and drift
measured against a real OpenAI-compatible embedding provider. Not part of any
release profile. Runbook:
[DURABLE_MEMORY_PRODUCTION_QUALIFICATION.md](manual/DURABLE_MEMORY_PRODUCTION_QUALIFICATION.md).

### Fixed

- Honor `NO_PROXY` / `no_proxy` on explicit `HTTP(S)_PROXY` clients used by MCP
HTTP transports, OAuth, and model HTTP (`build_reqwest_client`) (#171).
- Python `SessionOptions.verifier_enabled` getter/setter so hosts can opt into
the Core read-only verifier (#163).
- Rolling context compaction mechanically re-pins the original `## Goal` when
the summarizer omits it (#174).

### Notes

- Channel release, not Enterprise GA. RC `b91462d3`: L0–L6 and L8 pass;
Layer C `LAYER_C_PASS model=boyue/bailian/deepseek-v4-flash`
(includes `test_meta_harness_compose_live_e2e`).
- L7 disposition: `DM-PROD1` closed with a host pack (all seven dimensions,
`HYGIENE_OK`). `TB-QUAL1` is waived by product decision (2026-09-26); only a
diagnostic Harbor trial with a retained native `verifier_result` exists.
`CAR-01`, `CAR-03`, `CAR-04`, and `CAR-05` are out of scope: A3S Cloud, the
only party that could certify them, was retired by product decision
(2026-09-26). The Code-side contracts they describe remain in place. Because
`TB-QUAL1` is waived and CAR is not certified, Enterprise GA is not claimed.
- Apofasi typed decisions stay under `[Unreleased]` and are not in this cut.

## [8.7.0] - 2026-09-21

Expand Down Expand Up @@ -119,9 +138,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Notes

- Full multi-channel cut: crates.io `a3s-code-core`, GitHub Release `v8.7.0`,
npm `@a3s-lab/code`, Python bootstrap / wheels, and Go module tag
`sdk/go/v8.7.0`.
- The `v8.7.0` tag exists, but its release workflow failed CI and nothing was
published: crates.io, npm, and PyPI stayed at 8.6.0 and there is no GitHub
Release. These changes first ship in 9.0.0.


## [8.6.0] - 2026-09-18
Expand Down
63 changes: 53 additions & 10 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

31 changes: 21 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,20 +60,31 @@ Core-owned. See [Meta Harness](manual/META_HARNESS.md).
folding the fact log. Confirmation and questions park until a fact. No
in-process timer approves, denies, or synthesizes an unanswered question.
A loop checkpoint does not choose the next model call.
- **Enterprise GA is not achieved.** `fa0a92ca` has a Layer C pass and archived
L6 Actions reports. L7 still needs a full Harbor `TB-QUAL1` job, a
`DM-PROD1` host report, and `CAR-01`…`CAR-05` receipts. No product waiver
names those gates. Sequenced closure:
- **Meta Harness (9.0.0).** Hosts compose ordered `components: [...]` over the
one fact log: stock `system`, `tools`, `budget`, `compact`, `infer`, plus
registered `host:<id>` mounts. Permission projection and the completion gate
stay Core-owned; a host `CompletionAttestor` supplies digest-bound evidence,
not a bypass. Omit `harness` to keep `coding_actor`. See
[manual/META_HARNESS.md](manual/META_HARNESS.md).
- **Go module path is `sdk/go/v9`.** Update imports from `sdk/go/v8`.
- **Release status.** 9.0.0 is a channel release, not Enterprise GA. RC
`b91462d3` passes L0–L6, L8, and Layer C with bailian Flash. `DM-PROD1` is
closed with a host pack. `TB-QUAL1` is waived by product decision and CAR
is out of scope since A3S Cloud was retired, which rules out the Enterprise
GA claim. See
[manual/V9_0_0_COMPLETION_ROADMAP.md](manual/V9_0_0_COMPLETION_ROADMAP.md).
Prefer **9.0.0** on npm/crates.io/PyPI.

## What's new in 8.7

8.7.0 was tagged but never published; its changes first ship in 9.0.0.

- **a3s-vec lexical FTS (8.7.0).** Workspace FTS uses pure-Rust `a3s-vec`
(`a3s_vec_fts_v1`). On-disk `zvec_rust_fts_v1` generations are incompatible
and rebuilt.
- **`web_search` usable rows succeed (8.7.0).** Default cascade is API, then
HTTP/RSS, then headless. Non-empty usable rows are `complete` or `partial`
success (#161). Prefer **8.7.0** on npm/crates.io/PyPI.
success (#161).

### Earlier in 8.6

Expand Down Expand Up @@ -137,8 +148,8 @@ Core-owned. See [Meta Harness](manual/META_HARNESS.md).
includes this fix; crates.io also published **8.5.10**, but that cut's
Release workflow failed musl and did not complete the full Node matrix.

Docs: [a3s-lab.github.io/Code](https://a3s-lab.github.io/Code/) (`v8.7` line;
current package **8.7.0**).
Docs: [a3s-lab.github.io/Code](https://a3s-lab.github.io/Code/) (`v9.0` line;
current package **9.0.0**).

### Earlier lines

Expand All @@ -149,7 +160,7 @@ current package **8.7.0**).
- **8.0+** — run-owned spacetime, generation-exact capabilities, portable
checkpoints, convergent workflows. Full history:
[CHANGELOG.md](CHANGELOG.md). Go module path:
`github.com/A3S-Lab/Code/sdk/go/v8`.
`github.com/A3S-Lab/Code/sdk/go/v9`.

## Start in 60 seconds

Expand Down Expand Up @@ -1390,7 +1401,7 @@ one auditable shared model.
| Rust | [`a3s-code-core`](https://crates.io/crates/a3s-code-core) | Complete runtime API and extension traits |
| Node.js | [`@a3s-lab/code`](https://www.npmjs.com/package/@a3s-lab/code) | Native N-API bindings for async lifecycle, streams, tools, stores, orchestration, MCP, and state graph |
| Python | [`a3s-code`](https://pypi.org/project/a3s-code/) | Native PyO3/bootstrap package with sync and async application APIs |
| Go | [`github.com/A3S-Lab/Code/sdk/go/v8`](sdk/go/README.md) | Pure-Go client with a versioned local bridge for sessions, streams, tools, ephemeral semantic retrieval, runs, verification, and MCP |
| Go | [`github.com/A3S-Lab/Code/sdk/go/v9`](sdk/go/README.md) | Pure-Go client with a versioned local bridge for sessions, streams, tools, ephemeral semantic retrieval, runs, verification, and MCP |

```bash
# Node.js
Expand All @@ -1400,7 +1411,7 @@ npm install @a3s-lab/code
python -m pip install a3s-code

# Go
go get github.com/A3S-Lab/Code/sdk/go/v8
go get github.com/A3S-Lab/Code/sdk/go/v9
```

The Python release workflow in v8.4.0 uses the stable `cp310-abi3` interface,
Expand Down
Loading
Loading