Files
Illia Polosukhin ab8d64cbfc feat: new-project skill and template ref resolution for parallel tool calls (#2353)
* feat(gateway): project metrics dashboard, mission scheduling UI, and new-project skill

Adds project metrics types, mission cadence scheduling via gateway,
and a /new-project skill for creating autonomous projects with goals,
metrics, and missions. Includes gateway frontend enhancements for
project views with metrics and goal tracking.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(engine): resolve template refs in parallel tool calls and rewrite new-project skill

Two fixes from trace analysis (trace_20260411T133641.json):

1. Skill rewrite: new-project skill now instructs the model to use
   memory_write + mission_create directly instead of referencing
   nonexistent project_create/project_update tools. Includes goals
   and metrics when appropriate. Instructs sequential execution.

2. Template ref resolution: some OpenAI-format models (e.g. Qwen)
   emit {{call_id.field}} references in parallel tool call arguments.
   Added resolution pass in LlmBridgeAdapter that scans ActionCall
   parameters for these patterns and resolves them from prior tool
   results in the conversation history.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* test(e2e): add project detail page screenshot test

Playwright test that seeds mock project data via page.route() API
interception, navigates to the Projects tab, drills into a project,
and captures a screenshot showing goals, missions, and activity.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: add project detail screenshot for PR

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: address PR review — remove project tools, fix IDOR, scope widgets, add tests

- Remove project_create/project_update/project_list tools and capability
  registration (skill uses memory_write + mission_create only)
- Add ownership check on mission_create project_id override to prevent IDOR
- Reject non-UUID project_id values explicitly instead of silent fallback
- Add goals field to ProjectOverviewEntry so frontend drill-in renders them
- Propagate store errors in overview instead of unwrap_or_default masking failures
- Scope project widget CSS server-side via scope_css (prevents style leakage)
- Fix template ref doc comment to match partial resolution semantics
- Fix E2E mock widget response shape (bare array, not wrapped object)
- Call crBackToOverview() on tab switch to tear down project widgets
- Add caller-level test for template ref resolution through LlmBridgeAdapter
- Clean up stale cargo-deny advisory ignores, add RUSTSEC-2026-0097 (rand)
- Run cargo fmt

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: resolve project slugs in mission_create, fix widget CSS comments

- mission_create now accepts project name/slug (not just UUID) by matching
  against the user's projects — fixes the skill's slug-based project_id
- Fix misleading CSS comment in app.js (CSS is scoped server-side)
- Fix style variable hoisting issue in widget mounting
- Log workspace.list() errors instead of silently swallowing them

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: address PR review round 3 — slug matching, template injection, N+1 queries

- Remove over-broad `starts_with` slug prefix matching in mission_create
  project_id resolution — require exact name/slug match only (serrrfirat)
- Fix slug generation inconsistency: frontend.rs now uses
  is_ascii_alphanumeric() matching effect_adapter.rs (serrrfirat)
- Prevent second-order template injection: resolve_template_refs now
  advances past resolved content instead of re-scanning from position 0,
  and skips unresolvable refs instead of breaking (serrrfirat)
- Parallelize N+1 overview queries: per-project thread/mission fetches
  now use tokio::try_join! + futures::try_join_all (serrrfirat, Copilot)
- Add two new security tests for template ref resolution

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-18 01:37:42 +09:00
..