File size: 2,608 Bytes
3dc792e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
---
type: Implementation Plan
title: Laya Implementation Gates
description: Short audited plan for Gates A through F.
tags: [planning, laya, journey-service]
timestamp: 2026-09-27T00:00:00Z
source_files:
  - spec.md
  - src/journey/service.ts
  - src/journey/runner.ts
---

# Laya Implementation Gates

- **Gate A (implemented):** shared in-memory `JourneyService`, authoritative
  `JourneyRunner`, `JourneyAgent`, deterministic scripted/mock agents, safe
  typed decisions, evidence, cancellation boundary, and `JourneyResult v1`.
- **Gate B (remote vertical slice implemented):** backend lifecycle protocol,
  remote SystemOne backend, `LayaAgent`, goal-aware scope, coarse-to-fine
  evidence, deterministic value providers, enriched observations, and a real
  v32b browser action. Embedded and mock Laya backends remain later Gate B work.
- **Gate C:** make `journeytest run` a thin service client while retaining legacy
  authored-file compatibility; add doctor/info and JSON output.
- **Gate D:** expose asynchronous `/api/v1` jobs over the same service, with URL
  policy, bounded queues, artifact safety, and lifecycle tests.
- **Gate E:** mount a Gradio developer surface on the API application and render
  the service's events/results rather than starting another runner.
- **Gate F:** detect Spaces, resolve `auto` to embedded, load/prewarm once,
  health-check Chromium, and serve the composed UI/API on port 7860.

Gate B's required remote vertical slice is real, not mocked. The four-case
contract battery scored 3/4 for both v32b and the currently published cklxx
`v17s`; both missed the synthetic DONE case. Both selected Pricing correctly at
5, 20, and 25 candidates, with coarse-to-fine used at 25. This small comparison
does not establish general benchmark superiority.

The two pre-existing shared-tab timing tests were rerun individually after Gate
B. They remained reproducibly failing: the stress case exceeded its 10-second
timeout; the latest isolated rerun measured queued release at 651 ms against a
250 ms assertion. Gate B and the interface stages did
not modify that shared-session implementation or relax those assertions.

The deployment-hardening stage installed Docker 29.1.3 and started dockerd with
the userspace `vfs` driver, but this container does not grant mount-namespace
capabilities. Both the legacy builder (`unshare: operation not permitted`) and
BuildKit (`bind mount: operation not permitted`) failed before reading the first
Dockerfile instruction. The image therefore still requires validation in a
Docker-capable host; no local container-boot claim is made.