feat(4d): hostet inngang — main.py wrapper rundt run_project på én asyncio-løkke
To målinger avgjorde formen FØR koden: (1) hosting-pakkas InvocationsHostServer
finnes kun i bygg som krever agent-framework-core>=1.13.0 (treet låser 1.9.0;
eneste 1.9-kompatible bygg er en forlatt alfa som importerer mcp udeklarert),
(2) et gjenbrukt bygget workflow er single-use på 1.9.0 (kall-serie [2,0,0] —
rundetaket persisterer; ferskt objekt per kall er ren kontroll). Derfor spikens
§5-fallback: hosting.py serverer kontrakten (8088/PORT, /readiness,
/invocations, SIGTERM→0) selv, stdlib asyncio på ÉN løkke — aldri as_agent()
(gatene ligger utenfor grafen), aldri tråder (NG1-guarden fanget første utkast
med ThreadingHTTPServer; asyncio-formen består den by construction).
Payload whitelistes på run_projects signatur — ukjente felt nektes ved navn
(400), aldri stille droppet; profile defaulter til azure kun her. ValueError →
400, alt annet → 500 {error_type, error}; Rejection er vellykket kjøring → 200.
outbox.outcome_payload ekstrahert som den ENE kopien av validated/rejected-
forgreningen (kø-(p)-regelen). azure.yaml validert GRØNN mot begge autoritative
skjemaer (jsonschema, hentet ferskt); ingen env:, ingen startupCommand (imagets
CMD er den ene kopien). Dockerfile: 3.12-slim-bookworm + git + uv==0.9.8 +
uv sync --frozen --no-dev; git archive <indeks-tre> | docker build
--platform linux/amd64 grønn på nøyaktig de stagede bytene.
Iron Law fulgt: testfila rød ved collection FØR modulen fantes. 835 passed /
4 skipped (fra 821), ruff+format+mypy rene. Seks mutasjoner mot HELE suiten,
alle røde på riktig test: detach felt-mappingen · dropp ukjente felt stille ·
flipp 400/500 · detach azure-defaulten · detach SIGTERM-handleren · detach
main.py-shimen (de to siste kun fanget av subprosess-testen, P4-presedensen).
Deploy IKKE utført — azd-steget er operatørens.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PEiiSGRShizKc771ZBa1iq
This commit is contained in:
parent
63eec917d2
commit
426ccb0ad6
8 changed files with 766 additions and 14 deletions
|
|
@ -88,9 +88,33 @@ def write_outbox(
|
|||
encoding="utf-8",
|
||||
)
|
||||
|
||||
outcome_path = directory / f"{stem}-outcome.json"
|
||||
outcome_path.write_text(
|
||||
_dump(
|
||||
{
|
||||
**keys,
|
||||
**outcome_payload(outcome, checker_verdict=checker_verdict, verdict_id=verdict_id),
|
||||
}
|
||||
),
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
return proposal_path, outcome_path
|
||||
|
||||
|
||||
def outcome_payload(
|
||||
outcome: ValidatedProposal | Rejection,
|
||||
*,
|
||||
checker_verdict: str | None,
|
||||
verdict_id: str,
|
||||
) -> dict[str, Any]:
|
||||
"""The outcome artefact's payload minus the file keys — the ONE copy of the
|
||||
validated/rejected branching, shared by ``write_outbox`` and the hosted invocations
|
||||
response (``hosting._response_payload``). Two copies of the branch would drift, and a
|
||||
drifted copy would let the HTTP surface describe an outcome the outbox never wrote —
|
||||
the ``to_ore`` single-source rule (kø-(p)) applied to a payload shape."""
|
||||
if isinstance(outcome, ValidatedProposal):
|
||||
outcome_payload: dict[str, Any] = {
|
||||
**keys,
|
||||
return {
|
||||
"outcome_type": "validated",
|
||||
"p10": outcome.p10,
|
||||
"p50": outcome.p50,
|
||||
|
|
@ -99,18 +123,12 @@ def write_outbox(
|
|||
"checker_verdict": checker_verdict,
|
||||
"verdict_id": verdict_id,
|
||||
}
|
||||
else:
|
||||
outcome_payload = {
|
||||
**keys,
|
||||
"outcome_type": "rejected",
|
||||
"reason": outcome.reason,
|
||||
"checker_verdict": checker_verdict,
|
||||
"verdict_id": verdict_id,
|
||||
}
|
||||
outcome_path = directory / f"{stem}-outcome.json"
|
||||
outcome_path.write_text(_dump(outcome_payload), encoding="utf-8")
|
||||
|
||||
return proposal_path, outcome_path
|
||||
return {
|
||||
"outcome_type": "rejected",
|
||||
"reason": outcome.reason,
|
||||
"checker_verdict": checker_verdict,
|
||||
"verdict_id": verdict_id,
|
||||
}
|
||||
|
||||
|
||||
def write_run_config(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue