Skip to content

feat(bootstrap-db): audit staging -> silver field parity + connectors-ddl CI gate - #2077

Closed
mitasovr wants to merge 5 commits into
constructorfabric:mainfrom
mitasovr:claude/ddl-extraction-script-8883ea
Closed

feat(bootstrap-db): audit staging -> silver field parity + connectors-ddl CI gate#2077
mitasovr wants to merge 5 commits into
constructorfabric:mainfrom
mitasovr:claude/ddl-extraction-script-8883ea

Conversation

@mitasovr

@mitasovr mitasovr commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Why

Two contracts are invisible to every existing lane, because both are only observable in a real ClickHouse where every model is materialised at once:

  1. The committed connectors-ddl snapshot. A gold/staging/bronze relation added without regenerating it simply will not exist on the next fresh cluster (New environment: Git + Task Delivery KPIs (Commits, PRs Merged, Tasks Completed, Cycle Time, …) never load until silver tables are manually reset #1744). Today the only guard is a sticky reminder comment, and an ignored reminder reintroduces exactly that drift.
  2. staging -> silver field parity. A silver class_* model is a UNION ALL of every staging model tagged silver:<target> (union_by_tag). ClickHouse matches UNION branches by position and takes the column names from the first branch, so a contributor that renames, reorders or retypes a column does not fail the build — it silently misaligns data, or widens the published silver type depending on which connectors happen to be enabled.

This PR adds the audit for (2) and a CI lane that gates both.

What

src/ingestion/scripts/bootstrap-db/check-field-parity.py — reads system.columns for the structure and dbt/target/manifest.json for the staging -> silver mapping (that mapping lives only in the dbt tags, not in the database), then fails on any divergence:

  1. coverage — every non-ephemeral model in the manifest has a relation. Without this, a connector whose discover failed would shrink the comparison silently and the audit would pass for the wrong reason.
  2. columns — contributor and target expose the same column names.
  3. order — identical column positions, because the UNION is positional.
  4. types — byte-identical system.columns.type; Nullable(T) vs T counts, since that split decides the published silver type.

No baseline file, no warning tier: everything is a hard failure. Same CLICKHOUSE_* env contract as the sibling scripts, and it sources the local .env the way bootstrap-db.sh does (--no-env-file to audit another cluster).

Ephemeral contributors are covered too. jira__task_field_history is an ephemeral pass-through over staging.jira__task_field_history, a table written by the jira-enrich Rust binary whose DDL lives in the create_task_field_history_staging macro (ADR-003) — so it has no dbt DAG edge to its silver target. The audit follows the source() dependency to that table, which means a future YouTrack twin of the enrich table gets the same guard for free, as long as it keeps the shape (ephemeral pass-through + the silver:<target> tag).

.github/workflows/connectors-ddl.yml — one empty ClickHouse pinned to the production version from pins.env, then straight into bootstrap-db.sh (real connector discover, the real destination-clickhouse connector, real dbt, real migrations) -> re-dump -> fail on any snapshot diff -> audit field parity.

The committed snapshot is deliberately not applied first. create-bronze-placeholders.sh issues CREATE ... IF NOT EXISTS, so a relation the snapshot still carries but the current code no longer produces would survive into the fresh dump, hide its own deletion from the diff and break convergence — the same reason bootstrap-db.sh sets BOOTSTRAP_SKIP_SNAPSHOT=1 during generation.

pull_request (never pull_request_target) plus a head-repo guard, so the lane runs only for branches in this repository: the job executes PR code and needs the HubSpot / Salesforce credentials whose CDK discover calls a live API, and secrets never reach fork PRs. Those secrets are checked up front, so a missing one fails in seconds instead of 20 minutes into the bootstrap. Drift fails with the regeneration command, the first 200 diff lines inline and the full diff as an artifact; the job never commits.

Findings this already surfaces

The snapshot was stale. feat(gold): add metric evidence serving tables (6e2c56b) added six gold relations without regenerating it, so a fresh cluster would not pre-create them. Regenerated here in its own commit — without it the new lane is red on arrival.

Field parity, over a full bootstrap warehouse (270 relations, 39 union targets): 74 findings — 66 nullable-only, 8 representation, 0 coverage gaps, 0 unchecked. Column sets and column order are clean everywhere. The 8 representation-level ones:

Divergence Where
commit_order UInt8 vs Int64overflows at the 256th commit in a PR github, gitlab -> class_git_pull_requests_commits
hire_date, termination_date Nullable(Date) vs Nullable(DateTime) active_directory, ms_entra -> class_people
visited_page_count Nullable(Int64) vs Nullable(Decimal(38, 9)) m365 onedrive -> class_collab_document_activity
close_date Nullable(Date) vs Nullable(Date32)Date cannot hold pre-1970 hubspot -> class_crm_deals

Fixing those is deliberately not in this PR. Note the consequence: the lane is red until they are fixed — either land the type alignments first, or merge this and treat the lane as advisory until it is made a required check.

Verification

Every check was proven to trip, by mutating an empty table in a throwaway warehouse and restoring it (SHOW CREATE identical before/after):

Case Result
ADD COLUMN probe_extra String FAIL columns … extra
DROP COLUMN report_period FAIL columns … missing
MODIFY COLUMN calls_count Int32 FAIL types … [representation]
MODIFY COLUMN user_name … AFTER calls_count FAIL order … positional UNION mismatch + both position lists
enrich table absent FAIL coverage … read by the ephemeral contributor … but absent
enrich table retyped / column dropped FAIL … (via ephemeral pass-through) …

The lane's own steps were rehearsed against a real warehouse: dump-ddl.sh + the diff gate is what caught the stale snapshot above, and the strict audit is the run reported in "Findings". An earlier draft also applied the committed snapshot to an empty cluster and audited that; measured, it compared 1 of 141 contributors (153 relations absent, since the snapshot keeps only the gold-referenced staging tables), so it was dropped.

The pass-through detector was unit-checked against SELECT * (with a -- depends_on hint and a trailing ;) plus the shapes it must reject: explicit column list, SELECT *, 1 AS extra, WHERE, JOIN, CTE — those resolve to UNCHECKED rather than being compared against the wrong relation.

Needs doing before this lane can pass

  • Repository secrets: HUBSPOT_ACCESS_TOKEN, SALESFORCE_CLIENT_ID, SALESFORCE_CLIENT_SECRET, SALESFORCE_INSTANCE_URL. Their CDK discover calls a live API, so fake values fail. The workflow checks them up front and fails in seconds rather than 20 minutes into the bootstrap. The documented alternative — seeding those two connectors' bronze from the snapshot instead — is not wired up here, because it would freeze exactly the schemas the gate is meant to watch.
  • No path filter, matching e2e-bronze-to-api.yml's convention (PR-only, all paths). If the ~40 minutes on every PR is too much, add a paths: filter on src/ingestion/**.
  • connectors-ddl-reminder.yml is now redundant with a real gate; retiring it is a separate call, so it is left in place.

Commits

Five, each droppable on its own: the audit script, the connectors-config.yaml regeneration (two spec-required fields moved), the CI lane (plus three doc references that described the snapshot as "CI-generated" — CI regenerates it to compare, but the committed file is produced by a human), the snapshot regeneration for the metric-evidence tables, and the follow-up that drops the snapshot-apply phase.

Summary by CodeRabbit

  • New Features
    • Added new metric evidence and task worklog data tables to support richer reporting and traceability.
    • Added automated validation for connector schema consistency, including field coverage, ordering, and data types.
  • Bug Fixes
    • Pull requests now detect connector DDL drift before changes are merged.
    • Improved connector configuration examples and updated Salesforce date settings.
  • Documentation
    • Expanded setup guidance and documented staging-to-silver field parity auditing and validation results.

Roman Mitasov and others added 2 commits July 30, 2026 22:47
A silver `class_*` model is a UNION ALL of every staging model tagged
`silver:<target>` (the `union_by_tag` macro). ClickHouse matches UNION
branches BY POSITION and takes the column names from the first branch, so
a contributor that renames, reorders or retypes a column does not fail
the build — it silently misaligns data or widens the published silver
type depending on which connectors happen to be enabled. Neither drift is
visible in the dbt DAG or in the connectors-ddl snapshot (which carries a
single staging table by design).

`check-field-parity.py` reads `system.columns` from a bootstrap warehouse
— the only place where every model is materialised at once — and the
staging -> silver mapping from the dbt manifest tags, then fails on any
divergence: column set, positional order, exact type. There is no
baseline file and no warning tier, so a `Nullable(T)` vs `T` split fails
like a renamed column.

The run also fails when a model present in the manifest has no relation
in the warehouse: a connector whose `discover` failed would otherwise
shrink the comparison silently and the audit would pass for the wrong
reason.

Ephemeral contributors are covered when they are plain pass-throughs over
a single `source()`/`ref()` — the shape of `jira__task_field_history`,
whose physical table is written by the `jira-enrich` Rust binary and
whose DDL lives in the `create_task_field_history_staging` macro
(ADR-003), so it has no dbt DAG edge to its silver target. The audit
follows the `source()` dependency to that table, which means a future
YouTrack twin of the enrich table gets the same guard for free.

Like `bootstrap-db.sh`, the script sources the `.env` next to it and lets
those values win over the inherited environment; `--no-env-file` points
the audit at another cluster instead.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Roman Mitasov <Roman.Mitasov@constructor.tech>
`generate-connectors-config.sh` emits exactly the fields each connector
spec marks required, and two of those moved: zoom's `start_date` is no
longer required, salesforce's now is. The hubspot and salesforce
credential fields keep their `env:` indirection so no secret lands in the
committed file.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Roman Mitasov <Roman.Mitasov@constructor.tech>
@mitasovr
mitasovr requested a review from a team as a code owner July 30, 2026 14:48
@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Regenerate the connectors-ddl snapshot

This PR changes src/ingestion/**. If your change affects any
bronze / silver / gold schema, regenerate the committed DDL snapshot
and include it in this PR.

Prerequisites (details: src/ingestion/scripts/bootstrap-db/README.md):

  • docker + a fresh throwaway ClickHouse 25.7.5 (README "Local ClickHouse for testing")
  • .env from .env.bootstrap.example pointing at it; use the host LAN IP,
    reachable from both the host and connector containers
    (host.docker.internal does not resolve on the macOS host itself)
  • python3.12 or python3.11 on PATH (pinned dbt venv)
  • HubSpot + Salesforce credentials in .env — their discover calls the
    live APIs; without them, apply ../connectors-ddl/{hubspot,salesforce}.sql
    (relative to bootstrap-db/) to seed their bronze, then run the dbt step
cd src/ingestion/scripts/bootstrap-db
set -a; source pins.env; source .env; set +a
./bootstrap-db.sh connectors-config.yaml   # fresh ClickHouse 25.7.5
./dump-ddl.sh                              # writes scripts/connectors-ddl/*.sql

Commit the resulting scripts/connectors-ddl/*.sql diff. If nothing
changed, no snapshot update is needed. (Regeneration is manual for now.)

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Adds a PR workflow that validates the committed connectors DDL snapshot through placeholder replay, full bootstrap drift detection, and staging-to-silver field parity checks. It also adds the parity CLI, ClickHouse startup helper, new insight tables, connector configuration updates, and documentation.

Changes

Connectors DDL validation

Layer / File(s) Summary
DDL snapshot and bootstrap inputs
src/ingestion/scripts/connectors-ddl/insight.sql, src/ingestion/scripts/bootstrap-db/connectors-config.yaml
Adds six insight tables and updates connector bootstrap date settings.
Field parity audit
src/ingestion/scripts/bootstrap-db/check-field-parity.py
Adds manifest-based ClickHouse checks for relation coverage, columns, order, and types, including ephemeral pass-through handling.
ClickHouse workflow orchestration
.github/workflows/connectors-ddl.yml, .github/workflows/scripts/start-clickhouse.sh
Runs snapshot validation and full bootstrap drift checks in separate ClickHouse phases, with artifacts and logs on failure.
Validation documentation and supporting notes
src/ingestion/scripts/bootstrap-db/README.md, docs/domain/ingestion/specs/ADR/0007-fresh-cluster-placeholders.md, src/ingestion/scripts/create-bronze-placeholders.sh, src/ingestion/tests/e2e/lib/migration_applier.py
Documents the committed snapshot, parity audit, connector configuration, and related logging comments.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant PullRequest
  participant Workflow
  participant ClickHouse
  participant Bootstrap
  participant ParityAudit
  PullRequest->>Workflow: trigger connectors-ddl validation
  Workflow->>ClickHouse: start phase 1
  Workflow->>ParityAudit: check committed snapshot parity
  Workflow->>ClickHouse: start fresh phase 2
  Workflow->>Bootstrap: run full bootstrap
  Bootstrap->>ClickHouse: build warehouse
  Workflow->>Workflow: compare regenerated DDL
  Workflow->>ParityAudit: check rebuilt warehouse parity
Loading

Possibly related PRs

Suggested reviewers: cyberantonz, ktursunov

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main changes: staging-to-silver field parity auditing and a connectors-ddl CI gate.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Roman Mitasov and others added 2 commits July 30, 2026 23:35
The committed connectors-ddl snapshot and the staging -> silver field
contract are the two things no existing lane can see: both are only
observable in a real ClickHouse where every model is materialised at once.
Until now the only guard was a sticky reminder comment, and an ignored
reminder reintroduces the constructorfabric#1744 drift — discovered at the next fresh
deploy.

Two phases, each on its OWN throwaway ClickHouse pinned to the production
version from pins.env:

  1. Apply the committed snapshot to an empty cluster exactly as a fresh
     deploy does (create-bronze-placeholders.sh), then audit field parity
     with --allow-missing-relations: the snapshot carries only the
     gold-referenced staging tables by design, so a strict coverage
     demand would fail every run for the wrong reason.
  2. A second, virgin cluster: bootstrap-db.sh (real connector
     `discover`, the real destination-clickhouse connector, real dbt, real
     migrations), re-dump, fail on any snapshot diff, then audit field
     parity strictly.

Phase 2 must not inherit phase 1's cluster: the applicator uses
CREATE ... IF NOT EXISTS, so a relation the committed snapshot still
carries but the current code no longer produces would survive into the
fresh dump, hide its own deletion from the diff, and break convergence —
the same reason bootstrap-db.sh sets BOOTSTRAP_SKIP_SNAPSHOT=1.

`pull_request` (never `pull_request_target`) plus a head-repo guard: the
job runs PR code and needs the HubSpot / Salesforce credentials whose CDK
`discover` calls a live API, and secrets never reach fork PRs. Those
secrets are checked up front so a missing one fails in seconds instead of
20 minutes into the bootstrap. Drift fails with the regeneration command,
the first 200 diff lines inline and the full diff as an artifact; the job
never commits.

Also corrects three references that described the snapshot as
"CI-generated". CI regenerates it to compare, but the committed file is
produced and committed by a human.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Roman Mitasov <Roman.Mitasov@constructor.tech>
…e tables

`feat(gold): add metric evidence serving tables` (6e2c56b) added six gold
relations without regenerating the committed snapshot, so a fresh cluster
would not pre-create them:

  insight.ai_metric_evidence      insight.task_metric_evidence
  insight.collab_metric_evidence  insight.task_worklog_flow
  insight.git_metric_evidence     insight.wiki_metric_evidence

Regenerated with the full bootstrap-db pipeline (real connector
`discover`, destination-clickhouse, dbt, migrations) on the pinned
ClickHouse, then `dump-ddl.sh`; only insight.sql changed, which is what a
purely additive set of migration-owned gold tables should produce.

This is exactly the drift the new connectors-ddl lane fails on — without
this commit the lane is red on arrival.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Roman Mitasov <Roman.Mitasov@constructor.tech>
@mitasovr mitasovr changed the title feat(bootstrap-db): audit staging -> silver field parity feat(bootstrap-db): audit staging -> silver field parity + connectors-ddl CI gate Jul 30, 2026
The first phase applied the committed snapshot to an empty cluster and
audited field parity over it. Measured against the real snapshot, that
compared exactly ONE of 141 staging contributors: dump-ddl.sh keeps only
the gold-referenced staging tables, so 153 relations were absent and the
audit had almost nothing to look at. The remaining signal — "the snapshot
applies to an empty cluster" — is already implied by every fresh deploy and
by the e2e rig, which applies the same snapshot on every run.

So the lane now creates one empty ClickHouse and goes straight to
bootstrap-db.sh. Gone with the phase: the second container, the
`--select __no_such_model__` manifest warm-up (the dbt run inside
bootstrap-db writes manifest.json itself) and check-field-parity.py's
`--allow-missing-relations`, which existed only to keep that phase from
failing for the wrong reason.

The header still records why the snapshot must NOT be applied before
generation: `CREATE ... IF NOT EXISTS` would let a relation the snapshot
still carries but the code no longer produces survive into the fresh dump
and hide its own deletion from the diff.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Roman Mitasov <Roman.Mitasov@constructor.tech>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/ingestion/scripts/bootstrap-db/connectors-config.yaml (1)

99-112: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Add zoom_start_date to the new Zoom bootstrap config.

docs/components/connectors/collaboration/zoom/zoom.md still documents start_date as a Zoom connector config, and connector.yaml/secrets/connectors/zoom.yaml.example still define it. The connectors-config.yaml entry now lacks any Zoom start-date value; add zoom_start_date for the same 2020-01-01/connector-default pattern so regenerated bootstrap settings don’t omit an expected declared input.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/ingestion/scripts/bootstrap-db/connectors-config.yaml` around lines 99 -
112, Add zoom_start_date to the zoom entry in connectors-config.yaml, using the
existing connector-default pattern and the documented default value 2020-01-01.
Keep the other Zoom configuration fields unchanged so regenerated bootstrap
settings include the declared start-date input.
🧹 Nitpick comments (2)
.github/workflows/scripts/start-clickhouse.sh (1)

25-30: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win

Consider binding ClickHouse's port to loopback only.

-p 8123:8123 exposes ClickHouse on all interfaces with a fixed weak credential pair (insight/insight) and admin-management enabled. Low risk on isolated GitHub-hosted runners, but -p 127.0.0.1:8123:8123 would be a cheap hardening step if this script is ever reused on a shared/self-hosted runner.

🔒 Proposed change
-docker run -d --name "${NAME}" -p 8123:8123 \
+docker run -d --name "${NAME}" -p 127.0.0.1:8123:8123 \
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/scripts/start-clickhouse.sh around lines 25 - 30, Update
the Docker port mapping in the ClickHouse startup command to bind port 8123 to
loopback only, preserving the existing container port and other environment
settings.
src/ingestion/scripts/bootstrap-db/check-field-parity.py (1)

1-354: 📐 Maintainability & Code Quality | 🔵 Trivial | 🏗️ Heavy lift

Consider adding unit tests for the core comparison logic.

passthrough_relation, nullable_only, and the columns/order/types comparison logic (Lines 276-297) are non-trivial and are explicitly framed as "a data-correctness gate, not style" in the workflow. pyproject.toml already lists pytest as a dev dependency, so a small unit-test module exercising these pure functions with synthetic manifest fragments would be low-risk to add and would guard this gate against future regressions.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/ingestion/scripts/bootstrap-db/check-field-parity.py` around lines 1 -
354, Add a pytest module covering the pure helpers passthrough_relation and
nullable_only, plus synthetic-manifest tests for the contributor-versus-target
comparison in main, including missing/extra columns, order mismatches, differing
types, and nullable-only differences. Keep tests isolated from ClickHouse and
environment access by using synthetic structures or refactoring the comparison
into a testable helper if needed.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/domain/ingestion/specs/ADR/0007-fresh-cluster-placeholders.md`:
- Around line 16-17: Clarify the ADR statement about
`.github/workflows/connectors-ddl.yml` by limiting the rerun behavior to
eligible same-repository PRs. Explicitly exclude fork PRs, which are skipped due
to the repository-owned branch requirement for secret access.

In `@src/ingestion/scripts/bootstrap-db/check-field-parity.py`:
- Around line 235-245: Update the union-target audit around target_node,
relation_of, and structure.get so ephemeral targets are explicitly listed or
flagged instead of being silently skipped. Preserve the existing handling for
missing manifest nodes and non-ephemeral targets, and follow the script’s
documented ephemeral behavior when target_columns is unavailable.

---

Outside diff comments:
In `@src/ingestion/scripts/bootstrap-db/connectors-config.yaml`:
- Around line 99-112: Add zoom_start_date to the zoom entry in
connectors-config.yaml, using the existing connector-default pattern and the
documented default value 2020-01-01. Keep the other Zoom configuration fields
unchanged so regenerated bootstrap settings include the declared start-date
input.

---

Nitpick comments:
In @.github/workflows/scripts/start-clickhouse.sh:
- Around line 25-30: Update the Docker port mapping in the ClickHouse startup
command to bind port 8123 to loopback only, preserving the existing container
port and other environment settings.

In `@src/ingestion/scripts/bootstrap-db/check-field-parity.py`:
- Around line 1-354: Add a pytest module covering the pure helpers
passthrough_relation and nullable_only, plus synthetic-manifest tests for the
contributor-versus-target comparison in main, including missing/extra columns,
order mismatches, differing types, and nullable-only differences. Keep tests
isolated from ClickHouse and environment access by using synthetic structures or
refactoring the comparison into a testable helper if needed.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 590e868c-e9c4-44dd-9f83-35544b772178

📥 Commits

Reviewing files that changed from the base of the PR and between 99697d1 and aea022a.

📒 Files selected for processing (9)
  • .github/workflows/connectors-ddl.yml
  • .github/workflows/scripts/start-clickhouse.sh
  • docs/domain/ingestion/specs/ADR/0007-fresh-cluster-placeholders.md
  • src/ingestion/scripts/bootstrap-db/README.md
  • src/ingestion/scripts/bootstrap-db/check-field-parity.py
  • src/ingestion/scripts/bootstrap-db/connectors-config.yaml
  • src/ingestion/scripts/connectors-ddl/insight.sql
  • src/ingestion/scripts/create-bronze-placeholders.sh
  • src/ingestion/tests/e2e/lib/migration_applier.py

Comment on lines +16 to +17
> change, and `.github/workflows/connectors-ddl.yml` re-runs the pipeline on
> every PR and fails when the committed snapshot no longer matches. The

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Clarify that fork PRs are excluded.

The workflow does not rerun on every PR: fork PRs are skipped because the job requires repository-owned branches for secret access. Please qualify this as “eligible same-repository PRs” to keep the ADR accurate.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~16-~16: The official name of this software platform is spelled with a capital “H”.
Context: ...ver connector/dbt sources > change, and .github/workflows/connectors-ddl.yml re-runs t...

(GITHUB)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/domain/ingestion/specs/ADR/0007-fresh-cluster-placeholders.md` around
lines 16 - 17, Clarify the ADR statement about
`.github/workflows/connectors-ddl.yml` by limiting the rerun behavior to
eligible same-repository PRs. Explicitly exclude fork PRs, which are skipped due
to the repository-owned branch requirement for secret access.

Comment thread src/ingestion/scripts/bootstrap-db/check-field-parity.py
@mitasovr

Copy link
Copy Markdown
Contributor Author

Superseded by #2080 — same commits, but the branch now lives in this repository instead of a fork, so the new connectors-ddl lane this PR adds can actually run on it (the lane is guarded by head.repo.full_name == github.repository, because it needs the HubSpot / Salesforce secrets that fork PRs never receive).

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.

1 participant