test(budget): add DesignDocs tests; replace PLAN-137 with clean design doc
PR Ready Gate / clear-labels (pull_request) Successful in 1s
CI / test (pull_request) Successful in 17s
CI / review (anthropic--claude-4.6-sonnet, sonnet, SONNET_REVIEW_TOKEN) (pull_request) Successful in 48s
CI / review (gpt-5, security, ., rodin/security-patterns, SECURITY_REVIEW.md, SECURITY_REVIEW_TOKEN) (pull_request) Successful in 1m52s
CI / review (gpt-5, gpt, GPT_REVIEW_TOKEN) (pull_request) Failing after 2m8s
PR Ready Gate / clear-labels (pull_request) Successful in 1s
CI / test (pull_request) Successful in 17s
CI / review (anthropic--claude-4.6-sonnet, sonnet, SONNET_REVIEW_TOKEN) (pull_request) Successful in 48s
CI / review (gpt-5, security, ., rodin/security-patterns, SECURITY_REVIEW.md, SECURITY_REVIEW_TOKEN) (pull_request) Successful in 1m52s
CI / review (gpt-5, gpt, GPT_REVIEW_TOKEN) (pull_request) Failing after 2m8s
- budget/budget_test.go: add TestFit_DesignDocsInSystemPrompt, TestFit_DesignDocsTrimmedBeforeFileContext, TestFit_DesignDocsEmptyNoHeading to cover the new DesignDocs section through Fit() and buildResult() - Remove PLAN-137.md (contained raw thinking stream, not suitable as repo doc) - Add docs/DESIGN-137-doc-map.md with clean architectural decision record
This commit is contained in:
@@ -200,3 +200,72 @@ func TestFit_NeverExceedsLimit(t *testing.T) {
|
||||
t.Errorf("EstTokens %d exceeds limit %d (trimmed: %v)", result.EstTokens, limit, result.Trimmed)
|
||||
}
|
||||
}
|
||||
|
||||
// TestFit_DesignDocsInSystemPrompt verifies that DesignDocs content appears in the
|
||||
// system prompt under the expected heading.
|
||||
func TestFit_DesignDocsInSystemPrompt(t *testing.T) {
|
||||
s := Sections{
|
||||
SystemBase: "base instructions",
|
||||
DesignDocs: "# Foo Design\n\nSome design content.",
|
||||
Diff: "diff content",
|
||||
UserMeta: "PR meta",
|
||||
}
|
||||
result := Fit("gpt-4.1", s)
|
||||
|
||||
if !strings.Contains(result.SystemPrompt, "## Design Documents") {
|
||||
t.Errorf("expected ## Design Documents heading in system prompt, got:\n%s", result.SystemPrompt)
|
||||
}
|
||||
if !strings.Contains(result.SystemPrompt, "# Foo Design") {
|
||||
t.Errorf("expected design doc content in system prompt, got:\n%s", result.SystemPrompt)
|
||||
}
|
||||
// Sanity: design docs should NOT appear in user prompt.
|
||||
if strings.Contains(result.UserPrompt, "## Design Documents") {
|
||||
t.Errorf("design docs heading should not be in user prompt, got:\n%s", result.UserPrompt)
|
||||
}
|
||||
}
|
||||
|
||||
// TestFit_DesignDocsTrimmedBeforeFileContext verifies trim ordering:
|
||||
// DesignDocs is trimmed (third) before FileContext (fourth), after Conventions.
|
||||
func TestFit_DesignDocsTrimmedBeforeFileContext(t *testing.T) {
|
||||
// Fill budget so design docs and file context can't both fit.
|
||||
// gpt-4.1 limit = 128_000 - 4_000 = 124_000 tokens.
|
||||
// SystemBase = 480_000 bytes ≈ 120_000 tokens → leaves ~4_000 tokens.
|
||||
// Diff = 8_000 bytes ≈ 2_000 tokens.
|
||||
// DesignDocs = 20_000 bytes ≈ 5_000 tokens → exceeds remaining 2_000.
|
||||
// Expected: DesignDocs trimmed; FileContext (very small) survives.
|
||||
s := Sections{
|
||||
SystemBase: strings.Repeat("s", 480_000),
|
||||
DesignDocs: strings.Repeat("d", 20_000),
|
||||
FileContext: "important_file_context",
|
||||
Diff: strings.Repeat("x", 8_000),
|
||||
UserMeta: "PR meta",
|
||||
}
|
||||
result := Fit("gpt-4.1", s)
|
||||
|
||||
found := false
|
||||
for _, item := range result.Trimmed {
|
||||
if strings.HasPrefix(item, "design docs") {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
t.Errorf("expected 'design docs' in trimmed list, got: %v", result.Trimmed)
|
||||
}
|
||||
}
|
||||
|
||||
// TestFit_DesignDocsEmptyNoHeading verifies that an empty DesignDocs field
|
||||
// does not inject the ## Design Documents heading into the system prompt.
|
||||
func TestFit_DesignDocsEmptyNoHeading(t *testing.T) {
|
||||
s := Sections{
|
||||
SystemBase: "base",
|
||||
DesignDocs: "",
|
||||
Diff: "diff",
|
||||
UserMeta: "meta",
|
||||
}
|
||||
result := Fit("gpt-4.1", s)
|
||||
|
||||
if strings.Contains(result.SystemPrompt, "## Design Documents") {
|
||||
t.Errorf("empty DesignDocs should not inject heading, got:\n%s", result.SystemPrompt)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user