Onboarding friction: non-git dbt projects log as project_id=global + schema_inspect fails before a warehouse is configured
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 45/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- git, typescript
- Ambito
- backend-api-design, cli, data-engineering, testing-qa
Direzione di ricerca
Dividi il lavoro in due filoni: identità del progetto e onboarding dello schema. Per l’identità, leggi packages/opencode/src/project/project.ts, packages/opencode/src/session/prompt.ts e packages/opencode/src/altimate/fingerprint/index.ts, quindi esegui il test proposto per un progetto dbt temporaneo non Git; il lavoro è completato quando vengono generati ID deterministici e non globali dalle sottodirectory. Per l’onboarding, parti da packages/opencode/src/altimate/tools/schema-inspect.ts e confronta builder.txt, analyst.txt e post-connect-suggestions.ts; aggiungi i test no-warehouse, invalid-argument e prompt/golden elencati.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
Two onboarding/activation bugs degrade the first-run experience when a user runs altimate-code
on a fresh dbt project — especially outside a git repository:
- Project not detected for non-git dbt projects →
project_idresolves to the
global/no-project bucket, so per-project context/state is never established. schema_inspectonboarding wall → the agent callsschema_inspectbefore a warehouse
is configured (or with a guessed argument) and gets a single generic error, so it retries the
same failing call instead of guiding the user to connect first.
Both are independently actionable and can be split into separate issues if preferred.
Failure mode 1 — Non-git dbt projects are not detected → project_id = "global"
Observed behavior
Running altimate-code inside a dbt project that is not a git repo (or opened from a
subdirectory, or in a fresh container/sandbox with no git) produces no stable project identity.
The session is bucketed under the global/no-project id even though the user is doing clearly
project-scoped dbt work (dbt_profiles → apply_patch on models → sql_analyze →
altimate_core_validate → dbt_lineage).
Root cause
Project identity is keyed on git/VCS, not on the dbt project:
packages/opencode/src/session/prompt.ts:365
WhenTelemetry.setContext({ sessionId: sessionID, projectId: Instance.project?.id ?? "" })Instance.projectis undefined,projectIdis empty and falls intoProjectID.global.packages/opencode/src/project/project.ts— sessions default toProjectID.globaland are
only re-homed to a real id on git init (initGit,if (input.project.vcs === "git") ...).
No git → staysglobal.packages/opencode/src/altimate/fingerprint/index.ts:81already detectsdbt_project.yml
(plusprofiles.yml, adapter type, etc.) and tags the sessiondbt/data-engineering—
but this detection is not used to establish project identity.
So a dbt project without a git repo gets no stable project id.
Impact
- Lost per-project context/state: anything keyed on project id (session continuity, memory,
cached schema/connection, per-project config) doesn't persist or carry across sessions →
every run feels cold. - Inconsistent identity between the data-engineering fingerprint (which does recognize the
dbt project) and the project/session layer (which does not).
Proposed fix
- When
Instance.projectis absent, derive a stable project identity from the
data-engineering fingerprint that already runs — anchor on the nearest ancestor directory
containingdbt_project.yml(hash of its absolute path, same shape as the existing project
id), and use that for bothTelemetry.setContextand session/project re-homing. - Treat "dbt project root" as a first-class project anchor alongside git root in
project.ts
(walk up to finddbt_project.ymlif VCS detection fails). - Keep
globalstrictly for genuinely no-project sessions.
Acceptance criteria
- Running altimate-code inside a non-git dbt project (with
dbt_project.yml) yields a
stable, non-globalproject_id, stable across sessions in the same directory. - Opening from a subdirectory of the dbt project resolves to the same id.
- Unit test: fingerprint detects
dbt_project.ymlin a temp non-git dir → project id is
non-empty and deterministic.
Failure mode 2 — schema_inspect onboarding wall (fails before/without a warehouse)
Observed behavior
When schema_inspect is called before any warehouse connection exists, or with a
guessed/invalid table/warehouse name, the tool fails with a single generic error. The agent
cannot distinguish "no warehouse configured" from "bad argument" from "permission denied", so it
retries the same failing call. A user wiring up a warehouse sees repeated schema_inspect errors
interleaved with warehouse_list / warehouse_add / warehouse_test.
Root cause
- No warehouse configured: the agent invokes
schema_inspectbefore a connection exists.
The tool returns a generic failure rather than guiding the user to connect first. - Guessed/invalid args:
schema_inspectis called with atable/warehousename the agent
invented, which fails argument validation. - Generic error surface —
packages/opencode/src/altimate/tools/schema-inspect.ts:64:
The same string is returned for "no warehouse configured", "bad table name", and "permissionoutput: `Failed to inspect schema: ${msg}\n\nEnsure the dispatcher is running and a warehouse connection is configured.`
denied", so the agent can't branch per cause and retries the same failing call. A
post-connect-suggestions.tsflow exists, but there is no pre-connect guardrail.
Proposed fix
- Preflight in
schema_inspect: if no warehouse is configured, short-circuit with a
distinct, actionable result (not a generic error) — e.g. "No warehouse connected. Connect a
warehouse withwarehouse_add, then retry" — and emit a consistentnot_configuredclass so
the agent branches into the connect flow instead of retrying. - Agent guidance (
builder.txt/analyst.txt): do not callschema_inspectuntil a
warehouse connection is confirmed; if not configured, switch to the connect flow. - Distinct, actionable errors surfaced to the model:
not_configuredvsvalidationvs
permissionvsconnection, each with its own recovery hint, instead of one generic string. - Arg validation: when
table/warehouseare not known/resolvable, prompt to discover
(warehouse_list/schema_index) rather than calling with a guessed name.
Acceptance criteria
- Calling
schema_inspectwith no warehouse configured returns a non-error, actionable
not_configuredresult; the agent responds by starting the connect flow rather than retrying. - Calling with an invalid
table/warehousereturns avalidationresult with a discovery
hint. - Tests: (a) no-warehouse → actionable
not_configured, no exception; (b) invalid arg →
validationwith a discovery hint; (c) prompt/golden test asserts the connect-first ordering.
Notes
- Surfaced from observed first-run behavior; the two failure modes are independent and can be
split into separate issues. - The known success-path-silent telemetry artifact for
read/edit/write/globis unrelated
to either failure mode here.
- Lingua principale
- TypeScript
- Stelle
- 813
- Fork
- 134
- Merge medio
- 2g 3h
- PR unite (30g)
- 65
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di AltimateAI/altimate-code
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
AltimateAI/altimate-code#1359 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
AltimateAI/altimate-code#1323 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
AltimateAI/altimate-code#1288 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100
AltimateAI/altimate-code#1285 ·
-
privacy: Altimate Base consent dialog no longer discloses persistent per-installation identifier Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
AltimateAI/altimate-code#1284 ·
Tutte le issue di AltimateAI/altimate-code
Issue simili
-
VerificationGate: ATTRIBUTION quote guard never matches a normal quotation (\b around the quote) Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
danielmiessler/LifeOS#2234 ·
-
T: Bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
-
Mend: dependency security vulnerability untriaged
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100