Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
212 commits
Select commit Hold shift + click to select a range
f1aa6ee
Answer the current question with clear structured updates and recorde…
Oct 30, 2026
169367a
Allow explicit resume after verified pre-dispatch failure
Oct 30, 2026
03a1571
Integrate same-run recovery after passed native verification
Oct 30, 2026
40411fd
Integrate question-aware bot updates and exact diagnostic excerpts
Oct 30, 2026
9e4edc7
Require a fresh generation30 source qualification
Oct 30, 2026
13383e7
Answer the current issue question without irrelevant recaps
Oct 30, 2026
6cdb5ad
Require editorial checks before accepting AI updates
Oct 30, 2026
7d4fd13
Integrate reader-gated natural bot communication
Oct 30, 2026
c2742ad
Apply required reader checks to pull request publication
Oct 30, 2026
9e24031
Integrate evidence-based pull request communication
Oct 30, 2026
7397ab1
Preserve verified questions across communication transports
Oct 30, 2026
ebe8728
Preserve verified signed questions and canonical reply evidence
Oct 30, 2026
3e5628b
Keep semantic review diagrams legible across viewport sizes
Oct 30, 2026
f2591de
Keep semantic review diagrams readable across screen sizes
Oct 30, 2026
da075b1
Register the verified recovery and communication profile
Oct 30, 2026
4701b34
Authorize retained source through the canonical background worker
Oct 30, 2026
241bf4a
Merge background retained-source identity correction for terminal rec…
Oct 30, 2026
163d488
Render test identifiers and explain worker identity holds
Oct 30, 2026
80f140f
Define exact consumed-terminal recovery V2 contracts
Oct 30, 2026
c3d0549
Expose exact consumed-terminal V2 recovery in SDK, CLI, and MCP
Oct 30, 2026
cb63393
Recover consumed final results without repeating worker execution
Oct 30, 2026
2617adc
Merge commit 'c3d05496a2885de971832c23cfdf3d895fb337c3' into integrat…
Oct 30, 2026
c7afd5b
Merge commit '163d4886a3c448ec7f5dad08d14a84a10ca32e38' into integrat…
Oct 30, 2026
6b4f6af
Require fresh source qualification after consumed-result recovery
Oct 30, 2026
57190cd
Merge commit '6b4f6afbbaf35cf7390caaaa099724feae955828' into integrat…
Oct 30, 2026
56f87aa
Keep the recorded failure visible in diagnostic excerpts
Oct 30, 2026
6d79151
Assert failed recovery refuses resume without changing progress
Oct 30, 2026
f44af89
Expose privacy-filtered recorded failures in project updates
Oct 30, 2026
538ceca
Certify native staging when accepting consumed terminal results
Oct 30, 2026
26dcefa
Merge commit '538ceca' into integration/crm-recovery-editorial
Oct 30, 2026
f3a3ec2
Preserve failed implementation custody during startup recovery
Oct 30, 2026
14592d9
Merge commit 'f3a3ec2ed1589ea1ef85dda97bded5eef7b29fb5' into integrat…
Oct 30, 2026
dfe27e2
Let the selected provider handle natural conversation context
Oct 30, 2026
ce1da81
Integrate elastic natural conversation context
Oct 30, 2026
72e7443
Drain available SCM polling pages before the next interval
Oct 30, 2026
11e8a78
Integrate responsive SCM backlog polling
Oct 30, 2026
58dc132
Share natural read conversations across verified GitHub ingress
Oct 30, 2026
e4548b4
Integrate natural GitHub webhook conversations
Oct 30, 2026
60bd6c6
Document the complete repository webhook API route
Oct 30, 2026
853feec
Clarify repository webhook consent and endpoint setup
Oct 30, 2026
61eb783
Retain the signed webhook endpoint documentation correction
Oct 30, 2026
5f20073
Wake authenticated comment observations from signed webhook deliveries
Oct 30, 2026
82867fa
Align communication and MCP tests with recorded-error and recovery co…
Oct 30, 2026
3bb0c0f
Preserve saved provider custody without suppressing predispatch recovery
Oct 30, 2026
f9c48ac
Merge branch 'fix/recovery-startup-custody-20261030' into integration…
Oct 30, 2026
a6aa74b
Register the verified recovery profile while preserving measured history
Oct 30, 2026
c7df1cb
Retain runner artifacts through scoped paged native object storage
Oct 30, 2026
098a8ef
Recover neutral QA declarations without granting browser evidence
Oct 30, 2026
fb3dfb9
Publish immutable source snapshots and authorize bounded file observa…
Oct 30, 2026
dc64b60
Browse recorded source snapshots through verified byte windows
Oct 30, 2026
f2f5ca6
Bind archived source reads to retained custody and credential proofs
Oct 31, 2026
34979d5
Register the measured recovery runtime without replaying completed work
Oct 31, 2026
af27e85
Version the recovery successor separately from the published runtime
Oct 31, 2026
ec1aaa6
Validate consumed checkpoints against their native compatibility map
Oct 31, 2026
95fdce9
Merge commit 'ec1aaa6b90efef4b05808d62cc6bfeeea2590377' into integrat…
Oct 31, 2026
0124b23
Merge remote-tracking branch 'origin/main' into integration/crm-recov…
Oct 31, 2026
c2a7194
Separate native checkpoint compatibility from measured predecessor au…
Oct 31, 2026
d739fbf
Register measured native checkpoint compatibility for retained comple…
Oct 31, 2026
70588bd
Decode versioned worker settlement bodies through the native model re…
Oct 31, 2026
597e540
Keep direct native controller fixtures aligned with the typed transpo…
Oct 31, 2026
425e0cc
Decode retained completion requests through native pyfly model binding
Oct 31, 2026
b95a0b1
Use the verified stable pyfly 26.10.21 framework wheel
Oct 31, 2026
4cdbb34
Fence retained final compatibility to the reviewed PyFly 21 successor
Oct 31, 2026
ca13fe7
Qualify retained completion compatibility on stable pyfly 26.10.21
Oct 31, 2026
e47c16d
Document the current framework pin without changing retained runtimes
Oct 31, 2026
df7e86b
Merge reviewed activity schema before Projects integration
Oct 31, 2026
e559bc0
Register the measured pyfly 26.10.21 native execution profile
Oct 31, 2026
1a23071
Add native project-scoped GitHub Projects custody
Oct 31, 2026
42df610
Merge verified pyfly 26.10.22 into Projects integration
Oct 31, 2026
30d10bc
Use the synthetic operator token in the native SDK fixture
Oct 31, 2026
7e0b4d1
Exercise the required CSRF header before native browser login
Oct 31, 2026
7ee4241
Keep consumed terminal postprocessing in its owned execution phase
Oct 31, 2026
68d461b
Verify the current GitHub account before private board setup
Oct 31, 2026
012bafa
Guide private GitHub board setup with verified account custody
Oct 31, 2026
d80347b
Retain board setup screenshots at short phone width
Oct 31, 2026
ecc2505
Keep merged container recovery and native Engine fixtures in Projects
Oct 31, 2026
ed18cb4
Reconcile claimed results without replaying execution from Studio
Oct 31, 2026
2ade493
Make board status choices and scroll review clear on short screens
Oct 31, 2026
207f6ea
Keep reconciliation guidance applicable to every product
Oct 31, 2026
2169d4c
Integrate the current factory while preserving recovery cleanup
Oct 31, 2026
0740956
Recapture guided Studio views against private board setup
Oct 31, 2026
5badc6f
Expose the same-result recovery through the factory portal
Oct 31, 2026
d4367ca
Reconcile uncharged consumed terminal claims under native authority
Oct 31, 2026
88e8126
Compose the typed recovery boundary with the current factory
Oct 31, 2026
10eba6a
Fence reconciliation authority through native commit settlement
Oct 31, 2026
c3e0569
Fence recovery authority at the native transaction commit boundary
Oct 31, 2026
065110b
Keep wizard steps and scrolling consistent through shared form primit…
Oct 31, 2026
ab73584
Qualify the Studio 0.2.50 candidate across retained runtime boundaries
Oct 31, 2026
4622c9a
Require a fresh measured epoch for current recovery authority
Oct 31, 2026
da58ee4
Preserve bounded wizard scrolling at short viewport heights
Oct 31, 2026
938ad79
Keep wizard steps and scrolling consistent through shared form primit…
Oct 31, 2026
fc8e576
Preserve bounded wizard scrolling at short viewport heights
Oct 31, 2026
ccdb76e
Keep board choices reachable with the shared scroll cue
Oct 31, 2026
bcb414c
Keep settings and product workspaces usable across viewport sizes
Oct 31, 2026
94b382d
Integrate verified GitLab note receipts into recovery candidate
Oct 31, 2026
fd4abe8
Port the accepted shared workspace UI without changing Projects effects
Oct 31, 2026
67a5374
Highlight Markdown code with lazy grammars and exact copying
Oct 31, 2026
21b3e1c
Wait for lazy code grammars before canonical captures
Oct 31, 2026
96e283f
Highlight Markdown code with lazy grammars and exact copying
Oct 31, 2026
1264f0c
Capture setup through the responsive wizard controls
Oct 31, 2026
75770dc
Scope recovery configuration captures to their provider
Oct 31, 2026
d98221f
Keep board status mapping usable in compact dialogs
Oct 31, 2026
eede187
Separate intrinsic dialog flow from bounded field layouts
Oct 31, 2026
1306f6d
Separate intrinsic dialog flow from bounded field layouts
Oct 31, 2026
8e82f88
Wait for lazy code grammars before canonical captures
Oct 31, 2026
8fcc1fe
Validate external tool captures against natural page flow
Oct 31, 2026
3933d41
Document private board setup and bind its walkthrough scenes
Oct 31, 2026
a96382a
Validate external tool captures against natural page flow
Oct 31, 2026
5bd5292
Use native scrolling without status bands in dialogs
Oct 31, 2026
fe45e78
Remove obsolete scroll-status fixture metadata
Oct 31, 2026
5207ab2
Use native scrolling without status bands in dialogs
Oct 31, 2026
6e16264
Remove obsolete scroll-status fixture metadata
Oct 31, 2026
70cc35b
Move private board setup into a dedicated project view
Oct 31, 2026
8717ebc
Guide product delivery through five practical stages
Oct 31, 2026
a8d2ff4
Guide product work through connected factory stages
Oct 31, 2026
77c7373
Group workspace navigation around product delivery
Oct 31, 2026
81c9db1
Inspect reviewed component scopes without a cardinality ceiling
Oct 31, 2026
16ec1c0
Clarify effective run mappings while preserving board contracts
Oct 31, 2026
182de05
Guide product delivery through five practical stages
Oct 31, 2026
b55c8af
Guide product work through connected factory stages
Oct 31, 2026
7f7bea1
Group workspace navigation around product delivery
Oct 31, 2026
905cdde
Keep reviewed source selections intact across assistant handoff
Oct 31, 2026
7bcc5ed
Apply the configured source-scope guard formatting
Oct 31, 2026
118911c
Keep source selections intact for the dedicated inspection flow
Oct 31, 2026
85f226e
Apply the configured source-scope guard formatting
Oct 31, 2026
fedf15c
Carry reviewed source into product conversations without losing reque…
Oct 31, 2026
0372ad8
Make source inspection a scoped project workflow
Oct 31, 2026
64fef39
Carry reviewed source into product conversations without losing reque…
Oct 31, 2026
a78807c
Make source inspection a scoped project workflow
Oct 31, 2026
44002b5
Verify natural form flow after workspace notices
Oct 31, 2026
1fe535e
Verify natural form flow after workspace notices
Oct 31, 2026
c184575
Align the approved walkthrough producer with current page flow
Oct 31, 2026
4aefff2
Refresh candidate walkthrough from the frozen Studio source
Oct 31, 2026
cfdd54c
Recapture Studio guides on the Projects source cut
Oct 31, 2026
70147aa
Preserve assistant action errors across conversation polling
Oct 31, 2026
6e5cc67
Align Studio browser contracts with approved page flow
Oct 31, 2026
13ecde4
Align native reconciliation fixtures and focus committed evidence
Oct 31, 2026
b45205a
Align strict compatibility tests with guarded runtime and reconciliation
Oct 31, 2026
daa18ba
Keep protected consent actions visible and clarify person selection
Oct 31, 2026
475bf36
Compose current CRM recovery with native Projects
Oct 31, 2026
d4a7efe
Retain protected consent scope and review capture coverage
Oct 31, 2026
313bc6c
Fit protected consent dialogs without losing active input
Oct 31, 2026
e4a3987
Verify bounded and short-window consent capture contracts
Oct 31, 2026
affa2f0
Integrate searchable person selection and adaptive consent dialogs
Oct 31, 2026
4866c9e
Keep product consent usable with visible scrollbars
Oct 31, 2026
a93c9cd
Fix consent layout with visible native scrollbars
Oct 31, 2026
9e2f84d
Document person selection with current guided screenshots
Oct 31, 2026
b1ab5f7
Keep current SCM status facts above historical narrative
Nov 1, 2026
9719d83
Preserve the classifier draft without a narrower length limit
Nov 1, 2026
e12d13e
Keep SCM replies grounded in current recovery facts
Nov 1, 2026
4bcf92d
Align engine activity migration tests with schema 34
Nov 1, 2026
57a3b75
Align mock profile aliases and Projects MCP contracts
Nov 1, 2026
e06d9c3
Merge current MCP and retained reconciliation test contracts
Nov 1, 2026
5ed901b
Merge schema 34 activity migration test coverage
Nov 1, 2026
10247b6
Merge current main contracts into source custody integration
Nov 1, 2026
bcc3a0b
Exercise durable runner contracts with scoped native test roles
Nov 1, 2026
8a174c1
Expose scoped run code through a verified read-only explorer
Nov 1, 2026
cbc91cf
Enforce current authority across local and durable artifact custody
Nov 1, 2026
5168148
Preserve accepted reconciliation custody during verification reuse
Nov 1, 2026
215c8ca
Keep standalone runs outside project-scoped source archival
Nov 1, 2026
33c6c24
Integrate accepted reconciliation verification custody
Nov 1, 2026
56f6a25
Preserve canonical project identity when updating UUID paths
Nov 1, 2026
bf9b947
Seal reconciled historical views before asynchronous validation
Nov 1, 2026
0436938
Define finite linked verification consent and ledger contracts
Nov 1, 2026
44fe77e
Define finite linked verification consent and ledger contracts
Nov 1, 2026
304f02b
Integrate scoped source and artifact custody
Nov 1, 2026
c3f50ca
Reject contradictory linked verification receipt progress
Nov 1, 2026
9ef0f46
Reject contradictory linked verification receipt progress
Nov 1, 2026
a4eab66
Admit complete verification lists within declared check scope
Nov 1, 2026
b35c598
Expose explicit linked verification through operator clients
Nov 1, 2026
a6c456c
Integrate sealed recovery views and fresh verification contracts
Nov 1, 2026
e9cbbc3
Integrate linked verification operator clients
Nov 1, 2026
23b8e06
Document the current operator tool catalog
Nov 1, 2026
3c33ee1
Carry full verification suites through scoped runtime consumers
Nov 1, 2026
88f0400
Integrate elastic verification through runtime and Studio
Nov 1, 2026
e9dd6ea
Guide run source inspection before technical evidence queries
Nov 1, 2026
b80bc5d
Recapture current Studio documentation with exact fixture provenance
Nov 1, 2026
3eefe8a
Expose bounded actual verification failure evidence
Nov 1, 2026
9012122
Expose bounded actual verification failure evidence
Nov 1, 2026
3869cc4
Integrate exact failed-check evidence for verification clients
Nov 1, 2026
f19d64f
Define scoped SCM verification consent and phase authority contracts
Nov 1, 2026
ff4ce50
Execute linked verification without consuming coding authority
Nov 1, 2026
dcec4f8
Integrate independently authorized fresh verification worker
Nov 1, 2026
4253e9c
Define scoped SCM verification consent and phase authority contracts
Nov 1, 2026
ff2ba7a
Merge commit 'dcec4f87c1958e4e1ba89704436ed96384d3ee28' into feat/scm…
Nov 1, 2026
dce19de
Prepare the actual workspace for shared verification resolution
Nov 1, 2026
07a09be
Bind source and check authority to measured runtime cuts
Nov 1, 2026
2b2ac4f
Explain independent verification and its execution boundaries
Nov 1, 2026
76a16da
Guard Git checkpoints against unsettled verification
Nov 1, 2026
5f01f6b
Fence linked verification with separately confirmed SCM consent
Nov 1, 2026
1ab1619
Keep the recovery diagram readable within the shared flow frame
Nov 1, 2026
58560ce
Fence linked verification with separately confirmed SCM consent
Nov 1, 2026
81ec3c2
Preserve natural SCM verification authority for review
Nov 1, 2026
6c1aa09
Merge commit '5f01f6ba' into fix/linked-verification-git-guard-20261101
Nov 1, 2026
effdc6b
Verify keyboard traversal through the Code tab
Nov 1, 2026
b9d2a21
Fence natural verification consent and recover durable readback
Nov 1, 2026
59df8c7
Connect owner-confirmed SCM verification to the native service
Nov 1, 2026
bf6e2c6
Compose the linked Git delivery guard for final integration checks
Nov 1, 2026
66be832
Wire native SCM consent and bind its measured implementation
Nov 1, 2026
6081000
Retain SCM custody through native Git commits
Nov 1, 2026
58de62d
Keep verification consent and source fences through Git commits
Nov 1, 2026
d7c329f
Preserve selected source while accepting known QA outputs
Nov 1, 2026
1f2c4fc
Bind workspace descriptor checks to admission policy
Nov 1, 2026
bf96d21
Preserve source identity while accepting known build outputs
Nov 1, 2026
2027f9b
Explain consent continuity and build output verification
Nov 1, 2026
1202e56
Preserve historical admission prefixes with elastic SDK coverage
Nov 1, 2026
bf7171b
Limit final-outcome write fixture to its consumers
Nov 1, 2026
9371914
Restore historical material prefixes and elastic client checks
Nov 1, 2026
a7db702
Keep final-outcome test grants within their fixture consumers
Nov 1, 2026
d08f08d
Expose safe stage sampling diagnostics and separate predicate timing
Nov 1, 2026
486696c
Separate observation custody tests from sampling deadlines
Nov 1, 2026
997b91b
Merge pull request #94 from fireflyframework/integration/forge-compos…
ancongui Nov 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ __pycache__/
.pytest_cache/
.ruff_cache/
.mypy_cache/
node_modules/
node_modules
dist/
build/
site/
Expand Down
28 changes: 28 additions & 0 deletions compose.object-storage.local.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Copyright 2026 Firefly Software Foundation. SPDX-License-Identifier: Apache-2.0
# Local emulation only. Supply an already installed image pinned by digest.
name: forge-object-storage-local
services:
minio:
image: ${FORGE_MINIO_IMAGE:?Set an installed MinIO image pinned by sha256 digest}
command: ["server", "/data", "--console-address", ":9001"]
ports:
- "127.0.0.1:9000:9000"
- "127.0.0.1:9001:9001"
environment:
MINIO_ROOT_USER_FILE: /run/secrets/minio_user
MINIO_ROOT_PASSWORD_FILE: /run/secrets/minio_password
secrets: [minio_user, minio_password]
volumes:
- objects:/data
read_only: true
tmpfs: [/tmp]
cap_drop: [ALL]
security_opt: [no-new-privileges:true]
restart: "no"
secrets:
minio_user:
file: ${FORGE_MINIO_USER_FILE:?Set a private local MinIO administrator identity file}
minio_password:
file: ${FORGE_MINIO_PASSWORD_FILE:?Set a private local MinIO administrator credential file}
volumes:
objects:
29 changes: 28 additions & 1 deletion docs/agent-integrations.md
Original file line number Diff line number Diff line change
Expand Up @@ -317,9 +317,36 @@ forge product apply-change REPOSITORY_ID change.json

Python exposes `model_profiles`, `save_model_profile`, `test_model_profile`, `task_routing`, `save_task_routing`, `preview_product_change` and `apply_product_change`. Typed configuration methods can receive secrets from an application secret manager. The SDK filters profile responses and suppresses configuration errors that could reflect a submitted secret.

## Request independent fresh verification

Linked verification is a separate operation for the exact configured checks of an accepted implementation. Read its candidate first. It binds the current operator, source, runtime, runner, inputs and command count. Reading a candidate grants no execution authority.

| Operation | Python SDK | Factory MCP |
| --- | --- | --- |
| Review current scope | `linked_verification_candidate(run_id)` | `get_linked_verification_candidate` |
| Submit explicit consent once | `request_linked_verification(run_id, request)` | `request_linked_verification` |
| Read the same operation | `linked_verification_status(run_id, request_id)` | `get_linked_verification_status` |

Python and MCP accept the native `LinkedVerificationInputV1` body: `version: 1`, the retained lowercase hexadecimal `request_id`, the reviewed `candidate_digest` and all three acknowledgments set to `true`. The CLI requires each acknowledgment explicitly and never prompts for implicit consent:

```sh
forge linked-verifications candidate RUN_ID
forge linked-verifications request RUN_ID \
--request-id REQUEST_ID \
--candidate-digest REVIEWED_CANDIDATE_DIGEST \
--acknowledge-all-fresh-checks \
--acknowledge-no-coding-or-repair \
--acknowledge-original-history-and-budget-preserved
forge linked-verifications status RUN_ID REQUEST_ID
```

Save the request ID, complete candidate and exact consent before the POST. These adapters submit once. A timeout, refusal or stale candidate never triggers another POST, a replacement identity or a budget reset. After uncertain delivery, read status for the original request. A missing receipt leaves the outcome unknown.

The initial worker path requires a configured, qualified host runner. Unsupported transports refuse without fallback. The worker owns execution of the frozen commands and the independent operation ledger. This consent grants no coding or repair and preserves the original implementation history and budget. `queued` and `executing` are progress states; `failed` or `needs_reconciliation` do not establish successful checks. Only `completed` includes the typed parent-verification settlement. Git delivery keeps its own policy and consent gates.

## Grant check access to a coding recovery

The scoped coding channel is separate from `forge mcp`. It lets an official Codex or Claude invocation request selected checks already retained by the run. The caller supplies a command index and request identity; the factory owns the actual command, runner, current authority and budget. It does not expose the operator token or the factory's 172 operator tools to that coding process.
The scoped coding channel is separate from `forge mcp`. It lets an official Codex or Claude invocation request selected checks already retained by the run. The caller supplies a command index and request identity; the factory owns the actual command, runner, current authority and budget. It does not expose the operator token or the factory's 202 operator tools to that coding process.

Use the native SDK methods `coding_check_candidate`, `grant_coding_checks`, `coding_check_receipt`, `coding_check_current` and `revoke_coding_checks`, or the matching CLI commands:

Expand Down
4 changes: 4 additions & 0 deletions docs/agent-tools.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ Firefly Agentic registers the tools allowed by the run's frozen role configurati

Use the [tool prerequisites guide](tooling-prerequisites.md) to check every phase and provider before enabling a capability. Commands, browsers, internet search and external MCP are optional configured capabilities; the initial implementation role grants the six confined source tools.

Run, component and maintenance definitions retain the full declared verification list without a fixed command-count ceiling. Configured-check requests select an index from that list; the executor checks both its existence and the operator's granted scope. For example, a product with 51 checks can select check 50 using its zero-based index, when its configured execution allowance leaves enough capacity for that call and final verification.

The selected runner's execution allowance still governs actual calls. Grant admission reserves capacity for independent final verification, and a restart preserves calls already spent. Increasing a definition's size does not change a retained run's commands, grants or counters. Command validation and any explicitly selected work deadlines continue to apply.

Native tool arguments reject known configured credentials before file writes or external requests. Text returned by every native tool is redacted against the shared server credential registry before the model receives it. This checks known values and their configured representations; it does not discover every possible secret in a repository.

Paths cannot traverse outside the component. Source read and write operations reject symlinks, hardlinks, Git metadata and credential filenames. Git diff reads only the component's admitted source paths and does not update the index. It includes tracked changes and nonignored untracked source files, representing new files as added-file patches without staging them. The response covers at most 100 paths and 128,000 characters, with explicit truncation; it is not a complete project diff when truncated. A rejected line edit requires reading the new file before retrying.
Expand Down
72 changes: 72 additions & 0 deletions docs/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,67 @@ Request and response bodies use JSON unless a route downloads an artifact or
file. Project permissions apply to the authenticated identity. The actual
running application's OpenAPI document is the authoritative schema.

## Read recorded source

In Studio, open a run from **Factory** and choose **Code**. Select a
recorded branch and snapshot to browse its archived files. File windows are
verified against the selected manifest and checksum before display. This view
reads existing archives; it does not publish source, rescan credentials or run
work. Current sign-in and project read permission remain required.

These read-only endpoints require the current native identity and project read
permission. Responses use `Cache-Control: private, no-store`. Snapshot IDs,
catalog manifests and file indexes identify evidence; they do not grant access.

| GET endpoint under `/api/v1/runs/{run_id}/source` | Result |
| --- | --- |
| `/revisions?after={snapshot_id}` | Up to 128 recorded snapshots and the next cursor; pending/failed publications remain explicit. |
| `/revisions/{snapshot_id}/catalog?expected_manifest={sha256}&page=0` | An immutable source reference and a `SourceCatalogPageV1`. |
| `/revisions/{snapshot_id}/files/{entry_index}?expected_manifest={sha256}&page=0&offset=0&limit=32768` | A verified byte window for an entry in that exact catalog page. |

Catalog/file requests may include `request_id` for an existing Git delivery
checkpoint. Its verified journal intent and receipt must retain a typed
`expected_source_digest` equal to the catalog's complete source digest, as well
as the same Git tree. A matching tree alone does not cover ignored public files.
Older checkpoints without that exact proof remain unavailable through this
selector; their source snapshot can still be read independently. File
windows are at most 1 MiB and include exact byte offsets, a window SHA-256,
Base64 content and optional UTF-8 text. `binary` describes the returned window,
including a window that bisects a UTF-8 sequence; it does not guess a file type.

The Python SDK exposes `run_source_revisions`, `run_source_catalog` and
`run_source_file`. It validates response scope, indexes, extents and content
hashes without retries. Unpublished snapshots have no content endpoint, and
the server never substitutes a live workspace read. See
[source storage and publication](architecture.md#read-recorded-source).

### Rescan retained bytes after credential rotation

A changed configured credential registry holds archived file reads until a
current project owner or factory administrator explicitly scans the retained
bytes. This uses existing native `members` authority; it does not grant execution
or alter project permissions. A workspace is not required.

| Endpoint under `/api/v1/runs/{run_id}/source/revisions/{snapshot_id}` | Purpose |
| --- | --- |
| `GET /credential-scan-candidate?expected_manifest={sha256}` | Review the current catalog and configured-credential fingerprint. Requires owner authority. |
| `POST /credential-scans/{request_id}` | Submit one `SourceCredentialScanInputV1`, including both explicit retained-byte/no-source-change acknowledgments. |
| `GET /credential-scans/{request_id}?expected_manifest={sha256}` | Read the exact pending or completed request without repeating a scan. Requires current source read access. |

Keep the request identity, complete body and its canonical SHA-256 before the
POST. After a lost reply, read that exact receipt. A pending request does not
authorize content access and is never restarted automatically. A completed
receipt records the unchanged snapshot, source digest, storage binding, actor,
current credential fingerprint, file/byte counts and content-proof chain. The
scanner verifies every retained chunk and file checksum before publication;
it does not upload files, recreate a workspace or rewrite the archive.

The SDK exposes `run_source_scan_candidate`, `run_source_rescan` and
`run_source_scan_receipt`; readback requires `expected_request_sha256`.
All responses are private and uncached. Current project access remains necessary
after a successful scan. Personal API-token source routes remain unsupported
until their separate observation allowlist is extended and tested.

## Observe the factory and manage personal tokens

The [Factory dashboard](factory-dashboard.md#read-through-the-api) exposes read-only, paged project choices and factory, project or run observations. Its totals cover the selected scope independently of the page size. Current identity, exact cookie session when used and project access are checked again after the read snapshot.
Expand Down Expand Up @@ -214,6 +275,9 @@ After grant confirmation, refresh the final-allowance candidate and include `cod
| GET | `/runs/{id}/checkpoint-continuations/requests/{request_id}/candidate` | Inspect a retained checkpoint and original ticket without admitting work |
| POST | `/runs/{id}/checkpoint-continuations/requests/{request_id}/actions/{action_id}` | Save a reviewed finite continuation on the same execution request |
| GET | `/runs/{id}/checkpoint-continuations/requests/{request_id}/status` | Read the saved checkpoint-continuation action and worker status |
| GET | `/runs/{id}/worker-completion-settlements/candidate` | Review eligible known-worker V1 or consumed-terminal V2 custody without settling output |
| POST | `/runs/{id}/worker-completion-settlements/{request_id}` | Submit exact V1 settlement or strict V2 local-postprocessing consent under one saved request identity |
| GET | `/runs/{id}/worker-completion-settlements/{request_id}` | Read the same retained settlement/recovery receipt without dispatch or resubmission |
| GET | `/runs/{id}/final-outcome-continuations/requests/{request_id}/candidate` | Review an already-consumed final result and current eligibility |
| POST | `/runs/{id}/final-outcome-continuations/requests/{request_id}/actions/{action_id}` | Save one same-ticket final-result acceptance action |
| GET | `/runs/{id}/final-outcome-continuations/requests/{request_id}/status` | Read final-result acceptance status without another submission |
Expand Down Expand Up @@ -247,6 +311,14 @@ The [original-result recovery guide](recovery.md#explicit-closed-text-implementa

The [uncertain run-submission guide](recovery.md#settle-an-uncertain-run-submission) explains exact admission, cancellation and decision readback. The same enabled user can read or settle cancellation with current read access after signing in again. Replaying admission also requires the original authentication method and current execution authority.

### Consumed-terminal recovery

Consumed-terminal recovery uses the existing worker-completion endpoint family
with a strict `version: 2` request; there is no query selector or new execution
grant. The Python SDK, CLI and MCP provide explicit V2 candidate, request and
status operations. See [the guided recovery flow](checkpoint-verification.md#recover-a-consumed-terminal-result-after-failure)
for the five digest bindings, required acknowledgments and lost-response readback.

## Use explicit recovery from the Python SDK

`ForgeClient` exposes the same original-request and checkpoint contracts. Retain
Expand Down
Loading
Loading