Draw the HelmDocs integration boundary #19
Notifications
Due Date
No due date set.
Depends on
#10 Define the common schema for RFPs and responses
christian/helmdocs-proposal-system
#11 Define the tenancy, identity, and authorization model
christian/helmdocs-proposal-system
Reference: christian/helmdocs-proposal-system#19
Reference in New Issue
Block a user
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?
Question
The existing bidder engine — drafting, compliance matrix, go/no-go, skeleton, export — already works and was proven on real solicitations. The grilling surfaced that this may be the actual moat rather than the later enhancement it was framed as, because native authoring is the only path that produces genuinely clean structured responses.
Resolve: the interface between the greenfield transmission system and HelmDocs (API shape, MCP, auth, identity mapping); what flows each way; whether v1 ships any integration or only an interface designed to accept one; and how a vendor authoring natively gets a better outcome without native authoring becoming mandatory.
Parent: #1
Reframe: extraction is the first thing to cross this boundary
This ticket was drawn abstractly. It now has a concrete first subject.
novelpad-desktopalready contains a production extraction pipeline atapps/website/app/rag/solicitation-preprocessor/- roughly twenty files, each with tests:page-profile.ts,route-pages.ts) choosing an extractor per pagefree tier failed, at confidence 0.5
text-validity.tsto detect bad text layers, per-extractioncostUsd, and a versionedself-healing reprocess policy that deliberately never re-runs
readyrows because Document AI isbillable
Why this lands here. The map's standing preference is reuse the thinking and the prompts, not
the runtime. That was written before anyone had looked at the size of the runtime in question.
Re-implementing this for v1 would duplicate a smart router, a cost model and an OCR fallback ladder
for no gain - but importing it wholesale contradicts the separate-deployable decision from #2.
"Call it across an API boundary" is exactly what this ticket exists to decide, and extraction is
the first real thing to cross.
Three facts to decide against, all verified rather than assumed:
free-tier-extract.server.tsthrows on amissing
GCP_BUCKET_NAME, then onGCP_SERVICE_ACCOUNT_KEY_PATH- even for the buffer paththat makes no cloud call. Reuse means either supplying credentials or refactoring the storage
import out of module scope.
OutlineNodestructure and per-pagesectionPath, which is the source forrequirement.provenance_spanand the input to spancoverage. That was the shakiest assumption in the completeness decision and it now has a real
backing.
which is an argument for the boundary being a service call with caching rather than a library
import.
Also relevant:
export-fixture.server.tsalready emits a committable fixture layout(
extraction.json+pages.json, embeddings excluded). #30's ground-truth files can start frompipeline output and be hand-corrected, rather than authored blind.