KTD1 fifth step (behavior preserved):
- squad.AssetProvider{DocTemplate,RenderDoc,AgentInstruction,
AgentInstructionFile} injected via Options.Assets into Service,
WorkspaceEngine and AdaptivePlanner
- bizdev templateAssetProvider maps port to internal/template (assembly side)
- nil-provider paths degrade to the same fallbacks the old error branches
used (placeholder template, role header) — fail-visible, no guessing
- squad -> template import eliminated; arch edge moved bizdev->template
- verified: build/vet/arch green, squad+bizdev short tests pass
74 lines
2.0 KiB
Go
74 lines
2.0 KiB
Go
package squad_test
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"chat-agent-system/internal/squad"
|
|
)
|
|
|
|
func TestRDevLeaderPrompt_UsesDesignControlNotBusiness(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
engine := squad.NewWorkspaceEngine(nil)
|
|
|
|
ws, err := engine.PrepareWorkspace(squad.WorkspacePrepareRequest{
|
|
WorkDir: filepath.Join(tmpDir, "rd_design_input_spec"),
|
|
TaskKey: "rd_design_input_spec",
|
|
StageTitle: "设计输入规格书",
|
|
ProjectName: "rdev-s0-prompt",
|
|
Backend: "stub",
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("PrepareWorkspace rd_design_input_spec: %v", err)
|
|
}
|
|
|
|
leaderAgents := filepath.Join(ws.WorkDir, "tasks", "04_review", "AGENTS.md")
|
|
body, err := os.ReadFile(leaderAgents)
|
|
if err != nil {
|
|
t.Fatalf("read leader AGENTS.md: %v", err)
|
|
}
|
|
text := string(body)
|
|
if !strings.Contains(text, "设计控制") {
|
|
t.Fatalf("rdev leader AGENTS.md must mention 设计控制; got snippet:\n%s", truncate(text, 400))
|
|
}
|
|
for _, banned := range []string{"商务对接负责人", "CDO"} {
|
|
if strings.Contains(text, banned) {
|
|
t.Fatalf("rdev leader AGENTS.md must not contain %q", banned)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestIntakeLeaderPrompt_StillBusiness(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
engine := squad.NewWorkspaceEngine(nil)
|
|
|
|
ws, err := engine.PrepareWorkspace(squad.WorkspacePrepareRequest{
|
|
WorkDir: filepath.Join(tmpDir, "intake"),
|
|
TaskKey: "intake",
|
|
StageTitle: "用户初始需求收集表",
|
|
ProjectName: "intake-prompt-regression",
|
|
Backend: "stub",
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("PrepareWorkspace intake: %v", err)
|
|
}
|
|
|
|
leaderAgents := filepath.Join(ws.WorkDir, "tasks", "03_review", "AGENTS.md")
|
|
body, err := os.ReadFile(leaderAgents)
|
|
if err != nil {
|
|
t.Fatalf("read intake leader AGENTS.md: %v", err)
|
|
}
|
|
if !strings.Contains(string(body), "商务对接负责人") {
|
|
t.Fatalf("intake leader AGENTS.md must retain 商务对接负责人")
|
|
}
|
|
}
|
|
|
|
func truncate(s string, n int) string {
|
|
if len(s) <= n {
|
|
return s
|
|
}
|
|
return s[:n] + "..."
|
|
}
|