Files
ARCADIA-Studio/harness/release-language-integration.md

122 lines
7.1 KiB
Markdown

# R1 / R2 / R4 language and API integration — 2026-09-05
Status: these bounded source/API milestones are implemented and verified. This
is not first-release completion; native authoring and remaining R3/R5/R6,
lifecycle, migration and final independent reviews remain required.
## Current contract
- R2: `oa_mission`, Mission traces, include/extend/generalization and mission
involvement have canonical source and OpenAPI counterparts. Conditional
extension preserves its exact condition. The broad fixture covers all 28
element kinds and all 20 current relation kinds (including R1 SequenceLink).
- R1: Control Choice/Merge/Fork/Join/Loop and SequenceReference use typed source;
`sequence @alias` is a real reference field. The OA and SA round-trip fixture
contains work contributions, parallel/alternative paths, an explicit loop,
a reused sequence and guarded contextual links. Recursive reuse and invalid
reference spelling reject atomically.
- R4: scenario viewpoints, every message kind including Timer, call correlation,
carried-field expressions and ScenarioUse bindings have canonical source and
closed OpenAPI payloads. Reference fields are `scenario`, `reply_to`, `field`,
`referenced` and `local`; viewpoint/message-kind enum fields remain readable.
Native parser fixtures cover both strict work viewpoints, call/reply reversal,
create/delete order, timers, values and a reused scenario. No expressions are
evaluated or silently converted to literals.
- `docs/language.rst` now specifies the current R1/R2/R4 constructors, ownership,
topology/message/reuse constraints, traces, compatibility and located lint.
`docs/api.rst` and `docs/openapi.json` expose the matching service contract.
The rendered language/API HTML is regenerated from those reST sources.
## Compatibility is deliberate and testable
Schema 2 remains a temporary integration header. Omitted old Scenario viewpoint
hydrates as MixedLegacy in **both source and JSON**, rather than applying a
new GUI factory's stricter interpretation. Missing Exchange message fields
hydrate as Asynchronous, no reply correlation and no value annotations. The
V1 migration constructor supplies the same explicit defaults.
The original V2 coastal rescue source and JSON are preserved under
`crates/oa-core/tests/fixtures/v2-coastal-rescue.*`. Do not regenerate them from
the new demo. The golden regression compares the exact original JSON against
the upgraded model after removing only the newly added defaults: every other
persistent field remains equal. Original source and JSON produce the same
model; canonical source records explicit compatibility choices and round-trips.
The final distinct release schema and explicit V2 migration are still required
after R5/R6 interfaces freeze. Current serde defaults are staged compatibility,
not evidence of that future adapter. New schema-3 contracts must not silently
inherit these missing-field defaults without an explicit decision.
## Verification actually observed
Target: `D:/CodexBuilds/Capella2-01a06e2e`, Windows Rust 1.98.1.
```
cargo test -p oa-core --locked
cargo test -p oa-server --locked
cargo clippy -p oa-server --all-targets --locked -- -D warnings
```
Current combined core: **83 passed** (15 language, 4 admission/lint, 7
capability, 6 topology, 7 scenario, 15 prior regressions, 28 workflows,
1 process diagnostic). Server: **16 HTTP/configuration tests + 1 deterministic
prepared-commit test passed**. Strict server all-target Clippy passes; the core
dependency is checked as part of that command, while the core owner separately
ran strict all-target core Clippy. Owned Rust files pass Rustfmt. Language/API
reST builds halt on warnings and both completed without warnings.
The actual HTTP suite imports the new mission/branching chain model, edits a
SequenceLink guard, exports equivalent readable source, filters by the new
relation kind and restarts from disk. A separate actual HTTP case imports the
original V2 JSON, rejects a malformed richer source without advancing its
revision, edits a typed call value, retains reply references, exports equivalent
source and reopens the accepted envelope after restart.
TS1 parser/API responsiveness evidence remains in
`harness/release-text-service-audit.md`: exact formerly stalling 638,689-byte
source rejected in 0.050 s; concurrent native/legacy JSON catalog reads and a
valid-candidate/rename race verified on the optimized native server. Those exact
wall times were measured at the R2 checkpoint. The same rejection/concurrency
transport regressions pass after R4; no new throughput guarantee is inferred.
No Computer Use operations were performed by this worker. No probe server or
test process is intentionally left running. Current first-release changes have
not yet had final Linux, container, release-toolchain or independent review
verification; prior V2 platform evidence must remain labeled as prior evidence.
## R5 state/event source and service integration checkpoint
R5 shapes are coordinated with the core worker: nine additional StateKind/Kind
vertices, Event Signal/Time After/At/Change, and StateTransition
`transition_kind`, `triggers`, `effects`. Language uses `oa_`/`sa_` snake-case
declarations, alias references in the new lists and a typed transition-kind
word. The existing generic constructors handle the rest; no separate parser,
event registry or service route was introduced. Core serde/factory defaults
provide staged External/[]/[] compatibility, and the original V2 golden test
now excludes only those added defaults when proving every original field
remains identical. Trigger/guard/effect strings are explicitly compared.
The all-kind parity fixture includes all 38 kinds. A separate OA/SA source test
exercises every new vertex, all Event bodies, every TransitionKind, Unicode
and quoted prose, invalid typed enums/references, and old-field defaults.
OpenAPI now names StateKind, EventBody, TimeEventKind and TransitionKind;
language section 4.4 records the approved state semantics and API documents the
ordinary batch/reference lifecycle. Header remains **temporary schema 2**;
the explicit final schema-3 migration is still required after R6.
Observed at this checkpoint: 16/16 language tests; 17/17 HTTP/configuration
tests plus the deterministic Store unit; strict all-target server Clippy.
The actual HTTP event test imports source, creates an Event and changes its
transition in one batch, reidentifies event/payload UUIDs, retains exact prose,
checks stale ETag 412 and wrong-layer rollback 422, queries Event records,
exports equal source, removes trigger/effect/payload references and verifies
the last removed trigger leaves descriptive intent, then restarts from disk.
A follow-up added a located warning assertion for empty Time expression.
Its rerun intersected the core worker's deliberate state-topology integration:
`lib.rs` declared `state_validation` before the new file was saved, producing
E0583. No source/service workaround was added. Await final core topology freeze,
then rerun language+admission tests, server regression and strict Clippy.
Both reST outputs already render with halt-on-warning enabled; an initial short
section underline warning was fixed and successfully re-rendered.