Repository navigation
feat(upstream): admission rule, David pick-only, shared agent context - #56
Draft
thecolormaroun wants to merge 1 commit into
Draft
thecolormaroun wants to merge 1 commit into
thecolormaroun wants to merge 1 commit into
Conversation
Admission rule (docs/upstream-policy.md): a repo is tracked weekly only with an OSI license file, publication for other users (user README, stable paths, real commits), no silent deletions or versioned releases, and general-purpose skills. Anything else is pick-only. Every provider in registry/upstreams.json now has "tracking": "weekly" or "pick-only". The maintenance lane rejects a missing mode and never observes or proposes a pick-only provider; the materializer and discovery refuse one; import-pinned-skills.py refuses one before any network access and checks the license id, license file and README for a weekly one. davidondrej/skills is pick-only. Its 12 remaining skills become Stack-owned at their last inspected commit, its import rule and allowlist root are removed. The other providers were audited and left unchanged. AGENTS.md (moved from config/CLAUDE.md) is the single instruction file; CLAUDE.md is a symlink to it. docs/context holds state, append-only decisions and the latest handoff, with a rule that every agent reads and updates them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.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.
Based on #55 (
refactor/david-matt-import-cleanup), and this PR targets that branch. Merge #55 first, then retarget this PR tomain(GitHub does it automatically when #55's branch is deleted) and rebase, because #55 is squash-merged. Draft; not merged, not installed.1. Admission rule
docs/upstream-policy.md. A repo can be a tracked provider ("tracking": "weekly", on the weekly maintenance lane) only if all four hold:Anything else is
"pick-only": Stack imports one reviewed skill, which becomes Stack-owned and stops tracking upstream.Enforced in code:
registry/upstreams.jsonhas"tracking"(schema updated).scripts/stack-maintenance.pyrejects a missing or unknown value.pick_only, sopreparecan't propose it. Supplied refs may include or leave out pick-only providers; a missing weekly one still fails closed.scripts/materialize-maintenance-proposal.pyandscripts/discover-upstream-updates.pyrefuse a provider that isn'tweekly.scripts/import-pinned-skills.pyrefuses a pick-only provider before any network access. For a weekly one it checks an OSI license id, a regular license file and a README in the exact upstream checkout. Criteria 2–4 need a person, so they live in the audit table.tests/test_upstream_admission.pycovers all of this and requires every provider to have a row in the audit table.I didn't edit
~/.claude/scheduled-tasks/stack-upstream-sync/SKILL.md; another session owns it.2. davidondrej/skills is now pick-only
This reverses part of #55. #55 kept David's 12 surviving skills on the lane. They're now Stack-owned at their last inspected commit (
5c99080), the same way #55 converted the others: moved into family roots, names and commands unchanged, origin and MIT notice kept.david-anti-sleep,david-deepapi,david-fable-safe-prompt,david-read-all-adrs(engineering) ·david-browser-harness(qa) ·david-cmux,david-codex-subagent,david-goal-loop,david-handoff(orchestration) ·david-deep-research(knowledge) ·david-effective-agent-skills,david-setup-help(platform)David has no import rule and no allowlisted root left, and
skills/imported/david/is gone. The provider row stays as a pick-only record. This also clears Monday's blocker: upstream flattened every path on 2026-11-09 (ad5bedd), so the lane would have failed on all 12.3. Provider audit
Audited at each repo's HEAD on 2026-11-13. Nothing changed except David.
~/.claude/skills/gstack/bin)Decisions for you, recorded in the policy doc:
4. Shared agent context
AGENTS.mdis the single instruction file. It'sconfig/CLAUDE.mdmoved withgit mv(history kept) plus two sections: shared agent context and upstream skills.CLAUDE.mdat the root is a symlink to it.config/CLAUDE.mdhad no root counterpart and no loader; only a doc test read it, and that test now readsAGENTS.md.docs/context/state.md: current state, open PRs, blockers, what's installed. Rewritten each time.docs/context/decisions.md: append-only, dated, one line per decision with its PR. Backfilled with fix(runtime): publish the Claude target as a skills-dir plugin #46 (skills-dir plugin runtime), refactor(design): drop Twombly from micro-branch; the local board is the only canvas #52 (Twombly dropped as a paid product), and this PR twice (David pick-only, admission rule).docs/context/handoff.md: author, date, done, next.AGENTS.mdrule: readstate.mdandhandoff.mdbefore starting; update both before ending a session that changed anything; no secrets or personal data. I added one exemption: scheduled automations that run from dedicated clean clones don't edit these files, because writing them would dirty a checkout that must stay clean. Their receipts are the record.tests/test_agent_context.pyfails ifCLAUDE.mdstops being a symlink toAGENTS.md, if any context file is missing, or if the files contain home paths, tokens or email addresses. These files ship withdocs/in the published runtime, and the publisher already rejects/Users/...paths.Watch out
ibelick. Whichever PR lands second has to give it"tracking": "weekly", orvalidate_upstream_metadatafails. It passes the rule.Validation
python3 -m unittest discover -s tests: 549 tests, all pass.🤖 Generated with Claude Code