Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
137a80d
feat(repo): effective-instructions receipt for repo reach
napetrov Oct 31, 2026
dce67d1
fix(repo): keep local directories out of the receipt's tree label
napetrov Oct 31, 2026
b37b9fd
feat(repo): reach conformance suite and a nightly agent x version matrix
napetrov Nov 1, 2026
92ad6ea
fix(repo): a malformed reach receipt fails its run, not the whole har…
napetrov Nov 1, 2026
41ef2c0
docs(repo): keep the reach matrix comment blocks to two lines
napetrov Nov 1, 2026
84a7bc1
fix(repo): every unreadable reach receipt fails its run
napetrov Nov 1, 2026
57248ae
Merge main (effective-instructions receipt #335) into ce-reach-matrix
napetrov Nov 2, 2026
4902697
fix(repo): a reach matrix names its expectations revision; merge refu…
napetrov Nov 2, 2026
51c8d6d
fix(repo): skip only failed and skipped runs in the merge repeat chec…
napetrov Nov 2, 2026
455d2e9
Create the markdown output directory before merge writes it
antonwolfy Nov 2, 2026
06b5893
Document that run_harness env only decides availability
antonwolfy Nov 2, 2026
1afd32a
Reject a scenario key with no directory in the expectations check
antonwolfy Nov 2, 2026
c3295e1
Reject a repeated harness name in the run command
antonwolfy Nov 2, 2026
48979fc
Let the test matrix helper take empty runs and cells
antonwolfy Nov 2, 2026
5580b5d
Leave failed runs out of the markdown version columns
antonwolfy Nov 2, 2026
21452d2
fix(repo): answer the reach matrix review
napetrov Nov 2, 2026
d32307e
fix(repo): answer the reach matrix review
napetrov Nov 2, 2026
0784ce2
fix(repo): shorten the codex profile comment; list the reach matrix i…
napetrov Nov 2, 2026
abfd724
docs(repo): shorten the codex suite profile's comment block to two lines
napetrov Nov 2, 2026
a6e0377
fix(repo): ship the codex suite profile in the package; find its CLI …
napetrov Nov 2, 2026
0b7a8bf
docs(repo): say which preflight errors make run exit 1
napetrov Nov 2, 2026
b4cb403
fix(repo): check harness keys in the expectations; say what inconclus…
napetrov Nov 3, 2026
87c79cb
docs(repo): write reach outputs under results/ and reports/; reword t…
napetrov Nov 3, 2026
07166bd
fix(repo): refuse an out directory that holds the fixtures; check onl…
napetrov Nov 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/.licenserc.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@ header:
- 'AGENTS.md'
- 'dokimi/data/agent_profiles/**'
- 'dokimi/data/skills/**'
# Reach conformance fixtures: the CLAUDE.md and AGENTS.override.md files a harness loads verbatim (AGENTS.md is
# ignored above, at any depth).
- 'dokimi/data/reach-conformance/**/CLAUDE.md'
- 'dokimi/data/reach-conformance/**/AGENTS.override.md'
# Eval oracles: patches applied to the workspace and reference answers
# written verbatim as the agent's answer (.agent-eval/run.py).
- '.agent-eval/tasks/**/*.patch'
Expand Down
215 changes: 215 additions & 0 deletions .github/workflows/reach-matrix.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,215 @@
# Copyright (C) 2026 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

name: reach-matrix

# Paid model calls, so never a PR check; a harness without a model, credential or CLI is skipped, not failed.
# Design and secrets: dokimi/docs/reach-matrix.md.
on:
schedule:
- cron: '37 4 * * *'
workflow_dispatch:

permissions: {}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maintainability · low
Nit: The multiline credential checks and merge script rely on implicit shell selection, including on the Intel runner. Declare defaults.run.shell: bash at workflow level so all four jobs use the same explicit shell and Bash error-handling behavior.

Suggestion:

Suggested change
permissions: {}
permissions: {}
defaults:
run:
shell: bash

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 21452d2: defaults.run.shell: bash at workflow level, so all four jobs use one explicit shell.


defaults:
run:
shell: bash

concurrency:
group: ${{ github.workflow }}
cancel-in-progress: false

jobs:
claude-code:
permissions:
contents: read
runs-on: ${{ github.repository_owner == 'intel' && 'intel-ubuntu-latest' || 'ubuntu-latest' }}
timeout-minutes: 120
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: '3.13'
Comment on lines +33 to +35

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

performance · low
Nit: All four jobs reinstall the locked Python dependencies nightly without enabling the setup-python cache. Existing workflows cache pip using dokimi/requirements.lock.txt; use the same cache and cache-dependency-path settings in each setup-python step to reduce repeated downloads and package-index dependence.

Suggestion:

Suggested change
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: '3.13'
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: '3.13'
cache: pip
cache-dependency-path: dokimi/requirements.lock.txt

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 21452d2: all four setup-python steps use cache: pip with dokimi/requirements.lock.txt as the cache dependency path.

cache: pip
cache-dependency-path: dokimi/requirements.lock.txt
- name: Install dokimi
working-directory: dokimi
run: pip install --require-hashes -r requirements.lock.txt
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
with:
node-version: '22'
- name: Check the credential
id: creds
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
AWS_BEARER_TOKEN_BEDROCK: ${{ secrets.AWS_BEARER_TOKEN_BEDROCK }}
run: |
if [ -n "$ANTHROPIC_API_KEY" ]; then backend=anthropic
elif [ -n "$AWS_BEARER_TOKEN_BEDROCK" ]; then backend=bedrock
else backend=none; fi
echo "backend=$backend" >> "$GITHUB_OUTPUT"
if [ "$backend" = none ]; then echo "present=false" >> "$GITHUB_OUTPUT"; else echo "present=true" >> "$GITHUB_OUTPUT"; fi
- name: Install the CLI
if: steps.creds.outputs.present == 'true' && vars.REACH_MODEL_CLAUDE_CODE != ''
run: npm install -g @anthropic-ai/claude-code@2.1.316
Comment on lines +55 to +57

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 21452d2: each harness job runs actions/setup-node (SHA-pinned, Node 22) before its npm install.

- name: Run reach over the fixtures
working-directory: dokimi
env:
PYTHONPATH: .
REACH_MODEL: ${{ vars.REACH_MODEL_CLAUDE_CODE }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
AWS_BEARER_TOKEN_BEDROCK: ${{ secrets.AWS_BEARER_TOKEN_BEDROCK }}
Comment on lines +62 to +64

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bug · medium
Must-fix: With only AWS_BEARER_TOKEN_BEDROCK and REACH_MODEL_CLAUDE_CODE configured, this job installs Claude but never selects the Bedrock backend or supplies AWS_REGION. The harness profile only forwards these settings; it does not infer them from the token. On a clean runner Claude therefore attempts the default Anthropic backend instead of the advertised Bedrock configuration. Pass CLAUDE_CODE_USE_BEDROCK=1 and a configured AWS_REGION for the Bedrock path, while preserving direct Anthropic authentication when selected.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 21452d2: the claude-code run sets CLAUDE_CODE_USE_BEDROCK=1 and AWS_REGION when the Bedrock token is the credential in use.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree with exai-bot here; the Bedrock-only setup the page advertises does not select Bedrock.

The job passes AWS_BEARER_TOKEN_BEDROCK and REACH_MODEL, and the availability check accepts the token. It sets neither CLAUDE_CODE_USE_BEDROCK nor AWS_REGION, which the profile only forwards (env_allow) and docs/reviewing.md:105 lists as required for Bedrock. By that doc, not a run, Claude Code falls back to the Anthropic backend with no ANTHROPIC_API_KEY, and every Claude scenario fails. The page (reach-matrix.md:128-130) names the Bedrock token as an alternative secret without these two.

Suggestion: pass CLAUDE_CODE_USE_BEDROCK and AWS_REGION (a repository variable) to this step, and name them in the Secrets and Variables paragraph; or drop the Bedrock alternative from the page.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 21452d2: the claude-code run selects Bedrock (CLAUDE_CODE_USE_BEDROCK=1) and passes AWS_REGION when only the Bedrock token is set.

CLAUDE_CODE_USE_BEDROCK: ${{ steps.creds.outputs.backend == 'bedrock' && '1' || '' }}
AWS_REGION: ${{ vars.AWS_REGION }}
run: python scripts/reach_conformance.py run --harness "claude-code=$REACH_MODEL" --out reach-out
- name: Upload the matrix
if: always()
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: reach-matrix-claude-code
path: dokimi/reach-out/claude-code.matrix.json
if-no-files-found: warn
retention-days: 30

codex:
permissions:
contents: read
runs-on: ${{ github.repository_owner == 'intel' && 'intel-ubuntu-latest' || 'ubuntu-latest' }}
timeout-minutes: 120
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: '3.13'
cache: pip
cache-dependency-path: dokimi/requirements.lock.txt
- name: Install dokimi
working-directory: dokimi
run: pip install --require-hashes -r requirements.lock.txt
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
with:
node-version: '22'
- name: Check the credential
id: creds
env:
CODEX_API_KEY: ${{ secrets.CODEX_API_KEY }}
run: |
if [ -n "$CODEX_API_KEY" ]; then echo "present=true" >> "$GITHUB_OUTPUT"; else echo "present=false" >> "$GITHUB_OUTPUT"; fi
- name: Install the CLI
if: steps.creds.outputs.present == 'true' && vars.REACH_MODEL_CODEX != ''
run: npm install -g @openai/codex@0.166.0
- name: Run reach over the fixtures
working-directory: dokimi
env:
PYTHONPATH: .
REACH_MODEL: ${{ vars.REACH_MODEL_CODEX }}
CODEX_API_KEY: ${{ secrets.CODEX_API_KEY }}
run: python scripts/reach_conformance.py run --harness "codex=$REACH_MODEL" --out reach-out
- name: Upload the matrix
if: always()
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: reach-matrix-codex
path: dokimi/reach-out/codex.matrix.json
if-no-files-found: warn
retention-days: 30

copilot:
permissions:
contents: read
runs-on: ${{ github.repository_owner == 'intel' && 'intel-ubuntu-latest' || 'ubuntu-latest' }}
timeout-minutes: 120
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: '3.13'
cache: pip
cache-dependency-path: dokimi/requirements.lock.txt
- name: Install dokimi
working-directory: dokimi
run: pip install --require-hashes -r requirements.lock.txt
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
with:
node-version: '22'
- name: Check the credential
id: creds
env:
COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }}
run: |
if [ -n "$COPILOT_GITHUB_TOKEN" ]; then echo "present=true" >> "$GITHUB_OUTPUT"; else echo "present=false" >> "$GITHUB_OUTPUT"; fi
- name: Install the CLI
if: steps.creds.outputs.present == 'true' && vars.REACH_MODEL_COPILOT != ''
run: npm install -g @github/copilot@1.0.105
- name: Run reach over the fixtures
working-directory: dokimi
env:
PYTHONPATH: .
REACH_MODEL: ${{ vars.REACH_MODEL_COPILOT }}
COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }}
run: python scripts/reach_conformance.py run --harness "copilot=$REACH_MODEL" --out reach-out
- name: Upload the matrix
if: always()
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: reach-matrix-copilot
path: dokimi/reach-out/copilot.matrix.json
if-no-files-found: warn
retention-days: 30

matrix:
needs: [claude-code, codex, copilot]
if: always()
permissions:
contents: read
runs-on: ${{ github.repository_owner == 'intel' && 'intel-ubuntu-latest' || 'ubuntu-latest' }}
timeout-minutes: 15
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: '3.13'
cache: pip
cache-dependency-path: dokimi/requirements.lock.txt
- name: Install dokimi
working-directory: dokimi
run: pip install --require-hashes -r requirements.lock.txt
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
with:
pattern: reach-matrix-*
merge-multiple: true
path: dokimi/reach-in
- name: Merge the matrices
working-directory: dokimi
env:
PYTHONPATH: .
run: |
missing=0
for harness in claude-code codex copilot; do
if [ ! -f "reach-in/$harness.matrix.json" ]; then
echo "::error::no $harness matrix: its job failed before writing one"
missing=1
fi
done
[ "$missing" -eq 0 ] || exit 1
python scripts/reach_conformance.py merge reach-in/*.matrix.json \

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree with exai-bot here; a harness job that dies before its upload leaves its matrix out, and the merge publishes the other two without a warning.

The matrix job runs with if: always(), and the upload steps use if-no-files-found: warn. If the Codex npm install fails, reach-in/ holds two files. cf.merge accepts any non-empty list, so the page reports no failed or skipped Codex runs: the harness is absent, not failed. By the code, not a run: merge has no expected-harness list.

Suggestion: before the merge, fail the step when any of claude-code.matrix.json, codex.matrix.json or copilot.matrix.json is missing from reach-in/, or give merge an --expect-harness list that records the absent ones as failed.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 21452d2: the matrix job fails and publishes nothing when a harness matrix is missing, as in the thread above.

--out reach-out/reach-matrix.json --md reach-out/reach-matrix.md
Comment on lines +204 to +205

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bug · medium
Must-fix: Because this job runs with always(), a harness that fails during dependency/CLI installation or times out before writing its matrix is silently absent from the published report. For example, if the Codex npm install fails, the glob contains only the other two matrices; merge accepts them and reports no failed or skipped Codex runs. Validate that all three expected matrix files exist before publishing, or explicitly record missing harness jobs as failures/incomplete coverage.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 21452d2: the matrix job fails and publishes nothing when any of the three harness matrices is missing, including one whose job died before upload.

cat reach-out/reach-matrix.md >> "$GITHUB_STEP_SUMMARY"
- name: Upload the matrix page
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: reach-matrix
path: |
dokimi/reach-out/reach-matrix.json
dokimi/reach-out/reach-matrix.md
if-no-files-found: error
retention-days: 90
2 changes: 1 addition & 1 deletion dokimi/benchmarks/spec.v1.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ future:
# that matched almost nothing, max_docs one that escaped; raise it with each new doc.
golden_manifest:
min_docs: 10
max_docs: 37
max_docs: 38
include:
- docs/**/*.md
exclude:
Expand Down
8 changes: 8 additions & 0 deletions dokimi/changelog.d/20261031_160000_napetrov_reach-matrix.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<!--
Copyright (C) 2026 Intel Corporation
SPDX-License-Identifier: Apache-2.0
-->

### Added

- **A reach conformance suite and a nightly agent × version matrix** — `data/reach-conformance/` holds eight fixture repositories (root, nested, `CLAUDE.md` with `AGENTS.md`, a Claude Code `@` import, an `AGENTS.override.md`, a subdirectory shadow, a file over the size cap, a symbolic link), and `expectations.yaml` (`reach_conformance.v1`) gives what each harness's vendor documentation says each file loads in each scenario, or `unknown`. `scripts/reach_conformance.py` checks the expectations against the fixtures, runs `repo reach --format receipt` over them for each harness with a model, credential and CLI present (the rest are recorded as skipped), and merges the per-harness `reach_matrix.v1` JSON into one matrix and one markdown page. `.github/workflows/reach-matrix.yml` runs it nightly and on dispatch, not as a pull-request check, and uploads the matrix as an artifact. The design, the agreement rules and the limits are in `docs/reach-matrix.md`.
3 changes: 3 additions & 0 deletions dokimi/data/reach-conformance/claude-and-agents/AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Agent guide

These instructions are for the other coding agents.
3 changes: 3 additions & 0 deletions dokimi/data/reach-conformance/claude-and-agents/CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Claude instructions

These instructions are for Claude Code.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Agent guide

Shared rules for every coding agent.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Claude instructions

Shared rules live in AGENTS.md.

@AGENTS.md
117 changes: 117 additions & 0 deletions dokimi/data/reach-conformance/expectations.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
# Copyright (C) 2026 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

# Vendor-documented state per file and reach scenario; unlisted means unknown (no claim).
# Sources and scenario meanings: docs/reach-matrix.md.
schema: reach_conformance.v1
cases:
root-agents:
summary: AGENTS.md at the repository root, and nothing else.
claude-code:
why: With no CLAUDE.md in the working directory or above, Claude Code reads AGENTS.md.
files:
AGENTS.md: {"cwd=.": loaded}
codex:
why: Codex checks AGENTS.override.md then AGENTS.md in each directory from the git root to cwd.
files:
AGENTS.md: {"cwd=.": loaded}

nested-agents:
summary: A root AGENTS.md and a packages/app/AGENTS.md below it.
claude-code:
why: >-
Every AGENTS.md in the working directory and above loads at start-up. A subdirectory's
AGENTS.md loads when Claude reads a file there with the Read tool.
files:
AGENTS.md: {"cwd=.": loaded, "cwd=packages/app": loaded, "read=packages/app": loaded}
packages/app/AGENTS.md: {"cwd=.": not_loaded, "cwd=packages/app": loaded, "read=packages/app": loaded}
codex:
why: >-
Codex walks from the git root down to cwd, one file per directory. A directory off that path
is not read; the docs do not describe a read-triggered load, so read= is unknown.
files:
AGENTS.md: {"cwd=.": loaded, "cwd=packages/app": loaded}
packages/app/AGENTS.md: {"cwd=.": not_loaded, "cwd=packages/app": loaded}

claude-and-agents:
summary: A root CLAUDE.md beside a root AGENTS.md.
claude-code:
why: >-
AGENTS.md is read only when there is no CLAUDE.md in the working directory or above; the
default setting (claude-md-or-agents-md) reads the CLAUDE.md files alone.
files:
CLAUDE.md: {"cwd=.": loaded}
AGENTS.md: {"cwd=.": not_loaded}
codex:
why: >-
Codex checks AGENTS.override.md, AGENTS.md and the project_doc_fallback_filenames list only,
and CLAUDE.md is not on that list by default.
files:
AGENTS.md: {"cwd=.": loaded}
CLAUDE.md: {"cwd=.": not_loaded}

claude-imports-agents:
summary: A root CLAUDE.md that imports AGENTS.md with @AGENTS.md.
claude-code:
why: CLAUDE.md @path imports are expanded and loaded with the file that references them.
files:
CLAUDE.md: {"cwd=.": loaded}
AGENTS.md: {"cwd=.": loaded}
codex:
why: Codex does not read CLAUDE.md by default, so the import is never followed.
files:
AGENTS.md: {"cwd=.": loaded}
CLAUDE.md: {"cwd=.": not_loaded}

override-file:
summary: A root AGENTS.md beside an AGENTS.override.md.
claude-code:
why: The Claude Code AGENTS.md rules list AGENTS.override.md among the files it does not read.
files:
AGENTS.md: {"cwd=.": loaded}
AGENTS.override.md: {"cwd=.": not_loaded}
codex:
why: >-
In each directory AGENTS.override.md is used in place of AGENTS.md, and at most one of the
two is read.
files:
AGENTS.override.md: {"cwd=.": loaded}
AGENTS.md: {"cwd=.": not_loaded}

subtree-claude-shadow:
summary: sub/AGENTS.md and sub/CLAUDE.md in the same subdirectory.
claude-code:
why: >-
A CLAUDE.md in the working directory loads at start-up. AGENTS.md is not read in a directory
that has a CLAUDE.md of its own.
files:
sub/CLAUDE.md: {"cwd=.": not_loaded, "cwd=sub": loaded, "read=sub": loaded}
sub/AGENTS.md: {"cwd=.": not_loaded, "cwd=sub": not_loaded, "read=sub": not_loaded}
codex:
why: Codex reads sub/AGENTS.md when cwd is sub, and never reads CLAUDE.md by default.
files:
sub/AGENTS.md: {"cwd=.": not_loaded, "cwd=sub": loaded}
sub/CLAUDE.md: {"cwd=.": not_loaded, "cwd=sub": not_loaded}

large-file:
summary: A root AGENTS.md of about 40 KB, above Codex's 32 KiB default.
claude-code:
why: >-
No size limit is documented. The memory page advises under 200 lines per file, which is a
target and not a cut-off. So the state is unknown.
files: {}
codex:
why: >-
project_doc_max_bytes (default 32 KiB) caps the combined size of the chain. The docs do not
say whether a file that crosses the cap is cut, so the state is unknown.
files: {}

symlinked-file:
summary: CLAUDE.md is a symbolic link to AGENTS.md.
claude-code:
why: The docs do not say how a symbolic link named CLAUDE.md is read, so the state is unknown.
files: {}
codex:
why: Codex reads AGENTS.md itself, and the link's name is not one it checks.
files:
AGENTS.md: {"cwd=.": loaded}
13 changes: 13 additions & 0 deletions dokimi/data/reach-conformance/guidance.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Copyright (C) 2026 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

# The guidance-only manifest every conformance case is probed with (`repo reach --manifest-file`).
# AGENTS.override.md is named here so every harness probes it, not only the ones whose profile names it.
schema: repo_manifest.v1
id: reach-conformance
guidance:
globs:
- "**/AGENTS.md"
- "**/AGENTS.override.md"
- "**/CLAUDE.md"
- "**/CLAUDE.local.md"
Loading
Loading