fix(#496,#497,#498): unblock idea→artifact from chat front-ends#499
Conversation
Three tightly-coupled pre-0 fixes to the chat front door (trackerbot / trackerchat share transport/chatops), each touching the same two files: #496 — intent-classifier model id. The default TRACKERBOT_MODEL / TRACKERCHAT_MODEL was a nonexistent dated snapshot (claude-haiku-4-5-20251001) that 404s (model_not_found), hard-blocking natural-language routing. Default is now the catalog id claude-haiku-4-5; NewLLMIntentResolver additionally resolves the configured model through the model catalog (aliases + fallback to claude-haiku-4-5 for an unknown id) so a bad env var never reaches the provider, and a classifier outage degrades to the `run <workflow>` grammar instead of leaking a raw provider error. #497 — auto-init git in trackerbot per-run workdirs. Per-thread workdirs are created fresh and empty but git was never initialized, so `requires: git` workflows (ask_and_execute, build_product) dead-stopped at preflight. trackerbot now sets Git: {Preflight: init, AllowInit: true} — safe because the dirs are always fresh and empty. #498 — route spec-less "build me X" to ask_and_execute. Intent prompt is now biased to prefer a self-speccing workflow (ask_and_execute) over one that hard-requires a pre-existing SPEC.md (build_product*, which would dead-stop). The durable embedded idea_to_spec interview workflow is deferred — it needs embed-FS subgraph resolution (the known subgraph-builtin delivery gap). Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01WNFHLNKQvyYB3dB1HqDsFi
|
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. Next review available in: 22 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (5)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 83c4c11beb
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| spec) and asks to build/make/create it, prefer a workflow that discovers and | ||
| writes the spec itself (e.g. one whose goal is to "ask what to build … and spec | ||
| it") over one that requires reading a pre-existing SPEC.md. The user has not | ||
| written a spec, so a spec-requiring workflow would dead-stop.` |
There was a problem hiding this comment.
Initialize trackerchat workdirs for self-speccing routes
When this bias is followed in trackerchat, spec-less build/make/create requests now go to ask_and_execute, but trackerchat's ConfigBase still has no Git preflight override while the runner always executes in a fresh temp RunsBase workdir. Since ask_and_execute declares requires: git, pipeline.Preflight's auto policy rejects that non-repo workdir before the workflow can ask/spec anything, so the new default natural-language path remains dead-stopped in trackerchat; please give trackerchat the same safe auto-init or make the runner apply it for requires: git workflows.
Useful? React with 👍 / 👎.
| // workflows (ask_and_execute, build_product) would dead-stop at preflight | ||
| // with "not a git repository". Auto-init git in the fresh dir — safe | ||
| // because it's always empty (see runner.launch's MkdirAll). | ||
| Git: &tracker.GitConfig{Preflight: tracker.GitPreflightInit, AllowInit: true}, |
There was a problem hiding this comment.
Avoid forcing git on workflows that do not require it
Setting the base policy to GitPreflightInit makes pipeline.Preflight treat every trackerbot run as requiring git, not just ask_and_execute/build_product, because init implies the check even when the workflow has no requires: git. In Slack deployments without git, or where the auto empty commit is blocked by global git config, workflows such as deep_review or local non-git workflows now fail before start despite not needing git; conditionally apply init only after the selected graph declares the git requirement.
Useful? React with 👍 / 👎.
trackerchat shares chatops.Runner and the identical fresh-empty per-thread
workdir path (runPaths uses RunsBase, not cwd), so `requires: git` workflows
dead-stopped there too. Two independent review passes flagged the asymmetry —
the original commit's "chat front-ends" (plural) framing implied both. Mirror the
Git: {Preflight: init, AllowInit: true} config into trackerchat's configBase.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_01WNFHLNKQvyYB3dB1HqDsFi
Three tightly-coupled pre-Phase-0 fixes to the chat front door (trackerbot /
trackerchat, sharing
transport/chatops). They land as one stacked PR becauseeach touches the same two files (
transport/chatops/intent.go,cmd/trackerbot/main.go).#496 — intent-classifier model id 404
The default
TRACKERBOT_MODEL/TRACKERCHAT_MODELwas a nonexistent datedsnapshot (
claude-haiku-4-5-20251001) that the provider rejects withmodel_not_found, hard-blocking natural-language routing.claude-haiku-4-5(both mains).NewLLMIntentResolverresolves the configured model through the model catalog(
llm.GetModelInfo) — aliases map to their canonical id; an unknown id fallsback to
claude-haiku-4-5— so a mistyped env var never reaches the provider.run <workflow>grammarguidance instead of leaking a raw provider error into the thread.
AC: an @mention in natural language routes to a workflow instead of a 404. ✅
#497 — auto-init git in trackerbot per-run workdirs
Per-thread workdirs are created fresh and empty, but git was never initialized,
so
requires: gitworkflows (ask_and_execute,build_product) dead-stopped atpreflight with "not a git repository". trackerbot now sets
Git: {Preflight: init, AllowInit: true}— safe because the dirs are alwaysfresh and empty.
AC: ask_and_execute / build_product start cleanly from Slack with no manual
git init. ✅#498 — route spec-less "build me X" to ask_and_execute
build_product*hard-require a pre-existingSPEC.mdand dead-stop without one.The intent prompt is now biased so that when a user only describes an idea (no
written spec) and asks to build/make/create it, the classifier prefers a
self-speccing workflow (
ask_and_execute) over a spec-requiring one.AC: a user with only an idea reaches a shipped artifact without pre-writing a
spec. ✅
Deferred (durable path)
The issue's durable option — an embedded
idea_to_specinterview workflow chainedto
build_product— is not included. Embedding it requires the rawexamples/subgraphs/*.dipmaterial to be reachable viasubgraph_reffrom anembedded built-in, which is blocked by the known subgraph-builtin delivery
gap (embed-FS subgraph resolution + library subgraph loading are missing).
Shipping it today would produce a workflow that dead-stops on embedded/Slack
runs — the opposite of the AC. Left for the loader-infra work.
Verification
go build ./...,go test ./... -shortgreen.85.8%, complexity ≤8, dippin lint).
resolveIntentModel(catalog id / alias / stale-id fallback) andclassifier-outage grammar fallback (no raw provider error leaks).
🤖 Generated with Claude Code
Need help on this PR? Tag
/codesmithwith what you need. Autofix is disabled.