122 lines
7.1 KiB
Markdown
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.
|