v0.8: docs/LIFE_RUNTIME_STANDARD.md — Part B Topic 4 (5-stage assembly) (#105)#115
Conversation
…y) (#105) Appends a normative Part B to the v0.7 runtime spec, covering: - B.1 Five-stage assembly pipeline (Verify / Resolve / Assemble / Run / Guard) mapped onto the existing v0.7 §2 eight-step load sequence; new D6 fail-close stage gating. - B.2 Provider Registry + LifeCapabilityProvider abstract interface (capability_name / provider_name / provider_version / sandbox_class / initialize / teardown / invoke). - B.3 Tier-aware resolution (uses LIFE_TIER_SPEC.md tier band as SHOULD-level Provider preference; honours capability_binding.tier_floor as warn-threshold). - B.4 Sandboxing classes (D1=C graded sandbox); D2=B forbids bundled_in_life providers in v0.8 (whitelist deferred to v1.0+). - B.5 Hosted-API AND-gate (D3=mixed — both offline and hosted are first-class; binding allow AND user policy allow required). - B.6 OS-package-manager bootstrap (D5=C — `brew install` / `apt install` / `winget install`; .life MUST NOT carry self-extracting bootstrap stubs). - B.7 Four new audit event types: capability_bound, assembly_aborted, withdrawal_check, lifecycle_transition_observed. Part A (v0.7 §1–§11) is unchanged; v0.7 runtimes MAY ignore Part B. Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
| | `withdrawal_check` | Each withdrawal-watcher poll (Stage 5 Guard). | `endpoint`, `result`. | | ||
| | `lifecycle_transition_observed` | Stage 5 Guard observes a `lifecycle_state` transition (`active` → `superseded` / `frozen` / `withdrawn`). | `from_state`, `to_state`, `package_id`. | | ||
|
|
||
| Existing v0.7 events (`session_started`, `turn_emitted`, etc.) are |
There was a problem hiding this comment.
🟡 Part B references non-existent v0.7 event name turn_emitted instead of session_turn
Line 641 in the new Part B text says "Existing v0.7 events (session_started, turn_emitted, etc.) are unchanged." However, the v0.7 audit event table at docs/LIFE_RUNTIME_STANDARD.md:288 defines the event as session_turn, not turn_emitted. There is no turn_emitted event anywhere in the repository. Implementers reading Part B who search for turn_emitted would find no definition, and could mistakenly create a new event type with that name instead of reusing the existing session_turn.
| Existing v0.7 events (`session_started`, `turn_emitted`, etc.) are | |
| Existing v0.7 events (`session_started`, `session_turn`, etc.) are |
Was this helpful? React with 👍 or 👎 to provide feedback.
…777220625-followup-runtime-audit-events fix(.life): runtime spec Part B uses correct v0.7 audit event names (post-#115 review)
Summary
Closes sub-issue #105, the final sub-issue of the v0.8 Asset Architecture epic #106. Lands the per-topic normative spec for Topic 4 — Runtime / Assembly.
This is a doc-only PR. Part B is appended to the v0.7 runtime spec; Part A (the existing eight-step load sequence) is unchanged. There is no JSON Schema in this topic — Topic 4 governs runtime behaviour, not file contents.
What this PR contains
docs/LIFE_RUNTIME_STANDARD.mdPart B: a single new normativesection appended to the existing v0.7 spec, with the following
structure:
/ Run / Guard) mapped onto the existing v0.7 §2.x steps; new
decision D6=fail-close generalises the v0.7 hard-fail rule
across all five stages.
list_providers/resolve/metadataoperations + the abstractLifeCapabilityProviderinterface (
capability_name,provider_name,provider_version,sandbox_class,initialize,teardown,invoke).tier.levelfromdocs/LIFE_TIER_SPEC.md(v0.8: docs/LIFE_TIER_SPEC.md + life-package.schema.json::tier + Schema D appendix #104) as aSHOULD-level Provider preference; honours
capability_binding.tier_floorfrom the binding spec (v0.8: docs/LIFE_BINDING_SPEC.md + schemas/binding.schema.json + sanity tests #103).built_in/user_installed/bundled_in_life) — encodes D1=C graded sandbox; D2=Brefuses
bundled_in_lifeProviders in v0.8 with a deferredwhitelisting scheme for v1.0+.
hosted are both first-class); both
binding.hosted_api_preferenceAND
policy/hosted_api.jsonmust permit the call.(
brew install dlrs-runtime/apt install/winget install)..lifearchives MUST NOT carry self-extracting bootstrap stubs.capability_bound,assembly_aborted,withdrawal_check,lifecycle_transition_observed.(specific sandbox tech, Provider distribution registry format,
Provider crypto identity, runtime failover).
CHANGELOG.md: one entry covering the spec update.Decisions encoded
.life-bundled)supported,preferred,minimum_required)Local validation
python tools/batch_validate.py→ 21/21 steps pass (no schema or test changes; pure doc).markdownlint(CI) — verified locally that fenced code blocks and table syntax are clean.Out of scope (deferred to v1.0+)
seccomp).
bundled_in_lifewhitelisting scheme (D2=C).Review & Testing Checklist for Human
Risk: green — pure spec PR; no code, no schema, no tests; only an additive
"Part B" section appended to an existing released spec doc.
v0.7 §-mappingcolumn is correct against the existing §2.1–§2.8.decision codesin Part B §9 match the locked decisions indocs/LIFE_ASSET_ARCHITECTURE.md§6.Notes
This PR closes the last sub-issue of epic #106. After merge, all six v0.8 sub-issues
(#100–#105) ship together with two follow-up patches (#109 fixed a
genesis pattern; #112 fixed a lifecycle pattern; #114 fixed binding
ui_hints _ref pattern). The v0.8 architecture is now spec-complete;
v0.9+ begins runtime implementation.
Link to Devin session: https://app.devin.ai/sessions/ff7322e18fd94887875daa2c1c75f87d
Requested by: @LING71671