EPIC: Live Docker end-to-end CI and provider compatibility #58
Labels
No labels
accessibility
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
nsaspy/a0-symbolics#58
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Parent: #1
Goal
Make CI prove that the real Dockerized
a0-symbolicsproduct works end-to-end, including Agent Zero startup, the single Prolog-RLM integration, prompt/context compilation, the actual model transport, OpenRouter, native tool schemas, and a completed live agent turn.Unit tests and direct Python bridge calls remain useful but are not sufficient release evidence.
Current failure this epic must catch
A real OpenRouter/Z.AI request currently fails with:
The Responses transport can synthesize
tool_choice: requiredwhen function tools are present. Provider-specific semantics must be normalized before dispatch so Z.AI/OpenRouter receivesautowhere required. The live test must reproduce and prevent this class of integration failure.Live CI contract
CI must build the same Docker image path used by Symbolics development/production and start the real service. The test then exercises the externally reachable application rather than importing plugin bridge classes directly.
Required path:
DockerfileLocalor the exact production-equivalent Symbolics image;Secrets and variables
Required GitHub Actions secret:
OPENROUTER_API_KEYNon-secret repository variable:
SYMBOLICS_LIVE_MODEL— live CI model override. Keep a cheap known-good default in workflow/config when unset.No other provider credential should be required for the default live gate.
Test tiers
Pull-request gate
Main/release gate
Runtime assertions
tool_choiceis legal for the selected model/provider.Failure enumeration artifact
Every failed live run should capture enough evidence to enumerate problems quickly:
docker compose psNever upload API keys, auth cookies, passwords, or secret values.
Acceptance
tool_choicecompatibility is covered by a regression.Local developer command target
Provide one canonical command, ideally something equivalent to:
The script should build/start/test/diagnose/clean up itself so local and CI behavior do not drift.
Cross-repo generic-contract handoff: the
tool_choice: required-> provider rejects withTool choice must be autofailure is now tracked upstream aslost-rob0t/prolog-rlm#257.Ownership split:
prolog-rlm#257owns provider/model capability normalization at the reusable request/transport boundary, with deterministic exact-payload tests plus real OpenRouter evidence when credentials are available;Upstream TDD explicitly forbids globally forcing
auto: routes that supportrequiredmust preserve it, and compatibility normalization must not grant tool authority/effects.Upstream handoff update:
prolog-rlmPR #259 now realizes the generic provider-boundary contract at exact head6644035d4a86ba9a363448ecd2a182566ff5213b, with deterministic stream/non-stream request normalization plus green REAL and pinned Paid OpenRouter gates.Important integration detail: the upstream runtime does not infer model legality from route-name strings and does not globally downgrade
required. The consuming trusted provider/model profile must declare the known legal modes, e.g.tool_choice_modes([auto])for the affected Z.AI-backed route. With that profile, simplerequirednormalizes toauto; providers supportingrequiredpreserve it; specific-function selectors are not silently weakened.Keep this issue's Docker E2E as the product proof: configure the affected live profile through the normal trusted Prolog-RLM provider configuration, then require the real Agent Zero turn to complete. Do not add an Agent Zero-local request rewrite. PR #259 is ready but remains unmerged pending the upstream repository's explicit merge-on-green authorization gate.