Onboarding friction: non-git dbt projects log as project_id=global + schema_inspect fails before a warehouse is configured
还没有人认领这个 Issue。
评估
- 难度
- 5/5
- 预计耗时
- 一周以上
- 新手友好度
- 45/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 冷清
- 技术栈
- git, typescript
调研方向
将工作拆分为项目身份和 schema onboarding 两条轨道。对于身份,阅读 packages/opencode/src/project/project.ts、packages/opencode/src/session/prompt.ts 和 packages/opencode/src/altimate/fingerprint/index.ts,然后运行 proposed temp non-git dbt project test;完成的标准是从子目录生成确定性、非全局的 ID。对于 onboarding,从 packages/opencode/src/altimate/tools/schema-inspect.ts 开始,并比较 builder.txt、analyst.txt 和 post-connect-suggestions.ts;添加列出的 no-warehouse、invalid-argument 和 prompt/golden 测试。
由索引模型根据 Issue 内容生成。
描述
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.
- 主要语言
- TypeScript
- 星标
- 813
- 派生
- 134
- 平均合并
- 2 天 3 小时
- 30 天内合并 PR
- 65
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
AltimateAI/altimate-code 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 70/100
AltimateAI/altimate-code#1359 ·
-
难度 2/5 1-3 小时 新手友好度 84/100
AltimateAI/altimate-code#1323 ·
-
难度 2/5 1-3 小时 新手友好度 86/100
AltimateAI/altimate-code#1288 ·
-
难度 1/5 1 小时以内 新手友好度 92/100
AltimateAI/altimate-code#1285 ·
-
privacy: Altimate Base consent dialog no longer discloses persistent per-installation identifier 未关闭
难度 1/5 1 小时以内 新手友好度 88/100
AltimateAI/altimate-code#1284 ·
查看 AltimateAI/altimate-code 的全部 Issue
相似的 Issue
-
VerificationGate: ATTRIBUTION quote guard never matches a normal quotation (\b around the quote) 未关闭
难度 2/5 1-3 小时 新手友好度 75/100
danielmiessler/LifeOS#2234 ·
-
T: Bug
难度 2/5 1-3 小时 新手友好度 75/100
-
难度 2/5 1-3 小时 新手友好度 65/100
-
难度 1/5 1 小时以内 新手友好度 85/100
-
Mend: dependency security vulnerability untriaged
难度 2/5 1-3 小时 新手友好度 70/100