Repository navigation
fix(corpus): fetch corpus sources files-only — the walk reads no submodule - #49
Merged
Merged
Conversation
…odule A corpus source is read for its OWN TREE: charly.yml and the .agents/ trees. The walk inherited refs.DownloadRepo, which populates EVERY submodule the fetched repo declares and fails the whole fetch when one cannot be fetched — right for a `--repo` cache, fatal here. Measured cold on opencharly/opencharly:v2026.296.2037 (412 declared gitlinks), `charly marketplace generate` exited rc=1 in `populating submodules`, so the umbrella could not be a corpus source at all (opencharly/spec#279), after the same population had already been measured as a pure cost on this very walk (opencharly/spec#267). refs.DownloadRepoFiles has candywalk.RemoteResolver's exact signature, so this is a one-line resolver swap with no SDK change, and the `--repo` cache keeps the whole-project fetch it needs. The two fetches also have separate cache entries (<cache>/.files/<repo>@<version> vs <cache>/<repo>@<version>), so a corpus run and a `--repo` run never re-download each other's work. TestReadKinds_FetchesCorpusSourcesFilesOnly pins it: after readKinds on a fresh cache the whole-project entry for the fetched ref must NOT exist. FAILS with the pre-fix resolver ("readKinds wrote a WHOLE-PROJECT cache entry"). Assisted-by: DeepSeek Harness deepseek-v4.1-flash (fully tested and validated)
This was referenced Oct 23, 2026
Review — PASSI reviewed all four changed files against the PR body and re-derived each claim. What the diff actually does
Honesty / consistency
CommentsThere are 0 comments, so there is no maintainer sign-off to weigh and none is required; the change stands on its own evidence. Residual (non-blocking) risks
No secrets, injection, privilege, or dependency-red-flag issues. Scope is coherent: one consumer adopts the upstream files-only resolver, with a test that fails without the change. Verdict: PASS ollama-cloud/deepseek-v4.1-flash — action-review. |
github-actions Bot
pushed a commit
to opencharly/marketplace
that referenced
this pull request
Oct 24, 2026
The umbrella's three general-guidance skills (agents, cutover-policy, root-cause-analyzer) have no code, plugin or config behind them, so their home is the one repo every consumer shares (opencharly/opencharly#600, AGENTS.md Part II #5). This is the pin #566 withdrew: a repo declaring 412 submodules could not be a corpus source at all while the walk's fetch populated every one of them and failed the whole fetch when one could not be fetched. Producer-first: opencharly/spec#281 landed the files-only fetch (refs.DownloadRepoFiles, tag v0.2026296.2332), opencharly/plugin-marketplace#49 made the corpus walk use it (tag candy/plugin-marketplace/v0.2026296.2345), and this PR takes both plus the pin. The corpus delta is ONE file — internals/skills/agents/references/ hooks-and-lifecycle.md — because the three bodies are byte-identical in both sources; the agents REFERENCE file is the only thing that differs, and it now matches the umbrella's, not layer-charly-internals@v2026.296.1907's copy. 361 SKILL.md, 496 artifacts, no skill gained or lost. The carrier keeps publishing git-workflow and repo-setup, so its pin stays: its drain is its own PR. Assisted-by: DeepSeek Harness deepseek-v4.1-flash (fully tested and validated) Co-authored-by: Andreas Trawoeger <atrawog@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Agent: charly-spec279
Summary
The corpus walk now fetches its sources files-only:
readKinds' remote resolverbecomes
refs.DownloadRepoFiles(from thegithub.com/opencharly/specrelease thatintroduces it) instead of
refs.DownloadRepo.A corpus source is read for its OWN TREE —
charly.ymland the.agents/trees — so thefetch should certify exactly that.
refs.DownloadRepopopulates every submodule thefetched repo declares and fails the whole fetch when one cannot be fetched: right for a
--repocache, and fatal here. Measured cold, on the repo that forced the producer fix(
opencharly/opencharly:v2026.296.2037, 412 declared gitlinks):That is
opencharly/spec#279, and it is why the umbrella pin was withdrawn fromopencharly/marketplace#566: the umbrella authors three general-guidance skills and thecorpus could not reach them. The same population had already been measured as a pure
cost on this very walk in
opencharly/spec#267(431 gitlinks, ~3 min cold, 272 MBtransient, none of it read).
The change
One line, no seam change:
candywalk.RemoteResolverisfunc(repoPath, version string) (string, error)and the files-only fetch has exactlythat signature, so the SDK is untouched and the
--repocache keeps the whole-projectfetch it needs. The two fetches also have separate cache entries
(
<cache>/.files/<repo>@<version>vs<cache>/<repo>@<version>), so a corpus run and a--reporun never re-download each other's work.How tested
Call-site test (
readkinds_remote_test.go::TestReadKinds_FetchesCorpusSourcesFilesOnly)— a synthetic project referencing a real moved candy, with a fresh
CHARLY_REPO_CACHE:the walk must still resolve the remote entity, and the whole-project cache entry for that
ref must NOT exist afterwards. FAILS without the change (the pre-fix resolver writes
exactly that entry).
Live, cold — the whole corpus this repo generates, generated from a real refs list
with
opencharly/opencharly:v2026.296.2037pinned, on an emptyCHARLY_REPO_CACHE:Rulebook compliance
origin/main; one commit; no force-push.check-marketplace; the corpus-level drift gate belongs toopencharly/marketplace, which this release unblocks.Change classification
Dependency adoption (spec → the release carrying
refs.DownloadRepoFiles) plus aone-line resolver change. No schema change, no emitted-artifact change by itself — the
corpus this generator emits is byte-identical for every source that declares no
submodule.
Gates on the committed tree
The bed's first attempt died in
podman loadwithdisk quota exceededwriting intothis host's
/tmptmpfs; re-run withTMPDIRon the root filesystem it passes all 16steps. That is a host-capacity finding, not this diff's — said out loud rather than
quietly retried.
The negative arm, measured: with the one line reverted to
refs.DownloadRepo, the newtest fails with
readKinds wrote a WHOLE-PROJECT cache entry: the corpus walk must fetch files-only (spec#279).Attribution
This session's delivered system message reads, verbatim:
You are a coding agent powered by the deepseek-v4.1-flash model.— harnessDeepSeek Harness, modeldeepseek-v4.1-flash; cited with opencharly/opencharly#538.Assisted-by: DeepSeek Harness deepseek-v4.1-flash (fully tested and validated)