Skip to content

fix(#496,#497,#498): unblock idea→artifact from chat front-ends#499

Merged
clintecker merged 2 commits into
mainfrom
fix/idea-to-artifact-tier0
Jul 22, 2026
Merged

fix(#496,#497,#498): unblock idea→artifact from chat front-ends#499
clintecker merged 2 commits into
mainfrom
fix/idea-to-artifact-tier0

Conversation

@clintecker

@clintecker clintecker commented Jul 22, 2026

Copy link
Copy Markdown
Collaborator

Three tightly-coupled pre-Phase-0 fixes to the chat front door (trackerbot /
trackerchat, sharing transport/chatops). They land as one stacked PR because
each touches the same two files (transport/chatops/intent.go,
cmd/trackerbot/main.go).

#496 — intent-classifier model id 404

The default TRACKERBOT_MODEL / TRACKERCHAT_MODEL was a nonexistent dated
snapshot (claude-haiku-4-5-20251001) that the provider rejects with
model_not_found, hard-blocking natural-language routing.

  • Default is now the catalog id claude-haiku-4-5 (both mains).
  • NewLLMIntentResolver resolves the configured model through the model catalog
    (llm.GetModelInfo) — aliases map to their canonical id; an unknown id falls
    back to claude-haiku-4-5 — so a mistyped env var never reaches the provider.
  • A classifier outage now degrades to the deterministic run <workflow> grammar
    guidance 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: git workflows (ask_and_execute, build_product) dead-stopped at
preflight with "not a git repository". trackerbot now sets
Git: {Preflight: init, AllowInit: true} — safe because the dirs are always
fresh 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-existing SPEC.md and 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_spec interview workflow chained
to build_product — is not included. Embedding it requires the raw
examples/subgraphs/*.dip material to be reachable via subgraph_ref from an
embedded 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 ./... -short green.
  • Full pre-commit gate suite passed (fmt, vet, build, tests, race, coverage
    85.8%, complexity ≤8, dippin lint).
  • New tests: resolveIntentModel (catalog id / alias / stale-id fallback) and
    classifier-outage grammar fallback (no raw provider error leaks).

🤖 Generated with Claude Code


View with Codesmith Autofix with Codesmith
Need help on this PR? Tag /codesmith with what you need. Autofix is disabled.

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
@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 22 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c1534e50-0277-430a-ae37-a45943ac8c6a

📥 Commits

Reviewing files that changed from the base of the PR and between 57ce823 and 09bf846.

📒 Files selected for processing (5)
  • CHANGELOG.md
  • cmd/trackerbot/main.go
  • cmd/trackerchat/main.go
  • transport/chatops/intent.go
  • transport/chatops/intent_test.go
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/idea-to-artifact-tier0

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

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 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".

Comment on lines +115 to +118
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.`

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge 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 👍 / 👎.

Comment thread cmd/trackerbot/main.go
// 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},

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge 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
@clintecker
clintecker merged commit 354a351 into main Jul 22, 2026
2 checks passed
@clintecker
clintecker deleted the fix/idea-to-artifact-tier0 branch July 22, 2026 19:15
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