a06f331eb8
CI / benchmark (push) Has been skipped
install-script / posix-syntax (push) Successful in 6m1s
CI / build-onnx (push) Failing after 6m43s
init-smoke / dry-run (push) Failing after 15m57s
security / govulncheck (push) Has been cancelled
security / trivy-fs (push) Has been cancelled
CI / test (1.26, ubuntu-latest) (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
CI / test (1.26, macos-latest) (push) Has been cancelled
CI / build-windows (push) Has been cancelled
CI / lint (push) Has been cancelled
install-script / powershell-syntax (push) Has been cancelled
install-script / install (macos-14) (push) Has been cancelled
install-script / install (ubuntu-latest) (push) Has been cancelled
112 lines
5.0 KiB
Markdown
112 lines
5.0 KiB
Markdown
# Methodology
|
||
|
||
The protocol below produces reproducible, agent-graded scoring of
|
||
gortex's real-world effect on coding tasks. Sticking to the
|
||
protocol means anyone with the harness + a model API key can
|
||
reproduce the numbers and dispute them.
|
||
|
||
## 1. Task categories (5)
|
||
|
||
| Category | What it measures | Example |
|
||
|----------|------------------|---------|
|
||
| **Architectural explanation** | "Why does this codebase have N services" — graph / community structure understanding | "Walk me through how the indexer pipeline processes a new file." |
|
||
| **Refactor safety** | "Rename / move / extract — what breaks?" — impact-analysis driven | "Rename `Indexer.Index` to `Indexer.IndexRoot` across the repo. List every caller that needs updating." |
|
||
| **Bug localization** | "Given this failure, where's the root cause?" — call-chain + dataflow | "A panic in `internal/savings/store.go::flushLocked`. Trace the conditions that reach it." |
|
||
| **Impact analysis** | "If I change X, what tests should I run?" — `get_test_targets` + `verify_change` | "I'm about to change the signature of `tokens.Count`. List the test files that need re-running." |
|
||
| **Contract extraction** | "What's the public API surface of this package?" — `contracts list` driven | "List every exported function / method / type in `internal/savings/`, with one-line summaries." |
|
||
|
||
Each task is realistic — drawn from actual sessions, not invented
|
||
synthetic prompts. The seed task set in [`task-set.md`](task-set.md)
|
||
ships 3 tasks per category × 5 categories = 15 tasks.
|
||
|
||
## 2. Agent / model matrix
|
||
|
||
The same task set runs against each of:
|
||
|
||
1. **Claude Sonnet 4.6** via the Anthropic API (`claude-sonnet-4-20250514`)
|
||
2. **GPT 5.4** via OpenAI (`gpt-5-2025-08`)
|
||
3. **Copilot CLI** via the GitHub CLI extension
|
||
|
||
For each agent × task combination, **two runs**:
|
||
|
||
- **WITH gortex MCP** — the agent has access to the full gortex
|
||
tool surface (`smart_context`, `search_symbols`,
|
||
`get_symbol_source`, `verify_change`, …)
|
||
- **WITHOUT gortex MCP** — the agent has only its default tool
|
||
set (typically `Read`, `Grep`, `Bash`)
|
||
|
||
So per task: 6 runs (3 agents × 2 modes). Per task set: 90 runs.
|
||
Per category: 18 runs.
|
||
|
||
## 3. Bias-of-prompt check
|
||
|
||
Each WITH-gortex run is executed twice:
|
||
|
||
- **default prompt** — the system prompt gortex ships in
|
||
`internal/agents/instructions.go` (the same one the production
|
||
`gortex init` writes to every agent's config)
|
||
- **ablation prompt** — the same prompt with every "prefer
|
||
gortex tools" steering line removed
|
||
|
||
If the published headline only shows the default-prompt number,
|
||
the methodology is incomplete. Always publish both, and call out
|
||
the delta — that's the "we're not just measuring the prompt"
|
||
test.
|
||
|
||
## 4. (a) / (b) / (c) classifier
|
||
|
||
A judge model (default Claude Sonnet 4.6 — see
|
||
[`judge-prompt.md`](judge-prompt.md)) scores each per-task
|
||
WITH-vs-WITHOUT comparison with one of three labels:
|
||
|
||
- **(a) gortex helped** — the WITH run produced a measurably
|
||
better answer (more accurate, more complete, fewer
|
||
hallucinations, or substantially fewer tokens)
|
||
- **(b) no measurable difference** — answers are roughly
|
||
equivalent in quality and cost
|
||
- **(c) gortex hurt** — the WITH run was worse (less accurate,
|
||
more confused by the tool surface, or noticeably more tokens
|
||
for the same answer)
|
||
|
||
The published summary MUST report all three counts. A
|
||
"(a)=12 / (b)=2 / (c)=1" result is honest; "12 wins" is not.
|
||
|
||
## 5. Negative-delta requirement
|
||
|
||
Negative deltas (any (c) result) are **required** in the
|
||
published summary, with the per-task breakdown linkable. The
|
||
explicit requirement is the methodology's anti-survivorship
|
||
mechanism: a methodology that buries (c) cases isn't measuring
|
||
real-world quality, it's measuring marketing.
|
||
|
||
If a published run reports zero (c) results across all 15 tasks,
|
||
that's a red flag — either the judge is biased or the seed set
|
||
is over-fit. Re-run with a different judge model and at least
|
||
3 additional tasks per category before publishing.
|
||
|
||
## 6. Scoring envelope
|
||
|
||
Per-task token + wall-clock budgets are the same WITH and
|
||
WITHOUT (typically 50k tokens / 5 minutes per task). A run that
|
||
exceeds the budget scores as "no answer" — not as (c). This
|
||
keeps the comparison about *quality* of answers, not endurance.
|
||
|
||
Per-task cost is reported separately so a published row can show
|
||
"answer (a) at 1.2× the WITHOUT cost"; (a) at 5× the cost is
|
||
honestly weaker than (a) at 0.8× the cost.
|
||
|
||
## 7. What we don't measure here
|
||
|
||
- **Benchmark NDCG / recall** — covered by `bench/baselines/` and
|
||
`bench/token-efficiency/`. Different axis: those measure
|
||
retrieval quality independently of agent / model; this
|
||
methodology measures real agent behaviour.
|
||
- **SWE-bench resolve rate** — covered by `BENCHMARK-SWE.md`.
|
||
Multi-day GPU compute; published separately when an operator
|
||
runs it.
|
||
- **Performance** — covered by `bench/perf/`. Indexer / query /
|
||
impact latency, not answer quality.
|
||
|
||
Together the three axes (retrieval / agent behaviour / system
|
||
perf) form gortex's published-quality envelope.
|