Skip to content

Commit 02e26c5

Browse files
authored
docs: keep result publishing in global config (#1684)
1 parent ce83a4d commit 02e26c5

6 files changed

Lines changed: 69 additions & 16 deletions

File tree

.agentv/config.yaml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,6 @@ eval_patterns:
1111
- "**/evals/**/*.eval.yml"
1212
- "**/evals/**/*.eval.ts"
1313

14-
# Publish completed run bundles to the git-backed results branch.
15-
results:
16-
path: .
17-
branch: agentv/results/v1
18-
auto_push: true
19-
2014
# Execution defaults (overridden by CLI flags)
2115
execution:
2216
verbose: false

apps/web/src/content/docs/docs/next/evaluation/running-evals.mdx

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,18 @@ Project-local YAML config takes precedence over home/global YAML config. AgentV
457457

458458
Within one config directory, AgentV reads `config.yaml` first and `config.local.yaml` second. The local overlay wins: plain objects deep-merge, arrays replace, and scalar values from `config.local.yaml` override `config.yaml`.
459459

460-
Use `config.yaml` for portable defaults and shared eval-definition fields that can be committed with the eval project. Use `config.local.yaml` for machine-local overrides such as private paths, local result remotes, Dashboard project registry entries, or temporary execution defaults. Project-local `config.local.yaml` is gitignored by default.
460+
Use project-local `config.yaml` for portable defaults and shared
461+
eval-definition fields that can be committed with the eval project. Do not put
462+
operator-specific result publishing remotes in a shared eval project's
463+
`.agentv/config.yaml`: different users and CI identities often publish to
464+
different result repositories or do not publish at all. Put those project
465+
registry and result-sync preferences in the user/global AgentV config pair
466+
(`$AGENTV_HOME/config.yaml` or `$AGENTV_HOME/config.local.yaml`, default
467+
`~/.agentv/...`) unless the project intentionally owns one canonical public
468+
results repo. Use project-local `config.local.yaml` only for local overrides
469+
that must stay beside the checkout, such as temporary execution defaults or
470+
private workspace paths. Project-local `config.local.yaml` is gitignored by
471+
default.
461472

462473
### YAML config (`config.yaml` plus optional `config.local.yaml`)
463474

@@ -653,7 +664,11 @@ set AGENTV_HOME=D:\agentv-config
653664

654665
When unset, AgentV uses `~/.agentv`.
655666

656-
For local workspaces, put portable registry defaults in `$AGENTV_HOME/config.yaml` and machine-local project paths or result remotes in `$AGENTV_HOME/config.local.yaml`:
667+
For local workspaces, prefer registering projects and result remotes in the
668+
user/global AgentV config pair instead of committing them to the eval project.
669+
Use `$AGENTV_HOME/config.yaml` for your normal personal or CI registry. Use
670+
`$AGENTV_HOME/config.local.yaml` when the values are temporary, machine-local, or
671+
an overlay on a shared mounted global config.
657672

658673
```yaml
659674
projects:
@@ -664,6 +679,10 @@ projects:
664679
branch: agentv/results/v1
665680
```
666681

682+
Only commit `projects[].results` in a project-local `.agentv/config.yaml` when
683+
that repository deliberately owns a shared canonical results destination, such
684+
as a public demo results repo.
685+
667686
For larger registries, `$AGENTV_HOME/config.yaml` can point `projects` at a
668687
bare project array:
669688

docs/adr/0007-conflict-free-results-sync-without-force-push.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,17 @@ Phoenix, hosted DB, or inbound webhook server at runtime.
4141

4242
Replace the force-push path with a two-layer, no-force-push design.
4343

44+
**Configuration placement — result publishing is user/global by default.**
45+
Remote result sync describes where a particular operator or CI identity publishes
46+
artifacts, so it is normally user-specific. Do not commit AgentV's own result
47+
publishing remote, local result checkout path, or `auto_push` preference into the
48+
AgentV repo or a shared eval project's `.agentv/config.yaml` unless the project
49+
intentionally owns one canonical public results repo. Configure operator-specific
50+
result remotes in the user/global AgentV config pair (`$AGENTV_HOME/config.yaml`
51+
or `$AGENTV_HOME/config.local.yaml`, default `~/.agentv/...`) under `projects:`.
52+
This keeps clones and contributors from inheriting someone else's publication
53+
destination while still allowing CI or demos to mount a prepared global config.
54+
4455
**Layer 1 — auto-merge the common case.** On a non-fast-forward results push, run
4556
a bounded `fetch → merge → push` loop using artifact-aware Git merge drivers:
4657
`merge=union` for the append-only `index.jsonl` and a small `agentv-json`

docs/adr/0009-eval-path-result-identity-and-default-experiment.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,14 @@ source root. Dashboard and other readers should display this value as `Eval`.
100100
They should also display `test_id`, `target`, and `variant` when present so
101101
users can distinguish rows with overlapping test IDs.
102102

103-
`suite` and `name` are display metadata. They may help humans group or label
104-
results, and `suite` may participate in opaque row-id collision avoidance, but
105-
they must not drive visible storage hierarchy, semantic routing, Dashboard
106-
detail selection, rerun lookup, import identity, or artifact discovery.
103+
`suite`, `name`, and any authored test `description` are display metadata. They
104+
may help humans group, scan, or label results, and `suite` may participate in
105+
opaque row-id collision avoidance, but they must not drive visible storage
106+
hierarchy, semantic routing, Dashboard detail selection, rerun lookup, import
107+
identity, or artifact discovery. `description` is especially not a substitute
108+
for `test_id`: Promptfoo allows duplicate test descriptions, so AgentV keeps
109+
`test_id` as the durable result identity and treats description as a non-unique
110+
label.
107111

108112
`index.jsonl` is authoritative for all bundle-relative artifact paths. Per-row
109113
directories are exposed with `result_dir`. Sidecar paths such as `test_dir`,

docs/adr/0016-promptfoo-superset-eval-authoring-contract.md

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,14 @@ scope and either inline or by `file://` reference. `workspace` and
3131
workspace-named code or docs that model the same testbed concept are migration
3232
debt unless they refer only to internal mutable directories or result storage.
3333

34+
Status note (2026-07-06): keep authored `tests[].id` / flattened `test_id` as
35+
AgentV's durable test-case identity. Promptfoo-compatible `description` remains
36+
display metadata only. PR-679 Promptfoo parity research found Promptfoo allows
37+
duplicate test descriptions in the Dashboard, so `description` is not a safe
38+
identity key for AgentV reruns, trends, result links, or cross-run comparison.
39+
This deliberately diverges from Promptfoo's display-first row model while
40+
keeping Promptfoo config importable.
41+
3442
## Context
3543

3644
AgentV's eval-authoring surface diverged from industry primitives. We are re-basing
@@ -89,9 +97,19 @@ keep AgentV's only where its semantics are genuinely better.**
8997
`${{ ENV }}`. Rationale beyond superset-compat: `{{ env.VAR }}` **does not collide with
9098
runtime shell `${VAR}`** — CLI-target commands can carry `$VAR`/`${VAR}` that must reach
9199
the shell at runtime untouched; a `${ENV}` config sigil would clobber them.
92-
8. **Optional test `id`**, layered identity: content identity = `test_id` (content hash,
93-
derived when unauthored); governance/trend identity = an author `tag`/`metadata` key
94-
(Dashboard keys comparison on this); display label = `description` → vars → `Test #n`.
100+
8. **Test identity stays `id` / `test_id`; `description` is display-only.**
101+
`tests[].id` is the preferred authored stable case identifier, and the
102+
flattened `test_id` is the result/API/gate identity used for reruns, result
103+
links, artifact lookup, trends, and Dashboard comparison. Imported or
104+
ad-hoc Promptfoo-style rows that omit `id` may receive a deterministic
105+
generated fallback, but generated IDs must be marked as generated and should
106+
not be taught as the preferred curated-benchmark authoring style.
107+
`description` is a human label and may duplicate across tests. Dashboard
108+
display may prefer `description` where present, then vars, then `test_id` or
109+
`Test #n`, but Dashboard selection and comparison must key on
110+
`eval_path + test_id + target + variant`, not on description text. Content
111+
fingerprints belong in separate provenance/change-detection metadata, not in
112+
the public test identity.
95113
9. **Keep AgentV where better**: first-class `expected_output` as passive gold/reference
96114
data (DeepEval-aligned; not moved into `vars`, and not sent to target prompts
97115
unless the author separately places it in `vars`). A specific grader may use

docs/solutions/best-practices/name-portable-config-endpoints-by-user-intent.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ applies_when:
2323

2424
While adding Git-backed dashboard result remotes, the initial nested results repository config used `results.repo.url` for the Git endpoint URL and left `remote` available for the local Git remote-name implementation detail. That split was technically precise but did not match how users talk about portable Git sync configuration: in related tools such as Beads, `remote` names the shared endpoint URL, not a machine-local alias.
2525

26-
For a checked-in AgentV project config, requiring a local Git remote alias would make the file depend on per-machine setup. The portable contract only needs the endpoint URL, a local path, and the branch/ref that stores artifacts.
26+
For a checked-in AgentV project config, requiring a local Git remote alias would make the file depend on per-machine setup. The portable contract only needs the endpoint URL, a local path, and the branch/ref that stores artifacts. Even with portable endpoint names, result publishing is often an operator preference: different users, CI jobs, and private-review flows may publish to different remotes or skip publishing entirely. Shared eval projects should not commit those user-specific result destinations unless the project intentionally owns one canonical results repo.
2727

2828
## Guidance
2929

@@ -48,6 +48,12 @@ Internally, the runtime can still create or use a Git remote name such as `origi
4848

4949
Keep established neighboring contracts intact unless they are part of the same user-facing block. Source project repositories already use `projects[].repo.url`, so changing results repository config to `results.repo.remote` does not require renaming source project `repo.url`.
5050

51+
For user-specific result publishing, prefer the user/global AgentV config pair
52+
(`$AGENTV_HOME/config.yaml` or `$AGENTV_HOME/config.local.yaml`, default
53+
`~/.agentv/...`) over a repo-local `.agentv/config.yaml`. That keeps the eval
54+
project portable while letting each operator choose their own result remote,
55+
local checkout path, branch, and `auto_push` policy.
56+
5157
## Why This Matters
5258

5359
Portable config is commonly checked into a repository, copied into Docker development environments, or generated by setup scripts. A field that accepts a machine-local alias forces every machine and container to create the same Git remote name before the config works.
@@ -59,6 +65,7 @@ Using `remote` for the endpoint URL in the results repository block matches the
5965
- A config file describes Git sync, artifact publishing, or result storage that should work from a fresh clone or container.
6066
- A field could mean either a remote endpoint URL or a local Git remote-name alias.
6167
- A setup script is expected to generate config that a developer can run with `bun run ...` from a latest checkout.
68+
- A result remote reflects a user's publishing destination rather than a project-owned canonical artifact repository.
6269

6370
## Examples
6471

0 commit comments

Comments
 (0)