Skip to content

Barrel seams + fetch fixes for embarc-data features (accredited-portal → VC-firm → startup/rounds → round-participation → ADV)#207

Merged
sroussey merged 21 commits into
mainfrom
round-participation
Jul 21, 2026
Merged

Barrel seams + fetch fixes for embarc-data features (accredited-portal → VC-firm → startup/rounds → round-participation → ADV)#207
sroussey merged 21 commits into
mainfrom
round-participation

Conversation

@sroussey

Copy link
Copy Markdown
Contributor

Supersedes #205. This is the sec-side surface the stacked embarc-data feature work builds on, all on one branch (based on accredited-portal, now merged up to main).

What's here (sec only — no domain data lives in sec)

Testing

bun test → 1910 pass / 0 fail; bun run build clean.

Companion

Pairs with the embarc-data PR (sroussey/embarc-data) that consumes this surface.

🤖 Generated with Claude Code

https://claude.ai/code/session_01SN7APmki7GFHYYyhBd8ZFM

sroussey and others added 21 commits July 17, 2026 14:12
Replace the static RESOLVER_IDS array and hardcoded per-kind switches with
the runtime ResolverExtensionRegistry everywhere. ResolverId becomes a
runtime-validated string; coverage and drop-previous dispatch through the
registered kind's closures. Wire registerSecResolvers() into the CLI
bootstrap and into the tests that enumerate resolver kinds.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SN7APmki7GFHYYyhBd8ZFM
…on bootstrap

setupAllDatabases() -> bootstrapComponentVersions() now enumerates the
ResolverExtensionRegistry, and this path also runs from `init` (which skips
the preAction hook that calls registerSecResolvers). Register idempotently
here so resolver component-version rows are seeded on every setup path.
- databaseExtensions: add registerDatabaseSetupHook/runDatabaseSetupHooks;
  setupAllDatabases runs them after EnvToDI/Sqlite.init so a downstream package's
  tables + resolver kinds materialize on the `init` path too (which bypasses the
  CLI preAction hook), not only `db setup`.
- ResolverCoverage: split the coverage guard so a non-family resolver kind
  without a coverage closure is no longer mislabeled "family-tier"; wrap the
  over-length import.
- barrel: export registerDatabaseSetupHook, setupAllDatabases, Sqlite,
  computeResolverCoverage (needed by the downstream init-path + dispatch tests).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SN7APmki7GFHYYyhBd8ZFM
…ests

Lets a downstream feature package validate TypeBox schemas in tests without
taking a direct typebox dependency.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011br6tfY3N2Ce5WhgbEs2wK
Downstream task subclasses with interface-typed I/O hit the same DataPorts
constraint sec's own tasks bridge with TaskPorts<T>; export it so they reuse
it instead of duplicating the type.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011br6tfY3N2Ce5WhgbEs2wK
SecFetchTask always forced SecUserAgent last in the header merge, so a
caller-supplied User-Agent (e.g. a browser UA needed for a
Cloudflare-fronted host) was silently overwritten. Flip the merge order
so caller headers win, matching SecFetchJob's existing precedence.
SecCachedFetchTask.execute() rebuilt its outgoing fetch input from
scratch (url/method/response_type only), silently dropping any
headers merged onto defaults by SecFetchTask's constructor. That
made the just-fixed caller-UA override a no-op for every cached-fetch
subclass (FetchQuarterlyIndexTask, FetchCompanyFactsTask, etc.) since
none of them route headers to the wire. Preserve input.headers when
present.
@sroussey
sroussey merged commit ed85b7b into main Jul 21, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants