Batch file pagination#245
Merged
Merged
Conversation
|
🚅 Environment control-layer-pr-245 in industrious-light has no services deployed. |
hachall
pushed a commit
that referenced
this pull request
Jan 23, 2026
* feat: enrich model endpoints * fix: collapse conditions * feat: remove nested paragraphs in transaction modal * feat: standardised cursor pagination and implemented into batches table * fix: FileRequests cursor UI * fix: file content pagination params * fix: tests * fix: tests
sejori
added a commit
that referenced
this pull request
Apr 28, 2026
Extends FusilladeResponseStore to hold an Option<PostgresResponseStepManager> and implements the new multi-step ResponseStore trait methods that have direct one-to-one mappings to the storage layer: - record_step → PostgresResponseStepManager::create_step - mark_step_processing → ... ::mark_step_processing - complete_step → ... ::complete_step - fail_step → ... ::fail_step - next_sequence → MAX(step_sequence) + 1 from list_chain The transition function (next_action_for), execution hooks (execute_model_call, execute_tool_call), and assembly logic (assemble_response) intentionally fall through to the trait defaults. Those are the heart of the Open Responses domain logic and warrant focused review under their own follow-up issues (COR-346 / 347 / 348 / 349). Validated end-to-end: - dwctl binary builds against the workspace [patch.crates-io] overrides pointing at local fusillade and onwards branches. - Migration #96 applies cleanly; response_steps table exists in fusillade DB; response_step_id columns exist on http_analytics and tool_call_analytics in dwctl DB. - dwctl starts up, fusillade daemon registers, /healthz returns 200, /admin/openapi.json serves the admin API spec. Also updates fail_response in store.rs to pass the status code as the third argument to PostgresRequestManager::fail_request, picking up the signature change introduced by fusillade #245. [patch.crates-io] entries in workspace Cargo.toml are deliberately included so reviewers can reproduce the end-to-end test. They must be removed before merge — flagged in the PR description.
8 tasks
sejori
added a commit
that referenced
this pull request
Apr 30, 2026
## Summary Schema migration plus storage-layer bridge wiring for the multi-step Open Responses orchestration described in [fusillade plan](https://github.com/doublewordai/fusillade/blob/main/docs/plans/2026-04-28-multi-step-responses.md). ### Migration - \`response_step_id\` column on \`http_analytics\` and \`tool_call_analytics\` (nullable, partial-index). - CHECK constraint on \`tool_sources.kind\` documenting the supported set: \`'http'\` (default) and \`'agent'\` (sub-agent dispatch). ### Bridge wiring (\`dwctl/src/responses/store.rs\`) - \`FusilladeResponseStore\` now holds an \`Option<PostgresResponseStepManager>\` via a new \`with_step_manager\` builder. Existing call-sites that don't need multi-step continue to work unchanged. - New \`ResponseStore\` trait methods mapped one-to-one to storage primitives: \`record_step\`, \`mark_step_processing\`, \`complete_step\`, \`fail_step\`, \`next_sequence\`. The other multi-step methods (\`next_action_for\`, \`execute_model_call\`, \`execute_tool_call\`, \`assemble_response\`) fall through to the trait defaults — those are the heart of the Open Responses domain logic and warrant focused review under their own follow-up issues. ### \`fail_request\` signature update \`store::fail_response\` now passes a status code (\`500\` as the catch-all). This picks up the signature change in fusillade #245 (\`fix: accept status code in fail_request\`). Without this, neither this PR nor any future fusillade bump would compile. ### Local-dev overrides (must be removed before merge) The workspace \`Cargo.toml\` includes \`[patch.crates-io]\` entries pointing at sibling \`../fusillade\` and \`../onwards\` checkouts. This is so the bridge wiring can be exercised end-to-end before the upstream releases land: \`\`\`toml [patch.crates-io] fusillade = { path = "../fusillade" } onwards = { path = "../onwards" } \`\`\` **Remove these before merging.** Once fusillade #248 and onwards #185 are released to crates.io, bump \`fusillade\` and \`onwards\` versions in \`dwctl/Cargo.toml\` instead. ## Linear coverage - Parent: [COR-330](https://linear.app/doubleword/issue/COR-330) - Closes [COR-344](https://linear.app/doubleword/issue/COR-344) — analytics columns + tool_sources.kind constraint - Partial [COR-345](https://linear.app/doubleword/issue/COR-345) — \`FusilladeResponseStore\` storage primitives wired; remaining trait methods (transition, execution, assembly) deferred to follow-up ### Deferred to follow-ups - **COR-346/347**: Transition function (Open Responses tool-call semantics + sub-agent dispatch via \`tool_sources.kind\`). - **COR-348**: Assembly logic — chain walk → OpenAI Response JSON. - **COR-349**: \`fusillade::RequestProcessor::process\` dispatching by endpoint. - **COR-350**: \`GET /v1/responses/{id}/steps\` endpoint. - **COR-351**: Extend \`/admin/api/v1/tool-sources\` to accept \`kind\`. - **COR-352**: Replace \`create_batch_of_1\` with multi-step-capable creation. - **COR-353**: SIGTERM drain handler. - **COR-354**: Surface \`max_response_step_depth\` and \`max_response_iterations\` as config knobs. ## Validation End-to-end with the local crate overrides: - [x] \`cargo build --package dwctl --bin dwctl\` succeeds. - [x] \`sqlx migrate run\` applies migration #96 cleanly against the dwctl DB. - [x] \`response_steps\` table exists in fusillade DB; \`response_step_id\` columns exist on \`http_analytics\` and \`tool_call_analytics\` in dwctl DB. - [x] \`./target/debug/dwctl\` starts up, registers the fusillade daemon, listens on :3001. - [x] \`GET /healthz\` returns \`200 OK\`. - [x] \`GET /admin/openapi.json\` serves the admin API spec. ## Test plan - [ ] Reviewer: confirm \`[patch.crates-io]\` is removed before merge once upstream releases land. - [ ] After merge, follow-up PRs implement the deferred sub-issues (transition, assembly, etc.) using the bridge wiring this PR establishes. --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
closes #243