From 6badcc7f2b141473dcd3e6dd603ecedb4e2615c3 Mon Sep 17 00:00:00 2001 From: Andres Contreras Date: Sat, 24 Oct 2026 16:43:50 -0700 Subject: [PATCH 1/3] Release Forge 0.2.43 with durable checkpoint continuation --- CHANGELOG.md | 9 + docs/architecture.md | 8 +- docs/recovery.md | 13 +- docs/release-notes.md | 12 + docs/sandbox.md | 8 + docs/scm.md | 52 ++ pyproject.toml | 2 +- src/firefly_forge/__init__.py | 2 +- src/firefly_forge/agent_checkpoint_models.py | 2 +- src/firefly_forge/agent_checkpoints.py | 35 +- src/firefly_forge/agent_restores.py | 112 +++- .../agentic_checkpoint_boundary.py | 112 +++- .../agentic_checkpoint_invocation.py | 27 +- src/firefly_forge/agentic_runtime.py | 2 +- src/firefly_forge/api.py | 2 + src/firefly_forge/collaboration.py | 62 +- src/firefly_forge/collaboration_feedback.py | 9 +- src/firefly_forge/engine.py | 95 ++- src/firefly_forge/journal.py | 55 +- src/firefly_forge/runner_pool_worker.py | 131 ++-- src/firefly_forge/sandbox.py | 98 +-- src/firefly_forge/sandbox_command_slots.py | 294 ++++++++ src/firefly_forge/scm_connections.py | 12 +- src/firefly_forge/scm_conversations.py | 6 +- .../scm_maintain_ticket_controllers.py | 30 + .../scm_maintain_ticket_models.py | 108 +++ src/firefly_forge/scm_maintain_tickets.py | 376 +++++++++++ src/firefly_forge/scm_natural_effects.py | 4 +- src/firefly_forge/scm_natural_feedback.py | 9 +- src/firefly_forge/scm_natural_links.py | 117 ++++ src/firefly_forge/scm_natural_models.py | 6 +- src/firefly_forge/scm_natural_render.py | 60 +- src/firefly_forge/scm_natural_tasks.py | 8 + src/firefly_forge/source_budget_allowances.py | 2 + .../source_edit_qualification.py | 15 +- .../source_edit_supported_profiles.py | 328 +++++++++ tests/source_edit_qualification_fixtures.py | 2 + tests/test_agentic_checkpoint_codec.py | 503 ++++++++++++++ tests/test_agentic_checkpoint_codec_native.py | 113 ++++ ...t_agentic_checkpoint_frozen_design_host.py | 142 ++++ ...st_agentic_checkpoint_static_tools_host.py | 222 ++++++ ..._agentic_checkpoint_static_tools_native.py | 73 ++ ...agentic_completed_commands_restore_host.py | 265 ++++++++ ...entic_completed_commands_restore_native.py | 110 +++ tests/test_agentic_restore_receipt_native.py | 14 +- tests/test_product_context_projection_host.py | 148 ++++ tests/test_sandbox_command_ordinals.py | 114 ++++ tests/test_sandbox_command_ordinals_host.py | 631 ++++++++++++++++++ tests/test_scm_maintain_dispatch_host.py | 245 +++++++ tests/test_scm_maintain_question_host.py | 264 ++++++++ tests/test_scm_maintain_ticket_host.py | 329 +++++++++ tests/test_scm_maintain_ticket_native.py | 286 ++++++++ tests/test_scm_natural_trusted_links_host.py | 196 ++++++ ...test_source_budget_current_profile_host.py | 4 +- tests/test_source_budget_output_host.py | 6 +- ...test_source_edit_supported_profile_host.py | 13 +- tests/test_source_edit_v10_transition_host.py | 155 +++++ tests/test_source_edit_v11_transition_host.py | 54 ++ tests/test_source_edit_v9_transition_host.py | 4 +- tests/test_source_reader_contract_host.py | 4 +- uv.lock | 2 +- 61 files changed, 5957 insertions(+), 165 deletions(-) create mode 100644 src/firefly_forge/sandbox_command_slots.py create mode 100644 src/firefly_forge/scm_maintain_ticket_controllers.py create mode 100644 src/firefly_forge/scm_maintain_ticket_models.py create mode 100644 src/firefly_forge/scm_maintain_tickets.py create mode 100644 src/firefly_forge/scm_natural_links.py create mode 100644 tests/test_agentic_checkpoint_codec.py create mode 100644 tests/test_agentic_checkpoint_codec_native.py create mode 100644 tests/test_agentic_checkpoint_frozen_design_host.py create mode 100644 tests/test_agentic_checkpoint_static_tools_host.py create mode 100644 tests/test_agentic_checkpoint_static_tools_native.py create mode 100644 tests/test_agentic_completed_commands_restore_host.py create mode 100644 tests/test_agentic_completed_commands_restore_native.py create mode 100644 tests/test_product_context_projection_host.py create mode 100644 tests/test_sandbox_command_ordinals.py create mode 100644 tests/test_sandbox_command_ordinals_host.py create mode 100644 tests/test_scm_maintain_dispatch_host.py create mode 100644 tests/test_scm_maintain_question_host.py create mode 100644 tests/test_scm_maintain_ticket_host.py create mode 100644 tests/test_scm_maintain_ticket_native.py create mode 100644 tests/test_scm_natural_trusted_links_host.py create mode 100644 tests/test_source_edit_v10_transition_host.py create mode 100644 tests/test_source_edit_v11_transition_host.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f6e489f..7a1bf567 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ +## 0.2.43 — 2026-10-24 + +- Allocate command ordinals durably across service instances and restored graphs. Preserve exact explicit replay, unknown-effect holds and run-lifetime command budgets. +- Restore fully completed command history through canonical native WAL and consume receipts. Keep changed source, authority, runtime contracts and interrupted effects blocked. +- Compress accumulated native checkpoint history losslessly within an explicit 8 MiB raw bound while preserving the 192 KiB snapshot and 256 KiB WAL limits. Scan decoded records against current credential custody, including generic journal reads. +- Stage complete branding files with a compact manifest, send the composed brief once, and retain the nine granted static checkpoint tools and exact frozen wireframe descriptors. +- Preserve verified GitHub delivery links and bind finite maintenance communication to the exact new native creation receipt. Lifecycle notices and owner answers grant no resume or new execution authority. +- Qualify the V11 source profile with an explicit 34-module closure and fresh native/SQL evidence, retaining all six historical profiles. Studio remains on its unchanged 0.2.42 assets and captures; see the [release notes](docs/release-notes.md#0243) for verification boundaries. + ## 0.2.42 — 2026-10-24 - Complete an uncertain remote Git checkpoint only through a new finite native request, preserving the original unknown request, retained review body, current permissions and exact branch checks. diff --git a/docs/architecture.md b/docs/architecture.md index 06990f73..16dba101 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -516,7 +516,9 @@ flowchart LR

Save the original checkpoint and intent before submitting to Bridge. If the result is uncertain, retain its identity, read or check the original result, then review one continuation. Continuing commits the one-use consume receipt before native parsing, followed by implementation and verification. On a narrow screen, scroll horizontally or focus the diagram and use the arrow keys.

-The restore ticket binds the original checkpoint, intent and selected result record. The execution owner repeats authority, source, configuration and deadline checks before restoring native Agentic history with `prompt=None`. The selected response is consumed once before the SDK parser receives it. A failure after that commit cannot authorize replay. A later repair keeps its own task identity; its mutable task key cannot replace the original implementation receipt. Owner recovery retains a committed consume boundary and holds unfinished tickets for reconciliation. See the [operator recovery journey](recovery.md#review-a-held-result-in-studio) for supported file tools and current limits. +The restore ticket binds the original checkpoint, intent and selected result record. The execution owner repeats authority, source, configuration and deadline checks before restoring native Agentic history with `prompt=None`. The selected response is consumed once before the SDK parser receives it. A failure after that commit cannot authorize replay. A later repair keeps its own task identity; its mutable task key cannot replace the original implementation receipt. Owner recovery retains a committed consume boundary and holds unfinished tickets for reconciliation. Static command, knowledge and evidence tools retain explicit grants. Command-enabled restoration verifies bounded native WAL against canonical, fully completed durable command records. Prior effects must precede the selected checkpoint; later command creation must follow the matching restore consume. Unknown, interrupted, orphaned or altered effects refuse. Fresh commands use the next durable ordinal and preserve lifetime budgets. The checkpoint runtime contract binds the restore implementation, preventing an older contract from silently gaining this behavior. See the [operator recovery journey](recovery.md#review-a-held-result-in-studio) for supported tools and current limits. + +Boundary snapshots retain lossless canonical native history within an explicit 8 MiB raw bound. New records above 64 KiB use zlib/base64 within the existing 192 KiB snapshot and 256 KiB WAL limits. Canonical envelope/base64, raw SHA-256, size, end-of-stream and trailing-data checks precede restoration. Current credential admission scans decoded records at capture, consume, restore and generic journal read without exposing raw history in returned WAL or logs. Generic journal reads suspend ambient unit bindings and inspect one bounded record at a time under current reader/configuration guards. Source admission V11 adds the decoder to its explicit 34-module closure; the checkpoint runtime contract binds custody producer and consumer. `BridgeProvider.execute()` creates a separate pending-request set for each invocation. Agentic task-graph children inherit that shared object through a context variable. Each completion tracks its own attempt before transport and clears it after a validated response, an exhausted stream or a known quota/pause response. Completing one request cannot clear another pending request. If the task graph unwraps a cancellation exception, the outer provider checks its own set before returning cancellation to the Engine. Both context tokens are reset when their scopes end. The Engine then records an unresolved submission against the original journal intent before finishing local cancellation. Regression controls cover the real `FireflyAgent` path, concurrent invocations on a shared provider, successive completions and restart through the native Store. @@ -590,6 +592,10 @@ Source: [`api.py`](https://github.com/fireflyframework/firefly-forge/blob/main/s ## Agent roles, native tools and cited context +Product branding enters implementation through a compact file manifest. Engine validates the frozen kit's digest and admits the complete assets against current credentials, then materializes them under `docs/brand//` inside the selected component. Each manifest entry carries the component-relative path, UTF-8 byte count and SHA-256. Complete tokens, logos, styles and font-license text stay available through the governed file tools. Existing conflicting content refuses materialization; the file writer also checks the empty-file hash before creating a missing asset. Cancellation, ownership and current project authority are checked around effects. + +The manifest passes through the existing brand-instruction template. The complete assembled development brief appears once in the native user prompt; backend/frontend instructions, tool rules and frozen QA descriptors remain separate instructions. Embedded SVG and font CSS therefore stay in source files, while requirements and knowledge remain complete in the brief. This changes context representation without increasing checkpoint limits or silently cutting content. Engine and runtime changes require a newly measured source capability profile before native admission. +