Repository navigation
chore(deps): adopt sdk v0.2026296.2152 — the candywalk declared-refs release - #47
Conversation
…release opencharly/sdk#467 (tag v0.2026296.2152) makes candywalk.collectRefs read a manifest's DECLARED refs off its scalar nodes and skip block scalars, so a runtime fixture embedded in a `command:` body no longer kills the corpus walk (opencharly/sdk#455, the plugin-box bed box-reconcile-closure-reports-unfetchable). Producer-first consumer bump: without it this plugin builds the generator against a candywalk that still scans raw bytes, and the marketplace refs cutover cannot generate its corpus at all. No source change — the plugin already calls candywalk.CollectEntitiesRemote, and the fix is inside that call. Gates on this head: go build ./..., go test ./... and `charly box validate` (OK, 0 warnings, 0 errors) with the worktree-local charly. golangci-lint cannot typecheck any module on this host (export-data v5 vs v4) — filed as sdk#466, red on origin/main too. Assisted-by: DeepSeek Harness ollama-cloud deepseek-v4.1-flash (fully tested and validated)
Review — BLOCKThe dependency bump itself is coherent: The blocker is a factual contradiction between the body and the diff. Blocks
Verdict: BLOCK ollama-cloud/deepseek-v4.1-flash — action-review. |
|
STATUS — RCA on the round-1 BLOCK, and the fix. The finding, accepted in full. The body claimed the pin moved Root cause (mechanism). I read The missed control. My pre-push self-audit did not include the rule the self-audit's own step 3c The fix on this head (no new commit — body only, by design). The R5 bullet now names Nothing else was raised. The verdict accepted the bump itself, the tier, the two-file scope and the Re-run: attempt 2 of run 40032077997 on the same head Agent: charly Assisted-by: DeepSeek Harness ollama-cloud deepseek-v4.1-flash (fully tested and validated) |
Review — PASSWhat the diff actually doesTwo files, module metadata only:
Body vs. diff (honesty re-derivation)
Correctness / tests / security / scope
Comments, dispositioned
No designated maintainer sign-off is present, so the PR is gated purely on its own evidence — which is consistent and correct. Verdict: PASS ollama-cloud/deepseek-v4.1-flash — action-review. |
…t reproduces (#42) (#52) `charly task skills:drift` was red in four different ways at once, and no CI ran it, so nothing could see it. This change makes the gate runnable, gives it a job that owns the GENERATOR side of the corpus contract, and re-points the corpus pin at the commit this generator actually reproduces. THE RECIPE (root `charly.yml`, `skills:drift`) - The parameter was `out` — lower-case. The task runner's expansion grammar matches UPPER-CASE names only (`sdk/kit/checkvars_expand.go:16-17`), so the value never reached the command and the shell dropped the empty word ("--out: expected string value but got EOL"). It is `CORPUS` now. - `--root` named the repo root, but the corpus's ONE generation input — the refs list, `candy/charly-marketplace/charly.yml` — lives INSIDE the corpus checkout. Both flags now name the corpus checkout. - The "the tree is committed" half ran `git status` in THIS repo, so it checked the plugin's tree, not the corpus's. It names the corpus now. - The drift step carried no `timeout:`, and the per-step never-hang bound is 1m30s. The drift resolves EVERY corpus source (the refs list names ~1200 repos at pinned versions) before it compares a single byte — measured 11m48s in the marketplace repo's own deploy workflow — so the step was killed at the ceiling and the gate reported a TIMEOUT where the truth was "slow, and green". The bound is a hang guard, not a budget. THE SDK PIN (candy/plugin-marketplace/go.mod) sdk v0.2026296.2152's `acceptedRef` refuses EVERY `github.com/opencharly/charly` ref. The corpus's refs list RELIES on the BARE repo-root form (`@github.com/opencharly/charly:v2026.297.0032`) being a corpus source. A standalone build of the generator therefore dropped the charly corpus source, the closure twin `layer-charly-internals` won, and a rule-renumbering difference (R2/R3 -> R3/R4) left 9 stale artifacts. sdk v0.2026297.129 admits the bare repo-root form and refuses only the SUBPATH form (opencharly/sdk#468 -> opencharly/sdk#470), so the generator reproduces the corpus again. The declared-refs fix PR #47 adopted (opencharly/sdk#467) is present in both versions — the bump is a strict superset, not a revert. THE CORPUS PIN (`var: MARKETPLACE_REF`, and the literal that duplicates it) The current generator no longer reproduces the Oct-15 corpus commit: at e802da68 the gate is red with 4 stale artifacts (`plugins/.well-known/skills/index.json`, `plugins/DISPATCHER.md`, `plugins/check/skills/openclaw/SKILL.md`, `plugins/tools/skills/crabbox/SKILL.md`). At cc10955e — the corpus's current `main` head, which is the invariant this repo declares — it is green with 0. THE CI JOB (.github/workflows/drift-gate.yml) The marketplace repo's deploy workflow owns the CORPUS side. Nothing owned the GENERATOR side. The job runs the recipe on every merge to `main`, against the corpus commit this repo DECLARES, read out of `candy/plugin-marketplace/charly.yml` rather than repeated as a second literal (one pin, not two that can drift). It runs on `main` and not on `pull_request`, and that is a design constraint. A generator change that alters the output makes the declared corpus commit stale, and the corpus can only be regenerated with a RELEASED generator — so a pull-request gate would be red by construction for exactly the change it should inform, and it would deadlock the chain that repairs it (generator merged and tagged -> the corpus regenerates with that tag -> the pin is bumped here). It would also be a de-facto required check: the org pr-validator's `arm` job arms native auto-merge only when EVERY check on the head is green. THE PARAM IS QUOTED AT ITS USE SITES A task param reaches a command step as shell TEXT, not as a data channel (opencharly/plugin-task#34 owns the class-level fix), so `${CORPUS}` is quoted where it is used. A corpus checkout under a path with a space would otherwise split into two words and the CLI would reject the arguments. TWO DEFECTS FOUND AND FIXED IN PASSING - `task marketplace:pin`'s second step compared the corpus's `main` head against the file's LAST 40-hex string — which is the sha256 prefix of the byte-identical SKILL.md the candy's file records, not a pin. The step could never be true (measured: it compared cc10955e against 7d4d2676). Each occurrence is now found by its ANCHOR (`MARKETPLACE_REF:` and `contains:`), which a third string cannot satisfy. The same anchoring is what the CI job reads the baseline with. - The `setup` launcher and the `.claude/hooks` surface were removed at source in 2026.241.1105, but the README, the box description, the candy's description, the plugin's package comments and the prune boundary still described them as shipped. They are gone from the prose (R5), with the generator's own test (`assertNotWritten(t, out, "setup")`) as the truth they now match. Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (fully tested and validated) Co-authored-by: Andreas Trawoeger <atrawog@gmail.com>
Summary
Adopt
github.com/opencharly/sdk v0.2026296.2152— the release of thecandywalkref-collector fix(
opencharly/sdk#467, tagv0.2026296.2152).collectRefsnow reads a manifest's DECLARED refs offits scalar nodes and skips block scalars, so a runtime fixture embedded in a
command:body(
plugin-box'sbox-reconcile-closure-reports-unfetchablebed) no longer kills the corpus walk(
opencharly/sdk#455).This is the producer-first consumer bump: without it the marketplace shim builds the generator
against a
candywalkthat still parses raw bytes, and the refs cutover'sgeneratecannot run.File-by-file:
candy/plugin-marketplace/go.mod— therequire github.com/opencharly/sdkpin movesv0.2026296.1141 → v0.2026296.2152.candy/plugin-marketplace/go.sum— the two sums for that module version (h1 + the Go-module go.modsum), verified by
go mod tidy.No source file changes: the plugin already calls
candywalk.CollectEntitiesRemote, and the fix isinside that call. Nothing else needed a code change, which is why the diff is two lines of module
metadata.
How tested
The
charlyused above is a worktree-local build fromopencharly/charlyorigin/main(
charly version→2026.296.2116), not a shared install (R9).golangci-lintv2.13.2 cannot typecheck ANY module on this host — itsgo/typesreads export-dataversion 4 and the Go 1.27.3 stdlib writes version 5 — and it fails identically on
origin/main's owntree. It is filed as
opencharly/sdk#466with the reproduction and the fix, and it is why everyclaim here is about
build/test/box validaterather than about lint.Rulebook compliance
/charly-internals/git-workflow,/charly-internals/go,/charly-internals/marketplace,/charly-internals/pluginand this repo'sAGENTS.mdwere loaded before the edit.golangci-lintexport-data skew,already filed (
opencharly/sdk#466), reproduced onorigin/main.sdk/candywalk); this repo adds nocopy of it.
replace, no vendoring, no local patch. The released tag is consumed.v0.2026296.1141is deleted, not kept beside the new one (readfrom the diff on this head,
git show HEAD:candy/plugin-marketplace/go.mod, not from a checkout).git status --shortread before staging; one commit, one push; no force-push, no bypass.charly marketplace generateover the cutover refs list is run on the marketplace repo and its corpus diff is pasted in that PR.
A pin bump has no behaviour of its own to cover; its proof is the consumer running.
N/A— a Go module pin, no network service at test timebeyond the module proxy fetch).
binary and the module cache, no shared install.
go build ./...,go test ./...andcharly box validateon this head (above). The one gate that cannot run on this host is filed.Change classification
go.mod+go.sum), no source change. Not documentation-only.fully tested and validated— build, test and the repo'sbox validategate passed onthis head; the single unavailable gate (
golangci-lint, host toolchain skew) is filed asopencharly/sdk#466.opencharly/marketplace'stools/marketplace-clirequire → the refscutover PR in the same repo.
Filed issues
opencharly/sdk#466—golangci-lintv2.13.2 cannot decode the Go 1.27.3 stdlib export data; redon
maintoo. Filed there because the pin lives in that repo's CI; it is host-wide.Agent: charly
Assisted-by: DeepSeek Harness ollama-cloud deepseek-v4.1-flash (fully tested and validated)