5 Commits

Author SHA1 Message Date
thejesh23 e67ae16294 fix: quote argument-hint YAML values so Copilot CLI ≥1.0.65 loads all skills
`argument-hint: [foo]` YAML-parses as a flow sequence (array), not a
string. Downstream slash-command loaders that validate `argument-hint`
as a string — notably GitHub Copilot CLI ≥ 1.0.65 — silently reject
the skill on load, and the command disappears from the CLI menu.

Wrap the value in double quotes so it parses as a string. No behaviour
change on Claude Code.
2026-07-13 10:23:48 +08:00
Ruofeng Yang df77da13e8 fix(compute-env-contract): reproducible specHash, structured witness, wiring conflicts, ledger path honesty (codex review)
Five findings from cross-model review:
1. specHash now has an EXACT canonical form (parse YAML → json.dumps
   sort_keys/no-whitespace → sha256[:8]) with the exact command in-file;
   verified reproducible across key order / comments / whitespace variants.
2. smoke.gpu_tests is structured {cmd, expect} so the witness regex the
   validation tier requires actually exists in the spec schema (was list[str]).
3. vast-gpu Setup Step 1 no longer contradicts the contract: renders ordered
   phases (pins first), requirements.txt demoted to legacy single-phase
   fallback with conversion guidance.
4. serverless-modal example shows chained per-phase .pip_install() calls as
   the rendered form of ordered pip_phases (was one flat call).
5. Ledger text no longer claims git-blameability: .aris/ is gitignored, so the
   ledger is project-local/uncommitted by default; committed history = put the
   blocks in the tracked server-notes file (block format is the contract, not
   the path).

All fixes applied to mainline AND mirror copies. Parity guard 18/18.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 23:10:47 +08:00
Ruofeng Yang 569dd51cce feat(compute): unified environment contract — declarative spec, hash ledger, three-tier validation
ARIS's 6+ compute skills (run-experiment, experiment-queue, serverless-modal,
vast-gpu, qzcli, SSH paths) each re-encoded environment knowledge with no
shared contract, so "env is ready" was vibes — the classic overnight failure
being import-success followed by a CUDA-kernel death 8 GPU-hours later.

New shared-references/compute-env-contract.md (mainline + codex mirror):
- provider SHAPES (direct SSH / scheduler cluster / managed API): recognize
  which one a provider already is; the shape defines build/register/resolve.
- one DECLARATIVE SPEC per env (base, system_pkgs, ORDERED pip_phases — each
  phase its own pip call, so pinning a fought-over package in an earlier phase
  mechanically wins version fights — env vars, weight_dirs, smoke probes),
  rendered per shape rather than re-written per skill.
- ENV LEDGER `.aris/compute/<provider>.md` with `env:<name>@<specHash>` blocks:
  spec change = hash change = mechanical cache miss; unchanged = warm-reuse.
  "Did the env change since last week?" becomes a string comparison.
- THREE-TIER VALIDATION: import (cheap, catches little) → seeded
  kernel-dispatch witness with sentinel regex (catches wrong-SM wheels,
  loader-path .so misses, RO caches; run on every build) → agent-follows-doc
  (a FRESH subagent runs the documented invocation VERBATIM and reports
  doc-vs-reality divergence; the author never self-certifies its own doc, per
  acceptance-gate.md — run after any rebuild/doc edit, before declaring ready).
- grep-able diagnosis table (symptom → layer → fix) with the instruction to
  append provider-true gotchas to the ledger.

Wired into all five compute skills (mainline + mirror) at their natural
points: run-experiment Step 1 (ledger-first), experiment-queue Core Concepts
(import-death wave = skipped contract, not a queue bug), serverless-modal
(modal.Image = the rendered form of the same spec), vast-gpu Setup (ordered
phases + witness before real run), qzcli (scheduler shape; witness inside a
submitted job, not on the login side).

The mirror carries the contract file itself (five path-referencing consumers
justify carrying per the appendage doctrine; parity guard green).

Adapted from Anthropic's Claude Science compute-env-setup skill (Apache-2.0,
re-hosted by HughYau/AcademicForge), ported off its proprietary host.* runtime
onto plain bash + SSH + subagents; credited in-file.

Verification: inventory consistent; full suite 407 passed / 16 skipped;
mirror parity guard 18/18.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 23:10:47 +08:00
Ruofeng Yang 8d26958504 refactor(skills): remove 48 vestigial Agent grants + enforce grant-tracks-usage
Work-block 2/6 of the ultracode×ARIS integration. Least-privilege sweep of
the `Agent` tool capability across all mainline skills.

Finding (verified by exhaustive grep + codex GPT-5.5 xhigh cross-model audit):
all 48 mainline skills that listed `Agent` in `allowed-tools` were carrying a
pure boilerplate grant — NONE actually invoke the Agent tool (Tier-2 Claude
subagent spawning) anywhere in their body. The only "agent"/"spawn" phrasings
in those bodies are (a) "reviewer sub-agent" = the external codex/GPT reviewer,
and (b) proof-checker's "spawn a micro-claim / fresh thread" = proof-obligation
ledger + codex review threads. Neither needs the Agent grant.

Changes:
- Strip the bare `Agent` token from all 48 mainline `allowed-tools:` lines
  (surgical: token-list parse + rejoin, no malformed/double commas; codex
  confirmed each line equals old-minus-Agent with no other token dropped).
- Document the policy in shared-references/fan-out-pattern.md ("Allowed-tools
  hygiene"): `Agent` is granted ONLY to skills that genuinely fan out at
  Tier-2; Tier-1 (Workflow) is harness-level and needs no grant; Tier-3
  (sequential, e.g. kill-argument's codex threads) spawns nothing. A skill
  that adds real fan-out re-grants `Agent` in the SAME change that adds the
  fan-out prose, and that prose must cite fan-out-pattern.md.
- Enforce it in tools/check_skills_inventory.py: any mainline skill granting
  `Agent` whose body does not cite `fan-out-pattern.md` fails the drift check.
  Prevents vestigial grants from creeping back and makes every real grant
  traceable to the convention.

Codex review (fresh thread + follow-up) caught and I fixed before landing:
- frontmatter_split() originally split on "\n---" and mis-handled bodies with
  `---` horizontal rules (latent now — would have bitten WB3 when proof-checker
  re-grants); rewritten to anchor on the leading YAML block.
- citation match tightened from bare `fan-out-pattern` to `fan-out-pattern.md`.
- stale fan-out-pattern.md idea-creator example (said it "already declares
  Agent") corrected to reflect the post-strip state + WB3 re-grant.

WB3 re-grants Agent to idea-creator / research-lit / proof-checker when it
wires their fan-out. Drift checker passes; git diff --check clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:51:42 +08:00
Yihong Jin 1d12b15f6d feat: add Vast.ai on-demand GPU rental support (gpu: vast)
Add a new `vast-gpu` skill and integrate Vast.ai as a third GPU mode
alongside local and remote SSH. The skill analyzes training tasks
(model size, dataset, estimated time) to recommend cost-optimized GPU
options with estimated total cost, then handles the full lifecycle:
rent → setup → run → collect results → auto-destroy.

Closes #89

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-29 14:20:15 -07:00