Skip to content

Commit ad2b862

Browse files
committed
Fix RF3 readiness and native MCP schema and saga acceptance flows
1 parent 6816ae9 commit ad2b862

17 files changed

Lines changed: 443 additions & 104 deletions

File tree

‎README.md‎

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -342,8 +342,12 @@ source/test-image identity verification, without skips. Later native codec and
342342
captured-envelope criteria now close **KL-007**, with all19 mapped cases passing
343343
in both modes and all33 owned source files bound to the original compiled images.
344344
The newer cross-process ownership and read-cut regressions pass locally; their
345-
original Linux results remain pending. RF3, functional coverage, scale and release qualification remain
346-
open. The [implementation status](docs/implementation/status.json) records each
345+
original Linux results remain pending. Six focused local Docker RF3 flows now
346+
pass through the real SDK and official MCP clients, covering native schema
347+
discovery and autonomous saga timeout/replay. The owned image lifecycle also
348+
passes prepare, verify, cleanup and repeated cleanup. Full Linux RF3,
349+
functional coverage, scale and release qualification remain open. The
350+
[implementation status](docs/implementation/status.json) records each
347351
source and report boundary.
348352

349353
Functional coverage excludes load/comparison runs and admits complete operation

‎docs/ADR/ADR-039-official-mcp-agent-api.md‎

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -309,9 +309,14 @@ and additive capture calls in existing `McpDiscoveryTests`,
309309
joins, builds and executes those unchanged assertion flows through actual Aspire
310310
Docker RF3 and the official C# MCP client, then retains original GitHub artifacts.
311311

312-
Capture only the three exact tool input schemas before the existing assertions:
312+
Capture only the three exact tool input schemas and the exact shortest-path and
313+
partition-query output schemas before the existing assertions:
313314
at most 64 KiB UTF-8 per object, with at most 1 KiB safe name/context/filename/size/
314-
SHA-256 sidecar. Use the existing repository-root helper and unique owned files
315+
SHA-256 sidecar. The current-source R154/R155 output failures require retaining
316+
the two actual `Tool.OutputSchema` objects before any further oracle correction.
317+
Use a fixed output filename marker and exact official SDK capture source;
318+
missing/non-object outputs fail, and all five objects total at most 320 KiB per
319+
capture set. Use the existing repository-root helper and unique owned files
315320
under uploaded `artifacts/qualification/mcp-schema-evidence/`; reject unknown
316321
names, invalid objects, excess size and failed writes. No credential, caller
317322
payload, private catalog, production logger, alternate schema or synthetic
@@ -325,7 +330,8 @@ REQ-GRAPH-010 / AC-GRAPH-009 using original876c run37546085722 input captures an
325330
the unchanged JsonDefaults.Web decoder/exporter. Root freezes and joins the
326331
ClientApi contract; ci_failure_evidence Luna owns only the existing
327332
IntegrationTests GraphIncomingMcpSchemaAssertions,
328-
PartitionQueryMcpSchemaAssertions and McpGraphPathInputSchemaAssertions.
333+
PartitionQueryMcpSchemaAssertions, McpGraphPathInputSchemaAssertions and
334+
McpGraphPathSchemaAssertions.
329335
First review exact integer string/integer, Labels array/null and optional
330336
computed AtomicPartitionId string/null projections against native metadata.
331337
Then correct exact-set oracles, rejecting duplicates/extra types while retaining
@@ -336,7 +342,28 @@ same native exporter options; source review cannot qualify an uncaptured output
336342
execution. Root joins full build/quality review and actual Aspire RF3/Linux
337343
originals. No public API, persistence, topology, dependency or trust change,
338344
compatibility reader or permissive type fallback is introduced. Rollback restores
339-
only prior test oracles; original failed outcomes remain historical failures.
345+
only prior test oracles; original failed outcomes remain historical failures. The original259/884 follow-up
346+
repairs only the open parameters-dictionary observation (omitted additionalProperties
347+
is open, an explicit false remains closed; explicit values must be boolean/object)
348+
and the exact non-nullable string/integer output type set. No labels-input or
349+
public exporter change accompanies this correction.
350+
351+
The current-source R158/R159 native output captures additionally freeze
352+
QueryRow.RedactedFields array/null with string items, computed
353+
PartitionRef.AtomicPartitionId string/null beside four required scalar identity
354+
strings, and GraphPath.Hops string/integer/null. Correct only the matching output
355+
oracles with exact sets and no duplicates, extra types or malformed entries.
356+
Keep all other field, required-member, item, reference-depth, hint and catalog
357+
checks. Root retains the original captures and failures, rebuilds and verifies
358+
the same official SDK/RF3 flows and Linux delivery; capture or source review alone
359+
does not qualify these corrections. No production or dependency change is made.
360+
The R162 discovery flow also exposes the placement helper's old four-property
361+
PartitionRef oracle. Its same native McpSchemaFactory projection requires the
362+
same five-property/four-required-identity contract and exact computed string/null
363+
set. McpPartitionPlacementSchemaAssertions joins the scoped test-only correction;
364+
keep exact integer string/integer sets and strict scalar string/boolean fields.
365+
The actual full discovery case, including placement schemas and all hints, must
366+
pass before this source inference is qualified. The production path is unchanged.
340367

341368
TASK-MCP-NATIVE-FAILURE-CODE maps REQ/AC-CLIENT-006 and AC-MCP-003/005/007 to
342369
the existing official-client success/error flows. Root owns the ClientApi

‎docs/ADR/ADR-074-aspire-owned-test-entry.md‎

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,3 +252,22 @@ flowchart LR
252252
Runner --> Outcome[Original exit and MTP artifacts]
253253
Outcome --> Cleanup[Stop and dispose every owned AppHost]
254254
```
255+
256+
TASK-TEST-LOCAL-STARTED-IMAGE-ORDER refines REQ/AC-TEST-015 without a new
257+
resource or deadline. Root moves the existing native three-node healthy wait
258+
inside ClusterFixture.StartApplicationAsync after App.StartAsync and before
259+
local-image/native-coverage Docker config-ID inspection. Host startup return does
260+
not establish resource creation. Keep the same two-minute startup token, all
261+
image/receipt checks, private profile, public clients and joined partial-start
262+
cleanup. The actual local RF3 SDK/MCP operation is the regression; no source-text
263+
or getter test substitutes for it. Original R151 no-such-container failure remains
264+
a failed startup receipt. Local pass does not qualify Linux delivery.
265+
266+
TASK-TEST-LOCAL-CLEANUP-COMMAND repairs the existing local owned-image container
267+
query under REQ/AC-TEST-015: runDocker owns the executable, so pass only `ps` and
268+
the existing bounded flags. Root owns the one-line local-server-image.mjs fix and
269+
the actual native prepare/verify/cleanup/repeated-absence operation. Preserve all
270+
image/receipt/label/config-ID gates and refusal of any referencing container;
271+
no force/prune or unrelated resource changes. Keep original failed cleanup and
272+
owned diagnostic removal receipts distinct from the corrected canonical flow.
273+
This command repair adds no resource, deadline, dependency or product contract.

‎docs/ADR/ADR-106-partition-owner-movement.md‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,3 +250,9 @@ the existing genuine six-container Linux test remains required. No image/provide
250250
change, bound increase or omitted assertion is required. Rollback changes only
251251
the test expectation and regression; actual Linux RF3 evidence remains required
252252
and unqualified. Root owns strict integration checks and original evidence.
253+
254+
The added controlled BuildAsync model regression is validation evidence only.
255+
Aspire testing resumes the normal AppHost entry point; absence of an explicit
256+
StartAsync call is not a guarantee that resources never start. Joined application
257+
disposal and owned-root cleanup remain mandatory. The real homogeneous image,
258+
six-silo startup, membership and public fail-closed cases still qualify runtime.

‎docs/Features/ClientApi.md‎

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -224,15 +224,21 @@ SetDispatch are explicit parity work, not completed methods.
224224

225225
Canonical map: Client/Server `Features/ClientApi/` transport/adapters та matching IntegrationTests/UnitTests helpers; business operations/tests зберігають owning slice name. CLI — operator/worker entry point; окремий frontend N/A. Shared contracts і host composition мають одного integration owner. Freeze protocol → real parity tests → adapters → rollout/version contract → exact GitHub TUnit/recovery/Docker RF3 evidence. Existing source/test names не виконують planned MCP/agent AC; timeout не означає rollback.
226226

227-
TASK-MCP-NATIVE-SCHEMA-EVIDENCE retains the original official-client input schemas
227+
TASK-MCP-NATIVE-SCHEMA-EVIDENCE retains the original official-client schemas
228228
needed to diagnose AC-MCP-001 / REQ/AC-CLIENT-006. The existing discovery,
229229
incoming-graph and partition-query RF3 cases capture only their exact shortest-path,
230230
incoming-graph and partition-query `Tool.InputSchema` objects before assertions.
231+
The original current-source R154/R155 output assertions also require the exact
232+
shortest-path and partition-query `Tool.OutputSchema` objects. Capture these two
233+
outputs in the same existing helper and call sites before assertions, with a
234+
fixed output filename marker and the exact official SDK output capture source.
231235
Keep every strict type/nullability/required-member/item/hint assertion unchanged.
232236
Each UTF-8 schema is at most 64 KiB; its sidecar is at most 1 KiB and contains
233237
only canonical tool name, official SDK capture source, actual Aspire RF3/node1
234-
context, owned filename, byte count and SHA-256. Three schema payloads total at
235-
most 192 KiB. Unknown tool names, non-object schemas, excess bounds and failed
238+
context, owned filename, byte count and SHA-256. The three inputs and two outputs
239+
total at most 320 KiB per capture set; each object and sidecar retains the existing
240+
independent bound. A missing output fails capture. Unknown tool names, non-object
241+
schemas, excess bounds and failed
236242
writes fail; no credentials, caller data or private inventory is recorded.
237243

238244
ADR-039 freezes the test-only helper
@@ -254,19 +260,46 @@ projection cannot supply authority or replace the four required constructor
254260
identity fields. Their required set and the computed output value remain fixed.
255261

256262
Root owns the contract and joins. ci_failure_evidence Luna owns only
257-
GraphIncomingMcpSchemaAssertions, PartitionQueryMcpSchemaAssertions and
258-
McpGraphPathInputSchemaAssertions in their current IntegrationTests slices.
263+
GraphIncomingMcpSchemaAssertions, PartitionQueryMcpSchemaAssertions,
264+
McpGraphPathInputSchemaAssertions and McpGraphPathSchemaAssertions in their
265+
current IntegrationTests slices.
259266
Compare exact allowed sets, rejecting duplicates and extra types; distinguish
260267
the optional computed metadata field from required identity strings. Preserve
261268
all property/required-member/item/effect-hint/catalog checks and native official
262269
client flows. Native output uses the same unchanged exporter options; review its
263270
current source shape and retain output execution as unqualified until the actual
264-
RF3 flow passes. No production schema, decoder, public contract, dependency or
271+
RF3 flow passes. For the parameters dictionary, omitted
272+
additionalProperties is open under Draft2020-12; explicit false remains rejected.
273+
An explicit value must be a boolean or object schema. The original259/884
274+
output-version stack proves array-versus-scalar disagreement; retain the frozen
275+
exact string/integer output set, with no duplicate, extra or null type. Labels
276+
input remains unchanged. No production schema, decoder, public contract, dependency or
265277
trust change is authorized by this test repair. Root builds, reviews, executes
266278
the real Aspire RF3 SDK flows and retains exact-source Linux original reports.
267279
Rollback removes only the oracle corrections, preserving captured failure
268280
evidence and every mandatory suite. UI/storage changes are N/A.
269281

282+
The current-source R158/R159 official SDK output captures establish the remaining
283+
exact output sets: QueryRow.RedactedFields is array/null with string items;
284+
PartitionRef.AtomicPartitionId is string/null, while its four required identity
285+
strings remain scalar strings; GraphPath.Hops is exactly string/integer/null.
286+
Use those exact sets in the same existing output assertions, rejecting duplicates,
287+
extra types and malformed entries. Keep every field, required-member, item,
288+
reference-depth, catalog and effect-hint assertion. The captured output hashes
289+
are respectively `248fd97e9a3105df3d6376640b9eb82350fffa8fd829de5e55e04bec85970eb2`
290+
and `39c7b94a0a86777a5fb007407da7aa576d4b54f3164f5dce6bf05caf76075cf9`.
291+
Captured failed flows remain failed; actual passing SDK/RF3 and delivered Linux
292+
qualification are required after these precise oracle corrections.
293+
R162 subsequently reached the placement tools and failed their common
294+
PartitionRef property-set oracle. McpSchemaFactory exports their same canonical
295+
PartitionRef through the same native projection and input/output transforms as
296+
the captured graph/query tools. McpPartitionPlacementSchemaAssertions must also
297+
require the exact five properties, keep only the four constructor identities
298+
required, and check computed AtomicPartitionId's exact string/null set. Keep
299+
integer string/integer sets exact and scalar string/boolean fields strict. This
300+
source-bound inference still requires the actual full discovery flow to pass;
301+
no placement operation, schema exporter or authority rule changes.
302+
270303
TASK-MCP-NATIVE-FAILURE-CODE supports REQ/AC-CLIENT-006 and AC-MCP-003/005/007
271304
after the original876c saga-timeout RF3 invocation returned IsError without its
272305
safe classification in the failed assertion. Root freezes and joins; a Luna

‎docs/Features/ClusterRouting/PartitionTransfer.md‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,9 @@ packet; root owns the final join and gates. The added actual KeyLoad AppHost
385385
BuildAsync-only flow rejects one test-owned altered digest without changing any
386386
of the six image annotations, restores that input and verifies the healthy model.
387387
Its controlled immutable model reference is validation input, not registry or
388-
runtime evidence; it never starts containers or fabricates an image receipt.
388+
runtime evidence; it does not explicitly call StartAsync or fabricate an image
389+
receipt. The native testing builder resumes the AppHost entry point, so absence
390+
of that explicit call does not establish that resources never started. The owned
391+
application is disposed and joined before removing its private root.
389392
Retain the existing six-node real-image startup and client flow for Linux
390393
qualification. Rollback removes only this oracle correction and model regression.

‎docs/Features/Messaging/RecurringSaga.md‎

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -181,11 +181,18 @@ For creator/caller policy tests, create future work, revoke the creator before
181181
the real due instant, and prove unchanged state after it. Check caller rejection
182182
while creator remains revoked; restore the caller and then creator before the
183183
positive transition and full projected SDK/MCP inspection. Use a long interval
184-
so the one accepted due occurrence remains exact. For saga expiry, independently
185-
derive the frozen S2 command ID, use the same creator and exact ExpireSaga payload,
186-
and require complete SDK/MCP receipt convergence whether service or public call
187-
commits first. Retain real early Validation, Waiting before deadline, TimedOut
188-
revision2, one timeout ID/message, ACK replay and no second transition.
184+
so the one accepted due occurrence remains exact. For saga expiry, leave the
185+
native service active and do not derive or expose its private command ID. After
186+
the autonomous transition reaches TimedOut revision2, replay the exact previously
187+
admitted Waiting-create command through the other public client and require the
188+
original complete receipt. Then submit an ExpireSaga with a fresh command ID and
189+
the stale expected revision through both SDK and MCP; both must report
190+
RevisionConflict while state remains terminal and the single timeout message
191+
remains unchanged. The coordinator creates a fresh private command ID for each
192+
new dispatch and reuses it only for that dispatch's single uncertainty retry;
193+
lost-ACK remains a separate acceptance case. Retain real early Validation,
194+
Waiting before deadline, TimedOut revision2, one timeout ID/message, ACK replay
195+
and no second transition.
189196
The service is always active; no fake clock, private expiry call, weakened
190197
terminal assertion or expected-response race may stand in for these proofs.
191198
Luna cluster_wave owns only the three existing Messaging RF3 cases and their

‎docs/Features/TestInfrastructure.md‎

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,13 @@ receipt. A dirty working tree is identified by these inputs, never a fabricated
8080
GitHub revision. The config ID is not a registry manifest digest. Before startup,
8181
the child verifies receipt schema/bounds, current input fingerprint, actual image
8282
ID/label and all three modeled tags. After startup it verifies each owned container's
83-
actual image config ID. Missing, oversized or malformed receipts, changed inputs,
83+
actual image config ID. StartAsync schedules resources asynchronously; await the
84+
existing native three-resource healthy readiness within the unchanged two-minute
85+
fixture startup token before inspecting their actual config IDs. Both local-image
86+
and native coverage started-image verification follow that readiness, and all
87+
public SDK/MCP operations remain after verification. Do not treat host StartAsync
88+
return as proof that Docker has created containers or add a separate retry/deadline.
89+
Missing, oversized or malformed receipts, changed inputs,
8490
wrong tags/labels/IDs and conflicting proof selectors fail before database effects.
8591

8692
Build failure prevents runner execution. Every failure/cancellation joins the
@@ -99,6 +105,16 @@ Retain the original development receipt and native test reports. Local results c
99105
qualify delivered-source Linux CI, registry image provenance or website metrics;
100106
the existing GitHub image producer and verifiers remain mandatory and unchanged.
101107

108+
TASK-TEST-LOCAL-CLEANUP-COMMAND refines the same REQ/AC-TEST-015 owner contract.
109+
`local-image-process.mjs` already selects the Docker executable; the owned-image
110+
container query in `local-server-image.mjs` must pass only `ps` and its bounded
111+
arguments, never a second executable token. Root repairs that command after the
112+
actual R149 image's canonical cleanup failed. Verify the full native owned-image
113+
prepare, identity verification, cleanup and repeated-absence cleanup operation.
114+
Keep receipt/label/config-ID checks, zero running or stopped referencing
115+
containers, non-force removal and all original process/reader joins. This local
116+
tooling operation does not qualify database RF3, Linux delivery or coverage.
117+
102118
TASK-TEST-LOCAL-CONTEXT-REALIZATION implements this existing REQ/AC-TEST-015
103119
snapshot and cleanup contract. Root freezes and owns the joins; unpack_atomicity
104120
Luna owns only `scripts/Features/TestInfrastructure/local-image-context.mjs`,

0 commit comments

Comments
 (0)