feat(email-writing): add hardened contextual-orchestrator boundary - #1356
feat(email-writing): add hardened contextual-orchestrator boundary#1356seonghobae wants to merge 51 commits into
Conversation
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
…ask4' into feat/llm-email-writing-orchestrator-task5 Retarget Task 5 onto live #1329 head 4570747 (merged onto live #1328 51fb5e8 / #1327 fb7c406 / #1322 bfc2df1 / develop@dd8d1519). Preserve the hardened contextual-orchestrator boundary. Do not restore write-capable Task 5 promotion/finalize workflows. Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
|
@coderabbitai review Please review the unchanged exact current head |
|
|
Bring feat/llm-email-writing-candidate-task6 onto the current feat/llm-email-writing-orchestrator-task5 head without changing Task 6 candidate-parse semantics or restoring write-capable workflows. Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
|
@coderabbitai review |
|
Scope
This Draft PR implements Task 5 only: Naruon's hardened, provider-neutral
contextual-orchestratorboundary plus owner-scoped orchestration configuration. It excludes Candidate/Judge admission, review API, Inkspan editor integration, send/publish behavior, calibration policy, and release behavior.Security/privacy behavior retained includes authenticated owner-scoped configuration, encrypted inference credentials, bare-HTTPS-origin and DNS validation, pinned-address transport, redirect denial, DNS-rebinding checks, bounded request/response/trace/cardinality/retry/circuit state, strict JSON handling, redacted stable errors, and bounded Judge worker-lane lifecycle. Browser input never becomes endpoint/credential/provider authority.
Current stack state
Direct parent #1329 is
64d1f746723616b0111eb40b130d6f07ed413a86. Current Task-5 head isbeb28466573b2163df97b027a6d3ac3776773869. No force-push or destructive rebase was used.The unique Task-5 delta remains the orchestration TDD workflows, owner-scoped config migration/API/model/scope wiring, contextual-orchestrator client/port, required application wiring, and focused hardening/coverage tests. Root design documents are inherited through the stack and are not Task-5-owned semantic delta.
Current causal repair
Task-7 predecessor head
a2c07ea13f5503b1877461ff0477e6e5f0528a59eventually acquired a Python 3.14 runner after its--noconftestisolation change. Collection then failed before Judge tests because importingservices.email_writing_orchestrator_portruntime-importedservices.contextual_orchestrator_client, which transitively materializedcore.config.settingsand required applicationDATABASE_URLmerely to import the Task-5 port.That is a Task-5 dependency-direction/import-side-effect defect, not a Task-7 test defect. The repair is test-first:
a08ef0b7f3dc95f69af4bb21a742de92eea587b4adds a subprocess architecture regression that removesDATABASE_URL, imports the port, and requires the concrete contextual-orchestrator adapter andcore.confignot to materialize;beb28466573b2163df97b027a6d3ac3776773869moves concrete adapter/type imports behindTYPE_CHECKING, keeping the domain-facing port config-free at runtime while retaining the static typing boundary.No
DATABASE_URLworkflow bootstrap,PYTHONPATHworkaround, or Task-7 conftest restoration was introduced.Authority boundary
contextual-orchestratorremains read-only to this writer and owns provider-neutral routing/test-time compute allocation. Naruon owns the authorized transport/configuration boundary and workflow policy around it. No deterministic keyword/regex semantic fallback is permitted; upstream failure produces typed unavailability/abstention rather than a lexical substitute.Evidence and continuation
For exact current head
beb28466573b2163df97b027a6d3ac3776773869,task5-contractsjob100235583025/ run33626560905andregressionsjob100235582463/ run33626560809are currently queued before executed steps. They are non-passing. Central runner acquisition is tracked through.github#712; the leaf head is not churned merely to retrigger it.The repaired ancestry has been ordinarily propagated without force to current task-owned descendants:
6a37753c86959ae07e6257496658ea4ae17f513c;ad888235577ba87f32d96e06fab1cfb9992d84a9;32c7e33c304d1b500ddc230044e2877edcf411c8;c958b9964f925b6dca99e4c2c4db671934511a40;4c14771acddd150f59b5ce0888d15bae49686b0c.External Cursor #1402 remains separately read-only at
3d6b3341c5dd15512d5d60cd5f8d95a1bbc6d846and is not writable ancestry.Fresh immutable dependency evidence still shows
fast-mlsirm v0.9.1at tag commit09f762ded35786dd1078222a4577ff09d649816fwith required public Judge symbols in tagged source, but its GitHub release has no attached distributable asset. Runtime import remains gated on an approved immutable distributable/package source, artifact hash and provenance, Python 3.14 compatibility, and Naruon's canonical hash lock.Merge boundary
Keep Draft while current-head evidence is regenerated. Merge only on an unchanged head satisfying live rulesets/protection, every applicable exact-head gate, zero valid unresolved findings, and any qualifying independent approval actually required after the last push. Pending/queued/skipped-required/cancelled/neutral/failed/absent/stale/predecessor/synthetic/model-only/status-only/author-only evidence is non-passing.
No user-facing writing guidance is shipped by this orchestration-boundary slice; editing and sending remain available.