387 lines
29 KiB
Markdown
387 lines
29 KiB
Markdown
# Foundation phase 2: record and operation contract candidate
|
|
|
|
Status: phase-2 planning baseline accepted by Jason on 2026-09-06 ("accept phase 2"). Not approved for mapping
|
|
or implementation. Owner authorized this phase on 2026-09-06 after confirming
|
|
the behavior summary. Tracking: `mosaicstack/stack-v2#53`.
|
|
|
|
Inputs: [agreed behavior R1-R33](2026-09-06_agent-project-workspace-foundation.md)
|
|
and [decision/interview record](2026-09-06_workspace-schema-and-audit.md).
|
|
This file proposes common types and operation rules. The linked
|
|
[Schema and semantic-rule package](foundation-v1-candidate/README.md) now contains
|
|
checked command/event and eleven-kind record schemas, permission bundles,
|
|
reference/lifecycle/storage rules, hash vectors, and #50 compatibility notes.
|
|
The [runtime contract](foundation-v1-candidate/RUNTIME.md) and runtime schema now
|
|
cover mediated execution/control, requests, messages and artifact bodies after
|
|
Q28 A. The [owner-review package](foundation-v1-candidate/REVIEW.md) reconciles
|
|
D1-D16 and lists unproved implementation gates. None of this is implemented runtime behavior. No new owner requirement is inferred from a technical proposal.
|
|
|
|
## 1. Evidence boundary
|
|
|
|
Repository baseline: `69d1bb3aa4b826218aa4cca3710f2d98c0b9d7ba`.
|
|
The inspected source files have no working-tree difference from that commit.
|
|
Existing runtime image: `mosaic-poc-agent:0.84.4-r0.0.12`, image ID
|
|
`sha256:a72aa79f98e54c3c974f5ad08b82e1643a4aa6eff259ac891b738120ba963ca1`.
|
|
|
|
A tool-free worker examined supplied, line-numbered source excerpts through
|
|
`scripts/run-task.sh`. Task specification:
|
|
[`tasks/foundation-phase2-source-facts.json`](../../tasks/foundation-phase2-source-facts.json).
|
|
Run: `r-20260906T024609Z-68ee7f`, under `<dataRoot>/runs/`.
|
|
`result.json` SHA-256:
|
|
`e81ac68a369a9315d827e6fc7117033f794ab7b214d2610ca07081a668045875`.
|
|
The run reports success, exit 0, no tools or persistent session, and 1490
|
|
whitespace-delimited response words. This is a source-analysis response, not
|
|
an independent review verdict or a runtime test of the proposed controls.
|
|
|
|
Author checks qualify the worker's suggestions:
|
|
|
|
- One supplied excerpt header says `adapters/pi/adapter.sh:65-106`, although
|
|
the file ends at line 96. The supplied numbered text and worker's executable
|
|
citations end at 96. Preserve that input as recorded; no lines 97-106 exist.
|
|
- A recorded stdout response is not a trusted account of arbitrary side effects.
|
|
- The exclusive active-work key must include agent/project/workspace, not a
|
|
session ID that lets two different Fresh sessions evade the same-scope limit.
|
|
- A session transcript grows. Verify identity, supported format, and accepted
|
|
checkpoints; do not mistake its changing content hash for corruption.
|
|
- `--no-extensions` disables discovery, not explicitly supplied `-e` extensions.
|
|
The current adapter supplies no `-e`; future reviewed extensions are possible,
|
|
but their enforcement and failure behavior need investigation.
|
|
- Command receipts and complete internal file/network tracing are different
|
|
guarantees. The worker's suggestions do not settle their required granularity.
|
|
|
|
### 1.1 Pinned Pi documentation
|
|
|
|
Host Pi is 0.85.1. Its documentation was not used as proof of 0.84.4 behavior.
|
|
The author copied the 0.84.4 package's README, package metadata, docs, and
|
|
examples from the existing image using `docker create` and `docker cp`.
|
|
The extraction container was never started and was removed afterward. No
|
|
credentials, runtime sessions, or user-context files were copied. Temporary
|
|
extraction: `/tmp/mosaic-foundation-pi-0844.poVO9d`.
|
|
|
|
To reproduce, create an unstarted container from the exact image ID above and
|
|
copy the named files under
|
|
`/opt/app/node_modules/@earendil-works/pi-coding-agent/`. Do not substitute a
|
|
newly installed host version. The temporary directory is not canonical evidence;
|
|
the image ID, file paths, and hashes identify the documentation used.
|
|
|
|
| Package file | SHA-256 |
|
|
|---|---|
|
|
| `package.json` | `db9fead11bd2ddf7a327d2c2d11b535f30d059241c251d376837d5ab638a5576` |
|
|
| `README.md` | `f2ffe4e825ea457ecb728cabbb15b545655cda2e3bab9b5b1fc28b950a3abd08` |
|
|
| `docs/rpc.md` | `010811d3526435b4fff5b03ee3a40f5bcb47fa17d5034fbd6b598955f56020d7` |
|
|
| `docs/json.md` | `094b8d1b25aebd949334b695b18e8e7e73d934b82337439af12f6936d73aca84` |
|
|
| `docs/session-format.md` | `c0f25475ab08fb96e244e6bf433aeaa41b69bfb5a52de5c7b01b81c900a84a54` |
|
|
| `docs/security.md` | `5df4b27e7b0db49f50807f0e5d8a77e6dc099c76adab6edf21c5b705ede6efab` |
|
|
| `docs/containerization.md` | `29ac379f744052adf301e744559cb43d0e6e84d1b04f4757f1710680991be10b` |
|
|
|
|
README and these five documentation files were read completely. They establish
|
|
documented capabilities and cautions, not measured implementation behavior.
|
|
No SDK, extension, RPC client, or isolation mechanism was implemented or tested.
|
|
|
|
### 1.2 Findings that constrain the contract
|
|
|
|
| Evidence | Supported statement | Design consequence, still proposed |
|
|
|---|---|---|
|
|
| `scripts/agent.sh:132-138`; `adapters/pi/adapter.sh:29-44` | Session default is per agent; nonempty session directory causes `-c`. | Replace latest-file inference with a scoped conversation index and exact session binding. |
|
|
| Pinned README, Session options; `docs/session-format.md:386-438` | Pi documents exact session selection and session-manager APIs. | Mosaic can investigate using an exact validated path; no need to expose partial UUID search to clients. |
|
|
| Pinned `docs/session-format.md:19-27` | Older session formats are automatically migrated when loaded. | Preserve a legacy source before any reviewed adoption/conversion; do not load original historical files merely to inspect them. |
|
|
| `scripts/agent.sh:121-123,181-185`; `src/run-agent.sh:37-41`; `src/load-contracts.sh:40-41,97` | SOUL, mission, and generated prompt locations are shared by agent or data root. | Resolve stable execution-specific inputs and avoid shared temporary-file names. No race reproduction is claimed. |
|
|
| `scripts/agent.sh:144-162`; `scripts/mosaic-task.mjs:364-378` | Interactive path intersects role tools; headless path intersects mission/task tools. | One future authorization resolver must apply all applicable ceilings on both paths. Current checks are not a project/workspace RBAC system. |
|
|
| `compose.yaml:39-43`; pinned `docs/security.md:31-37` | Broad data-root mount; Pi explicitly has no built-in sandbox. | Tool names and working directory cannot establish cross-workspace privacy or evidence protection. |
|
|
| `scripts/mosaic-task.mjs:295-302,408-466` | Exclusive-create snapshots/results and Compose process outcome, not a complete trusted action ledger. | Separate invocation outcome, external effect, acceptance, and confirmed execution termination. |
|
|
| Pinned `docs/rpc.md:43-80,905-911,1012-1060` | Prompt acceptance, settled processing, and tool events are documented and distinct. | Acceptance of an RPC prompt is not task acceptance; events alone are not durable pre-action authorization. |
|
|
| Pinned `docs/rpc.md:124-184,479-550,620-642` | Abort, queue clearing, direct bash, and session switching are separate commands. A session switch can be cancelled while the response says success. | Do not pass arbitrary raw RPC commands through a Mosaic connection. Do not equate abort acknowledgement or idle processing with process death. |
|
|
| `adapters/pi/adapter.sh:81-96` | Mosaic currently runs plain print or native interactive mode, with no explicit extension or RPC invocation. | Documented Pi integration options are not already implemented Mosaic attachment, control-transfer, or audit guarantees. |
|
|
|
|
## 2. Proposed common record types
|
|
|
|
Plain-language rule: an ID names an object, a revision names the exact approved
|
|
copy, and a scope names where it belongs. A display name is only a label.
|
|
These proposed types are shared across records; they are not fields accepted
|
|
by today's task runner.
|
|
|
|
| Type | Exact proposed representation and validation |
|
|
|---|---|
|
|
| `Id` | String matching `^[a-z0-9][a-z0-9._-]{0,63}$`. New runtime IDs use lowercase UUID v4; reject collisions with exclusive allocation. Existing definition IDs require explicit resolution, not a guessed alias. |
|
|
| `Revision` | Integer from 1 through 9007199254740991. A create request expects revision 0 to mean absent; 0 is never a persisted revision. |
|
|
| `UtcTime` | A valid UTC instant encoded as `YYYY-MM-DDTHH:mm:ss.sssZ`. Validate calendar/time values as well as shape. Wall-clock time is not proof of causal order. |
|
|
| `Digest` | String `sha256:` followed by exactly 64 lowercase hexadecimal characters. A digest detects content change; it is not a signature or access grant. |
|
|
| `Scope` | Discriminated object: `{kind:"system"}`, `{kind:"project",projectId:Id}`, or `{kind:"workspace",projectId:Id,workspaceId:Id}`. No omitted or extra fields; workspace ownership must match its project. |
|
|
| `RecordRef` | `{kind:RecordKind,id:Id,scope:Scope,revision:Revision}`. Resolve exactly; a reference never means latest or grants access. `RecordKind` is the closed catalog in section 3. |
|
|
| `ActorRef` | `{kind:"human"|"service"|"agent",principalId:Id,executionId:Id|null}`. An agent requires its authenticated execution ID; human/service actors use null. Producer supplies this from verified invocation context, never from a caller's identity claim. |
|
|
| `FileTarget` | `{workspace:Scope,relativePath:string}` where scope must be workspace kind. Nonempty slash-separated relative path, at most 4096 UTF-8 bytes; reject NUL, control characters, empty components, `.`/`..`, backslashes and absolute paths. Validate filesystem containment and symlinks at use time, not merely through a string prefix check. |
|
|
|
|
Unknown fields/versions fail validation. Required fields cannot be omitted.
|
|
Use explicit null only where the type permits it; an empty list means none,
|
|
not unrestricted. Permissions and source-reference lists contain no duplicates.
|
|
Proposed generic list limit is 1024 items and record size limit is 1 MiB of
|
|
UTF-8 JSON, with detailed evidence stored separately. Limits need workload
|
|
review before becoming an implementation contract. Reject oversize input;
|
|
never silently truncate authority, dependencies, or recovery context.
|
|
|
|
Common envelope for declarative records: `schemaVersion:1`, `kind:RecordKind`,
|
|
`id:Id`, `scope:Scope`, `revision:Revision`, `createdAt:UtcTime`,
|
|
`createdBy:ActorRef`, `supersedes:RecordRef|null`, and `authorizationRef:Id`.
|
|
`authorizationRef` resolves a trusted authorization event, not a recursive grant
|
|
from the record being created. System bootstrap authority resolves to reviewed
|
|
policy and the authenticated owner; no record may authorize its own creation.
|
|
|
|
The first revision has null `supersedes`. Later revisions reference the exact
|
|
previous revision of the same object and immutable owning scope. A mutable
|
|
current index is a rebuildable view, not the authoritative history.
|
|
|
|
## 3. Record catalog and ownership
|
|
|
|
The catalog names proposed types, not approved role or directory additions.
|
|
Fields below supplement the common envelope. Complete per-kind field types,
|
|
conditional requirements, and transition validation are still being drafted.
|
|
There is deliberately no unrestricted `metadata` or `permissions:any` field.
|
|
|
|
| RecordKind | Payload to define | Authorized writer |
|
|
|---|---|---|
|
|
| `agent-definition` | Display name, reusable type, harness reference, canonical SOUL/instruction/skill references, reviewed role ceiling and configuration references. | Reviewed configuration author, not a workspace worker. |
|
|
| `project` | Display name, policy reference and lifecycle. | Authorized project administration. |
|
|
| `workspace` | Display name, parent project via scope, policy reference, lifecycle and logical working-file root. | Authorized workspace administration. |
|
|
| `registration` | Agent ID, scope role reference, narrowing restriction set, active/revoked status and delegation reference. Project and workspace registrations are separate records. | Actor with bounded registration authority. |
|
|
| `mission` | Objective, criteria, lifecycle, optional parent project-mission reference and policy restrictions. Project missions have no workspace parent. | Authorized work owner. |
|
|
| `task` | Purpose, criteria, optional mission reference, approved intent reference, dependencies and lifecycle. An ad-hoc task still needs purpose/criteria and explicit authorization. | Authorized work owner/coordinator. |
|
|
| `assignment` | Exact task reference, agent ID, lifecycle, assigned policy/work revisions and coordinator decision. | Authorized coordinator; progress does not grant assignment authority. |
|
|
| `decision` | Decision kind, approved intent/evidence references, affected records, delegation bounds and decision outcome. | Authorized decision maker. Acceptance checks authorship independence separately. |
|
|
| `session` | Agent ID, immutable project/workspace scope, creation mode, predecessor reference and exact harness identity binding. | Launch resolver; lifecycle observations are separate events. |
|
|
| `context-source` | Content reference, revision/digest, owner, permitted scopes, context category and explicit sharing designation. | Authorized context publisher. Relevance cannot invent a grant. |
|
|
| `adapter-capability` | Adapter/package identity, supported operations, observable and enforceable action classes, tested coverage references and limitations. | Reviewed adapter authority. A worker cannot self-certify coverage. |
|
|
|
|
Execution, active claim, connection, message, context manifest, and audit event
|
|
are runtime evidence types, not mutable declarative records. Their complete
|
|
envelopes remain a dependent drafting task. Do not force them into a common
|
|
mutable `status` record or rewrite a run to update its progress.
|
|
|
|
## 4. Permission resolution
|
|
|
|
Proposed operations are distinct from tool names. A `read` tool grant does not
|
|
imply permission to read another conversation, credential, or audit payload.
|
|
|
|
An action must satisfy both the requester's authority to request it and the
|
|
performer's authority to execute it. The performer is bounded by reviewed
|
|
agent policy, project registration, explicit workspace registration, applicable
|
|
parent/workspace mission policy, task policy, and launch restrictions. Resolve
|
|
all required references before taking the intersection. Missing/invalid required
|
|
policy is an error, not an empty policy to skip. An optional absent restriction
|
|
adds no grant and does not remove any ancestor ceiling.
|
|
|
|
Each layer checks operations and their targets. Project participation alone
|
|
never admits a workspace action. Multiple assignments do not produce a union
|
|
that lets an action borrow another task's wider grant. Bind a changing action
|
|
to one explicit assignment and current intent revision. Tool availability is
|
|
only a coarse filter before per-action authorization.
|
|
|
|
Proposed standard role catalog for later review:
|
|
|
|
- Reader: permitted work records and scoped file inspection.
|
|
- Contributor: permitted inspection plus assigned file changes and result
|
|
submission, with command execution subject to Q27's invocation-audit ruling
|
|
and verified permission, containment, and evidence checks.
|
|
- Reviewer: permitted evidence inspection and independent routine acceptance.
|
|
- Coordinator: permitted within-plan decomposition and assignment changes.
|
|
|
|
These roles are not a rank hierarchy. Coordinator does not automatically mean
|
|
file writer, reviewer, membership administrator, or credential administrator.
|
|
Separate explicit grants govern registration, conversation reading/observation,
|
|
control transfer, retirement/reopening, and protected operations. Exact operation
|
|
sets and any combined standard roles need review. Shared role authority still
|
|
changes only through reviewed commits under `roles/`; no live role-policy file
|
|
was added or modified during this phase.
|
|
|
|
## 5. Proposed command contract
|
|
|
|
Use the target `mosaic` command family already proposed by #50. These spellings
|
|
are candidate interface decisions, not commands to run today. Terminal,
|
|
desktop, web, and service clients submit the same authorized operations.
|
|
|
|
| Candidate command | Operation/result rule |
|
|
|---|---|
|
|
| `mosaic agent resume <agent> --project <id> --workspace <id> [--session <id>]` | Default launch operation. Use exact session if provided; otherwise use the authoritative current scoped session. Genuine first use creates and announces initial conversation. Missing established history refuses. |
|
|
| `mosaic agent fresh <agent> --project <id> --workspace <id>` | New conversation, no old chat/automatic summary. During active work, request controlled replacement; do not overlap executions. |
|
|
| Work flags for Resume/Fresh: `--work continue|select|abandon|none`, repeatable `--assignment <id>` | Omitted work flag means continue selected assignments. No selected work means taskless conversation/inspection, not arbitrary changes. Select/Abandon require explicit assignment IDs. Abandon ends only those assignments. Validate referenced revisions before launch. |
|
|
| `mosaic execution connect <id> --mode control|observe` | Exact active execution, explicit authorization. Control is exclusive; observe needs conversation access. No automatic connection from a conflict response. |
|
|
| `mosaic execution transfer <id> --to-connection <id> --expected-generation <n>` | Explicit authorized transfer; old generation stops admitting control input. Being an observer is not permission to take control. |
|
|
| `mosaic execution config-check <id>` | Return matching/changed/unknown, launch/current references and check time. Automatic non-blocking notices use the same comparison record. |
|
|
| `mosaic workspace retire <id> --project <id>` | Stop admitting new work, safely stop/reconcile active work, retain files/history. Report retirement pending if safety is unresolved. |
|
|
| `mosaic workspace reopen <id> --project <id>` | Revalidate current policy and membership; no automatic restoration of revoked access or launch. Exact assignment reactivation rules need review. |
|
|
|
|
The runtime schema now fixes `requestVersion:1`, `requestId:RuntimeId`,
|
|
`operation`, `scope`, `expectedRefs:RecordRef[]`, `assignmentRef` and closed
|
|
`parameters`. Input and command requests have their own narrower shapes. The
|
|
service supplies authenticated actor and authorization; clients cannot submit
|
|
trusted producer/outcome records.
|
|
|
|
The runtime schema defines the common response: version, request ID, outcome,
|
|
reason code, optional execution ID and classified receipt/data references.
|
|
Accepted means durable admission, not completion. Success/acceptance cannot have
|
|
null receipts. Invalid/unauthorized pre-admission refusals and audit failures are
|
|
not success receipts. Already-active identity requires authorization; wrappers
|
|
never silently connect or Fresh.
|
|
|
|
The linked runtime contract supplies all 29 operation names, request coverage,
|
|
error codes, JSON stdin/file semantics, message routing and #50 boundaries. CLI
|
|
presentation/aliases in a later charter must map to these same operations.
|
|
|
|
## 6. Ordering and recovery obligations
|
|
|
|
1. Authenticate and validate before resolving private state for a caller.
|
|
2. Resolve exact record revisions, scope, permission, and expected audit coverage.
|
|
3. Serialize active-work admission by agent/project/workspace. Default limit is
|
|
one, independent of session ID. Validate history before claiming first use.
|
|
4. Commit authorization and intent to trusted durable storage before effects.
|
|
Proposed durability requires file flush plus parent-directory flush and
|
|
atomic publication on a supported local filesystem; unsupported storage
|
|
refuses. Crash-order and multi-record commit mechanics still need design.
|
|
5. Resolve exact immutable launch inputs and record the manifest. A successful
|
|
spawn is not a confirmed session binding; require adapter identity evidence.
|
|
6. Serialize controller changes separately by execution ID and generation.
|
|
Reject stale generations for new input even if an old connection still lives.
|
|
7. Before managed actions, recheck policy, assignment/plan revisions, active
|
|
claim generation and required recording. A changed approved plan pauses
|
|
affected work; a shared base-configuration notice alone does not.
|
|
8. For replacement/revocation/retirement, close admission first, account for
|
|
queued requests, settle or identify outstanding effects, and confirm the
|
|
execution can no longer act before admitting conflicting new work.
|
|
9. Append observations and recovery decisions. A timeout, abort acknowledgement,
|
|
or Pi `agent_settled` event alone does not prove container/process termination.
|
|
|
|
A scoped conversation index must retain initial-creation history and missing/
|
|
pruned-session tombstones. A missing index is not proof of first use. Retrying
|
|
a request must resolve its prior durable decision; a timeout or missing response
|
|
must not replay an external action. Request identity binds authenticated actor,
|
|
operation, scope, and normalized arguments. Reuse with different arguments is
|
|
an error. Tombstone retention and post-prune retry behavior remain unresolved.
|
|
|
|
The enforcing runtime component is not an autonomous conductor agent. It has
|
|
only its reviewed operation authority; changing a task's state cannot change
|
|
policy. Required audit failure blocks affected actions, including recovery
|
|
checks that cannot meet their own recording requirements.
|
|
|
|
## 7. Storage and evidence
|
|
|
|
Keep immutable execution evidence under `<dataRoot>/runs/`. A proposed new
|
|
execution record uses its run directory as the evidence owner; projects and
|
|
workspaces reference it instead of maintaining competing result copies.
|
|
Existing v1 records are never rewritten or silently reinterpreted as v2 evidence.
|
|
|
|
Keep conversation bytes under `<dataRoot>/sessions/`, but resolve them through
|
|
explicit scoped metadata rather than directory naming. Do not mount all sessions,
|
|
all runs, all user context, or the whole data root into a worker's tool-accessible
|
|
filesystem. Only the necessary approved inputs and working paths are exposed.
|
|
A trusted recorder must be outside worker write permissions. OS ownership and
|
|
mount tests must verify these boundaries before any isolation claim.
|
|
|
|
Proposed metadata ownership: project/workspace records in their dedicated
|
|
runtime metadata namespace; current indexes under a derived system state
|
|
namespace. No actual directory choice or second configuration file is installed.
|
|
Exact paths, per-directory writers/readers, export, retention, prune/reset
|
|
references, and rollback must be specified before schema approval.
|
|
|
|
Legacy adoption makes a new mapping receipt. Preserve the original source and
|
|
its identity before adapter conversion. Pi's documented automatic format
|
|
migration is a reason to inspect metadata without opening a legacy session in
|
|
Pi. Fresh does not load an adopted transcript just because it is accessible.
|
|
|
|
## 8. Configuration fingerprints
|
|
|
|
Proposed algorithm: SHA-256 over a versioned canonical JSON manifest using RFC
|
|
8785 serialization. Hash exact instruction/SOUL bytes as referenced content;
|
|
normalize structured settings through their strict schema first. Preserve
|
|
instruction order; sort set-valued permissions and source inventories by their
|
|
explicit stable keys. Publish test vectors before implementing the comparator.
|
|
|
|
Comparable base configuration covers canonical SOUL/shared instructions,
|
|
applicable enabled skills and their dependency content, canonical harness/model
|
|
settings, and reviewed role configuration. Exclude timestamps, display labels,
|
|
chat, task progress, private user context, and credentials. Content changes must
|
|
be detected even if a path stays the same. Do not hash unrelated skills merely
|
|
because they are installed.
|
|
|
|
The full launch manifest separately binds execution identity, selected approved
|
|
context, effective restrictions, session choice, adapter/image identity, and
|
|
non-secret credential-account reference where authorized. Its hash naturally
|
|
differs between launches. Never compare full launch hashes as the base-config
|
|
change test. Private context source references/digests remain access-controlled.
|
|
|
|
Exact included JSON keys, skill dependency inventory rules, configuration
|
|
revision races, approved launch overrides, and notification transport still
|
|
need D10/D16 design and #50 reconciliation. A launch fingerprint is not continuous
|
|
proof of live process state, and a changed role grant may require immediate
|
|
revocation rather than waiting for Fresh.
|
|
|
|
## 9. Owner decision after investigation
|
|
|
|
### Q27: command-level evidence or internal-effect evidence
|
|
|
|
A command such as `npm test` can invoke other processes, read/write many files,
|
|
and attempt network access. Pinned Pi documents tool invocation/result events;
|
|
it explicitly does not provide a sandbox. Mosaic's current adapter does not
|
|
capture those events as a trusted per-action ledger.
|
|
|
|
Choices presented to the owner; Jason selected A on 2026-09-06:
|
|
|
|
- A: for the initial managed command facility, record the authorized command
|
|
invocation, actor/scope/assignment, enforced filesystem/network limits,
|
|
start/end, outcome, and controlled evidence references. Be explicit that this
|
|
does not separately enumerate every internal file read/write or network call.
|
|
- B: require separately attributable internal file/network effects before
|
|
enabling command execution. Keep commands unavailable until that stronger
|
|
coverage is designed and verified.
|
|
|
|
Owner ruling: A, with real sandbox enforcement and honest coverage labels.
|
|
This keeps test/build commands practical while preserving accountable invocation
|
|
and fail-closed admission. Use typed, allowlisted command metadata. Neither
|
|
events nor detailed evidence may contain credentials; unfiltered argument,
|
|
environment, and output capture is not approved. The ruling does not waive
|
|
workspace isolation, credential protection, action recording, revocation,
|
|
or uncertainty recovery. A command
|
|
whose effects cannot stay within the authorized boundary must still refuse.
|
|
|
|
This ruling settles D11's command-audit granularity, not a specific sandbox,
|
|
RPC/SDK choice, product UI replacement, or implementation increment. It does
|
|
not grant shell access to any current research worker.
|
|
|
|
## 10. Phase-2 exit gate remains open
|
|
|
|
Q27 and Q28 are answered; R34 records the managed-terminal ruling. Runtime,
|
|
control/input, command artifacts, permission/routing/recovery rules and the
|
|
D1-D16 reconciliation now form an owner-review candidate. Jason's specific
|
|
phase-2 acceptance is now recorded. Implementation must prove the listed mechanisms;
|
|
any change to owner behavior returns for a new decision.
|
|
|
|
Candidate acceptance evidence must include negative schema fixtures, reference
|
|
and permission checks, representative lifecycle/crash traces, hash test vectors,
|
|
and a capability matrix that distinguishes documented, code-inspected, and
|
|
runtime-tested support. Current evidence is source/document inspection and author
|
|
schema/hash/synthetic-model checks only. No
|
|
runtime feature or security guarantee, independent verdict, whole-schema approval,
|
|
or readiness for mapping follows from this draft.
|
|
|
|
## 11. Continuing goal task record
|
|
|
|
Goal: issue-53-phase2. Owner: Jason. Assigned author: darkwing in the explicit
|
|
repository working directory. The repeated /goal request resumes this existing
|
|
assignment; it does not create a second authority record. CURRENT owns live
|
|
control state; BUILD-LOG and SESSIONS hold append-only history.
|
|
|
|
| Task | Criterion and dependencies | Status and evidence |
|
|
|---|---|---|
|
|
| P2-1 | Recover Q1-Q27 requirements and pre-reboot work. | Done for author recovery; R1-R33 and preserved source/run evidence. |
|
|
| P2-2 | Repair command/record/path schemas and fixtures after P2-1. | Author checks pass: 38 command cases, 38 record cases, 16 path cases, plus 5 deliberately shape-valid forgeries. Runtime semantics remain separate. |
|
|
| P2-3 | Define permission/reference/lifecycle/storage rules after P2-2. | Review proposals in schema package sections 2-6; no live policy installed. |
|
|
| P2-4 | Define comparable fingerprints and reconcile #50 boundaries. | Seven restricted-domain vectors pass; package sections 6.1-6.2 retain the unresolved OAuth gate. |
|
|
| P2-5 | Choose managed terminal requirement and finalize affected execution/control/artifact schemas. | Author checkpoint complete after Jason's Q28 A. Runtime schema, fixtures and RUNTIME.md provide the review candidate; no runtime capability is claimed. |
|
|
| P2-6 | Assemble exact-candidate review package, trace D1-D16, and recommend one testable increment. Depends on P2-5. | Owner package in REVIEW.md; 155 runtime cases and 35 synthetic rule-model cases supplement earlier checks. First recommendation refined to a read-only synthetic scope/permission inspector, not live registration. |
|
|
| P2-7 | Obtain Jason's specific phase-2 acceptance after P2-6. | Done: Jason said "accept phase 2" after clarification that this accepts the planning baseline, not security certification or implementation. Goal satisfied; later mapping/implementation still require separate authority. |
|
|
|
|
Jason clarified that /goal belongs to the separate ~/.mosaic deployment, not
|
|
this environment. Continue through existing file-based records. No extension
|
|
installation, active --wait-timeout 60, or automatic follow-up was requested for
|
|
this phase-2 session. Separate #54 native-extension work is not part of this goal;
|
|
this session has not migrated its goal state or configured that extension.
|
|
Owner waits are manual and never expire into approval. No numeric work budget was supplied; aggregate usage is
|
|
unavailable, not reset on resumption.
|