Skip to content

feat(skills): add setup-chiptus-env (needs discussion) - #499

Draft
chiptus wants to merge 25 commits into
mainfrom
feat/setup-chiptus-env
Draft

chiptus wants to merge 25 commits into
mainfrom
feat/setup-chiptus-env

Conversation

@chiptus

@chiptus chiptus commented Sep 13, 2026

Copy link
Copy Markdown
Owner

Split off from #498, which had bundled this together with the (now-settled) repo docs changes. This one is not ready to merge — see HANDOFF-setup-chiptus-env.md for the open design questions (Tracker specifics table generality, whether the external-docs relocation feature is premature, the unverified npx skills install step, etc.) that need a discussion pass before finishing this skill.

Opened as a draft on purpose.

Verification

  • Pure skill-content docs, no app runtime behavior to exercise.
  • Not applicable until the open questions in the handoff doc are resolved.

🤖 Generated with Claude Code

https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd


Generated by Claude Code

Documents the five canonical triage-role labels as a mutually-exclusive
Linear label group, separates lifecycle markers (agent:wip/agent:pr/epic)
from that group, and consolidates branch-naming + commit/PR title format
into docs/git-conventions.md, linked from CLAUDE.md and autonomic-issues.md.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
Reorders git-conventions.md so the shared <type> is defined once, before
its first use; front-loads the CLAUDE.md pointer's trigger word; and adds
the missing label-group setup step to the autonomic pipeline's setup
checklist (single source of truth, referenced from triage-labels.md).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
New user-invoked skill that runs setup-matt-pocock-skills to pick this
repo's issue tracker (and its triage labels/domain docs), then reuses
that same tracker choice to scaffold docs/agents/autonomic-issues.md
from a GitHub- or Linear-shaped template — never asking the tracker
question twice.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
Replaces the two lifecycle labels with a single `agent` label whose
stage is read off the issue's native Linear status (In Progress while
claimed, In Review once the PR is open) instead of a second label.
Retired agent:wip/agent:pr in Linear (team UPL) and migrated the one
live issue carrying agent:pr (UPL-7, open PR #463) to
the new scheme. Also updates the setup-chiptus-env Linear template to
match; the GitHub template is unchanged since GitHub issues have no
native per-issue status to borrow.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
…arity

Removes a leftover "PR-side label" mention in autonomic-issues.md now
that GitHub PRs carry no mirrored label. Adds a note to the
setup-chiptus-env Linear template (not the repo docs, which are
tracker-specific) explaining that GitHub's native PR state
(draft/ready/merged/closed) already parities Linear's issue status, so
future setups shouldn't invent a matching status label on the PR side.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
The PR-cap paragraph claimed counting stayed correct "even if the label
is forgotten" — true under the old agent:pr-only count, false now that
the count requires both --label agent and --status "In Review" together
(a forgotten label does drop the issue from the count; this is
intentional, since it's what lets a maintainer's own manually-opened PR
skip the cap). Also corrects issue-tracker.md's `issues update --state`
to the actual verified CLI flag, `--status`, which is what the new
claim/PR-review steps already used correctly.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
setup-chiptus-env now checks for setup-matt-pocock-skills before
invoking it, installing the mattpocock/skills set via `npx skills`
when missing, instead of assuming it's already there. Also adds a step
to redirect domain docs (CONTEXT.md, ADRs) to an external folder for
repos that can't keep them in-repo (e.g. Portainer, where architecture/
customer docs must stay out of the public repo) — rewriting
docs/agents/domain.md's pointer rather than touching
setup-matt-pocock-skills' own templates.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
… docs

Generalizes the external-docs step from just CONTEXT.md/ADRs to the
entire docs/agents/ folder (issue tracker, triage labels, autonomic
pipeline, domain consumer rules), matching the Portainer pattern: the
external root mirrors the in-repo layout exactly, so the docs' own
mutual cross-references need no rewriting — only CLAUDE.md/AGENTS.md's
entry pointers and the Routine prompts need to resolve a .git/-local
pointer file to the external root. Also flags the real gap this
creates for cloud Routine firings, which work off a fresh clone with
no access to this machine's .git/ contents.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
…only

An env var (e.g. AGENTS_DOCS_REPO) holding a separate docs repo's git
URL is now the default pointer mechanism, since it's settable in a
Routine's own environment_variables and so actually solves the cloud-
portability gap the .git/-local file couldn't. The .git/ file stays as
a lighter option for a solo local setup with no Routines involved, but
the skill now asks the user to choose explicitly between the two
rather than defaulting silently, since the choice decides whether the
autonomic pipeline can read the docs at all.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
…nsumers

CLAUDE.md's pointers stay plain ("See docs/agents/X.md", no conditional
phrasing) since it's always read locally regardless of where docs live
and per-pointer resolution text would duplicate the same logic at every
call site. Instead, step 3 now has the skill grep for whichever
mattpocock skills actually read CONTEXT.md/docs/adr/docs/agents
directly (domain-modeling, triage, code-review, etc.) and prepend the
external-docs check to each of those, plus the two Routine prompts —
the actual code paths that need to know, once, in one place per file.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
autonomic-issues-github.md and autonomic-issues-linear.md were ~90%
identical (triage bar, quality gates, guardrails, notifications, both
routine prompts verbatim) with only the label/status mechanism, CLI
commands, and a few paragraphs differing per tracker — real
duplication of a single source of truth. Merged into one
autonomic-issues.md with the differing paragraphs wrapped in
<!-- tracker:github --> / <!-- tracker:linear --> marker pairs,
positioned right next to their counterpart; filling the template is
now "delete the blocks for the tracker you didn't pick."

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
… fragments

The interleaved-marker design didn't scale: every section grew another
block per tracker, so a third tracker would mean editing every section
of an already-written file. Replaces it with a skeleton
(autonomic-issues.md, 100% tracker-invariant prose) plus small
per-tracker fragment files (tracker-github.md, tracker-linear.md) that
each supply the same five named slots (INTRO, SHARED_STATE,
INTAKE_QUERY, FIX_FIRING_STEPS, SETUP_ITEMS). Adding a tracker is now
"write one new fragment file against these five slots" — the skeleton
never changes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
The Setup checklist's items 3-4 lived in the skeleton after the
fragment-supplied items 1-2, relying on markdown list continuation
across a template substitution boundary — fragile in general, and
prettier's markdown reflow already collapsed it into one broken
paragraph on the prior commit. SETUP_ITEMS now owns the whole 1-4 list
in each fragment (2 short duplicated lines) instead.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
…l table

Both prior designs (interleaved markers, then skeleton+fragments) kept
duplicating full paragraphs per tracker when only a handful of facts
actually differ: how "claimed"/"in review" are represented, how
priority works, how a PR declares its issue link. Rewrites the whole
doc in tracker-agnostic language (triage rubric, quality gates,
guardrails, bail/fail handling, notifications, routine prompts never
mention a tracker) referring back to one small "Tracker specifics"
table for the load-bearing facts only — not a CLI reference, which the
agent already gets from the tracker's own usage/--help. Adding a
tracker is now one new table column, not a new file.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
GitHub and Linear are columns in the table, not rows; a new tracker
adds a column. Matches the wording already used in SKILL.md.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
Missed applying the earlier agent-label-plus-native-state decision to
GitHub's own column: it still described the old agent:wip -> agent:pr
swap. A GitHub PR's own draft/ready-for-review/merged state already
tells you claimed vs in-review once a PR exists, same reasoning as
Linear's native status — so GitHub gets one `agent` label too, applied
at claim and never swapped. Updated the two callers that assumed a
literal marker-move action (Fix firing step 6, the manual-PR
coexistence note) to describe the inferred state instead.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
The "don't add a matching status label on the GitHub PR side" note was
sitting in the Linear cell even though its subject is GitHub's own PR
state; moved to the GitHub cell (referencing the Linear cell for
contrast) instead of being explained from the other tracker's row.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
…s missing

The skill's fetch/resolve/reply steps hard-depended on the gh CLI,
which isn't installed in this remote session (GitHub access here goes
through mcp__github__* tools instead) — confirmed by the failed
fetch-review-threads.sh run. Adds an explicit gh-availability check at
the top of Phase 1 and an MCP-based path alongside each gh-dependent
step (fetch via pull_request_read, resolve via resolve_review_thread,
reply via add_reply_to_pull_request_comment / add_issue_comment) that
reconstructs the same data shape, so the rest of the skill is
unaffected by which path ran.

Note: this file is npx skills-managed (mattpocock/skills) — a future
bare reinstall would overwrite this fix back out.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
Linear's mutual-exclusivity feature kept the five canonical triage-role
labels enforced structurally, but nothing said what covers that on
GitHub, which has no equivalent group feature. Adds a table row and a
setup-checklist clause: GitHub relies on the triage skill's own
discipline (remove any other triage-role label before applying a new
one) instead of the tracker enforcing it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
…r's grouped look

Confirmed via linearis that Linear's own label names stay plain
(ready-for-agent, not triage/ready-for-agent) — the grouped display
comes from each label's parent pointing at the triage group label,
which Linear's UI renders hierarchically. GitHub has nothing
equivalent, so the closest substitute is naming the five labels with
a literal triage/ prefix. Documented in the Tracker specifics table
(with the Linear cell clarifying the contrast) and suggested as a
default during setup-matt-pocock-skills' own label-naming question.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
- Disclosed step 3's external-docs mechanics (pointer options, layout,
  the grep-and-patch recipe for consumer skills) into a new
  external-docs.md, reached only on the "external" branch most repos
  never take, instead of sitting inline in the main procedural flow
  every reader sees.
- Trimmed a duplicated explanation in the Tracker specifics table: the
  GitHub "Lifecycle labels" row restated the draft/ready/merged
  mapping the "Claimed / in review" row above it already gives: now
  points back at it instead.
- Fixed a stale "the templates generate" (plural, left over from the
  since-collapsed multi-file design).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
This session iterated the autonomic-issues.md template through four
different shapes reactively; worth a slower discussion session before
more incremental edits. Captures the open questions (tracker-table
generality, external-docs relocation being unvalidated, npx skills
unverified, the triage/ prefix suggestion being unvalidated) rather
than restating the diffs, which live in this branch's commit history.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
This branch keeps only the setup-chiptus-env skill work (still needing
a discussion pass, per HANDOFF-setup-chiptus-env.md). The settled
repo docs (triage-labels.md, autonomic-issues.md, issue-tracker.md,
git-conventions.md, CLAUDE.md) and the unrelated pr-review-fixer fix
stay on docs/triage-labels-git-conventions / PR #498 instead.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
@vercel

vercel Bot commented Sep 13, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
upline Ready Ready Preview Sep 15, 2026 8:56am UTC

chiptus pushed a commit that referenced this pull request Sep 13, 2026
Split out to #499, since it still needs a discussion
pass before it's done (see that PR's handoff doc) and shouldn't hold
up these settled repo-docs changes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HFNqcr5d2EN6T6TkTc8WBd
@github-actions

github-actions Bot commented Sep 13, 2026

Copy link
Copy Markdown

Playwright test results

passed  65 passed

Details

stats  65 tests across 21 suites
duration  1 minute, 29 seconds
commit  f9dc085

…rences

Per MYP-284: replace the single shared "Tracker specifics" table in
autonomic-issues.md with per-tracker references/github.md and
references/linear.md (Anthropic's domain-specific organization pattern),
hardcode the verified npx skills install command, drop the
.git/agents-docs-path pointer mechanism (AGENTS_DOCS_REPO only), and
switch the GitHub label convention from `:` to `/`.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GZEqXTAe8gSu3mHwc7qupv
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants