nwave-issue-board
Use for any GitLab or GitHub board or tracker work in an nWave repo — one holding `.nwave/` or `docs/feature/` — including putting a feature on the tracker as…
Skill by pmvanev
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/pmvanev-nwave-issue-board
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/nwave-issue-board
What's inside
- Skill name
nwave-issue-board- Description
- Use for any GitLab or GitHub board or tracker work in an nWave repo — one holding `.nwave/` or `docs/feature/` — including putting a feature on the tracker as a single card, generating the slice roster and current-slice step table inside it, ordering those rows to match the roadmap, recording which wave a feature is in, or deciding what a story, feature, slice, and step each become in a forge, putting a multi-feature story on the board as one card. Read this before `phil:issue-board` whenever those directories exist. Covers only the mapping; `phil:issue-board` owns the forge mechanics and `phil:nwave-slice-status` owns the status.
- License
- MIT
- Instructions
- 438 lines in SKILL.md · view on GitHub
Agent Skills spec issues
- files: referenced but missing: references/states.md, references/ordering.md
Files (64)
- SKILL.md
- projection.md · references/
- story-cards.md · references/
- expected.md · self-test/01-publish-happy-path/
- manifest.json · self-test/01-publish-happy-path/
- expected.md · self-test/02-notes-column-survives/
- manifest.json · self-test/02-notes-column-survives/
- expected.md · self-test/03-unknown-published-as-unknown/
- manifest.json · self-test/03-unknown-published-as-unknown/
- expected.md · self-test/04-human-state-outranks-refresh/
- manifest.json · self-test/04-human-state-outranks-refresh/
- expected.md · self-test/05-no-markers-append/
- manifest.json · self-test/05-no-markers-append/
- expected.md · self-test/06-wave-swaps-not-accumulates/
- manifest.json · self-test/06-wave-swaps-not-accumulates/
- expected.md · self-test/07-no-rows-before-roadmap/
- manifest.json · self-test/07-no-rows-before-roadmap/
- expected.md · self-test/08-deferred-slice-is-a-row/
- manifest.json · self-test/08-deferred-slice-is-a-row/
- expected.md · self-test/09-generated-roster-no-subissues/
- manifest.json · self-test/09-generated-roster-no-subissues/
- expected.md · self-test/11-forge-never-writes-back/
- manifest.json · self-test/11-forge-never-writes-back/
- expected.md · self-test/12-owner-decides-status/
- manifest.json · self-test/12-owner-decides-status/
- expected.md · self-test/13-roster-order-follows-roadmap/
- manifest.json · self-test/13-roster-order-follows-roadmap/
- expected.md · self-test/14-guessed-order-says-so/
- manifest.json · self-test/14-guessed-order-says-so/
- expected.md · self-test/15-roster-not-checkboxes/
- manifest.json · self-test/15-roster-not-checkboxes/
- expected.md · self-test/16-routing-line-from-wave-label/
- manifest.json · self-test/16-routing-line-from-wave-label/
- expected.md · self-test/17-projection-bounded-to-current-slice/
- manifest.json · self-test/17-projection-bounded-to-current-slice/
- expected.md · self-test/18-unknown-state-writes-no-column/
- manifest.json · self-test/18-unknown-state-writes-no-column/
- expected.md · self-test/19-block-has-one-writer/
- manifest.json · self-test/19-block-has-one-writer/
- expected.md · self-test/20-story-block-four-features/
- manifest.json · self-test/20-story-block-four-features/
- expected.md · self-test/21-feature-tier-block-unchanged/
- manifest.json · self-test/21-feature-tier-block-unchanged/
- expected.md · self-test/22-indented-tree-refused/
- manifest.json · self-test/22-indented-tree-refused/
- expected.md · self-test/23-feature-state-without-glyph-fails/
- manifest.json · self-test/23-feature-state-without-glyph-fails/
- expected.md · self-test/24-contested-current-feature-not-resolved/
- manifest.json · self-test/24-contested-current-feature-not-resolved/
- expected.md · self-test/25-three-waves-one-label/
- manifest.json · self-test/25-three-waves-one-label/
- expected.md · self-test/26-backwards-step-is-correct/
- manifest.json · self-test/26-backwards-step-is-correct/
- expected.md · self-test/27-story-no-routing-row/
- manifest.json · self-test/27-story-no-routing-row/
- expected.md · self-test/28-two-in-flight-both-visible/
- manifest.json · self-test/28-two-in-flight-both-visible/
- expected.md · self-test/29-current-feature-not-first-in-flight/
- manifest.json · self-test/29-current-feature-not-first-in-flight/
- expected.md · self-test/30-composed-description-under-standard/
- …and 4 more
SKILL.md (first lines)
# nWave Features on a Forge Board
nWave keeps the truth on disk and renders it locally. This skill maps those artifacts onto forge
objects so other people can see them. It adds **only the mapping and the publishing discipline** —
two things it deliberately does not own:
- **REQUIRED BACKGROUND: `phil:issue-board`** — every forge mechanic. Naming the target with `-R`,
tier gating, label swaps versus board lists, Projects v2 being a separate API, sub-issue and
dependency-link commands, absolute URLs, two-pass seeding, reading back the end state. Do not
guess any of it from here; read it there.
- **REQUIRED BACKGROUND: `phil:nwave-slice-status`** — how to read a feature's artifacts and derive
a status. It owns the vocabulary, the precedence between sources, and the cases where the honest
answer is `unknown`.
**Ask `nwave-slice-status` for every status and publish what it returns; derive none here.** Two
derivations over the same files drift apart.
**This direction is one-way.** The forge is a projection of the artifacts. Nothing read from an
issue is ever written back into `docs/feature/`.
## The mapping
| nWave artifact | Forge object |
|---|---|
| Story — several features declaring one slug | **One issue**, where any feature declares membership. The card that moves. |
| Feature — `docs/feature/<id>/` | **One issue** where it declares no story; **a row in the story's feature roster** where it does. Carries the wave either way. |
| Slice — `slices/slice-NN-*.md`, or roadmap phase `NN` | A row in the feature's generated roster. Never its own issue. |
| Step — `roadmap.json` step `NN-MM` | A row in the feature's step table, **for the current slice only**. Never its own issue. |
**The feature is the card because the feature is what somebody owns.** A slice is never assignable to
a second developer, so slice cards crowd a shared board with items only the feature's owner can pick up,
while the board fails to say what a teammate needs: which features are in flight, and who has them.
**A board may already carry slice cards from the retired mapping; consolidating them is grooming, not
this skill.** Use `phil:groom-set`, under *Consolidate a decomposed feature*; a consolidation done wrong
closes real cards.
**A slice is never its own issue under this mapping, with no exception.** Two people working one feature
at once is `phil:issue-board`'s case under *Choosing what becomes an issue*, and a repo that needs it has
left this mapping. Every rule below — no rollup, no per-slice position, no sub-issue — assumes no slice
cards exist.
**On a story card, read `references/story-cards.md` whole before writing anything to it.** It holds
the story tier's wave rule, feature order, block layout and routing. Every rule here applies to a story
card too, except where that file names a story-tier exception.
Steps and slices stay rows because a 22-phase feature would otherwise mint hundreds of issues. The step
table is scoped to the current slice because every step of every slice in one description is
unreadable too.
`roadmap.json` supplies **ids and order** — of the steps inside a slice, and of the slices themselves.
A per-step `status` field in it is a status source `nwave-slice-status` already handles; take whatever it
returns.
## The roster is generated, and it is the same instrument as the step table
Slices are not issues, so **no sub-issue relationship is created for them and no forge rollup applies.**
Both forges' parent-completion mechanisms — GitHub's `subIssuesSummary`, GitLab's
`taskCompletionStatus` — count children this mapping no longer creates. `phil:issue-board` still owns
what they measure; nothing here reads them.
**Nothing computes the roster, so this skill generates it** — delimited and timestamped, the same
instrument as the step table. Both forges are identical on the roster: no epics, no second seeding pass.
**The tier still matters elsewhere.** Scoped labels, which the wave label uses, and real dependency
links are both Premium-gated, per `phil:issue-board`.
**Write the roster as plain rows with generated glyphs, never as `- [ ] ` checkboxes**, on either forge.
Both forges count checkboxes, so the temptation is real; but a checkbox is ticked by hand while work
completes on its own, and the card then shows the checkboxes' state rather than the work's.
**Per-row status is a glyph, generated from what `phil:nwave-slice-status` returns and never typed.** That
skill owns the vocabulary and defines **seven** values; this table is a rendering of them and nothing more:
| Its status | Glyph |
|---|---|
| `done` | `✓` |
| `current` | `▶` |
| `next` | `→` |
| `not started` | `·` |
| `blocked` | `!` |
| `deferred` | `⊘` |
| `unknown` | `?` |
**The feature roster renders a DIFFERENT vocabulary, and conflating them is a defect.** Slice rows carry
the seven step statuses above; feature rows carry the **six** values `phil:nwave-slice-status` folds —
there is no `next` at feature level, and `current` is `in progress`:
| Feature state | Glyph |
|---|---|
| `done` | `✓` |
| `in progress` | `▶` |
| `to do` | `·` |
| `blocked` | `!` |
| `deferred` | `⊘` |
| `unknown` | `?` |
**Two glyphs are reused, not one.** `▶` is `current` at slice level and `in progress` at feature level;
`·` is `not started` at slice level and `to do` at feature level. Both are safe only because the
vocabularies never share a table and every row prints its state word beside the glyph.
**Every value the owner can return has a glyph; a value with none fails loudly.** Degrading it to `·`
publishes unknown as not started, for a whole feature. A value added to the owner's vocabulary needs a
glyph added here. Invent no glyph for a value the owner does not define, and never omit a row to avoid
rendering its value.
**Every roster row carries a two-line description of what that slice does** — not just its name. A
reader inheriting the feature needs to know what the slice achieves without opening its brief; with
those descriptions, a reader named a card's wave and position inside thirty seconds (2026-08-14).
**Summarise what you link.** Give each linked artifact — the delta, the slice briefs, the journey — a
clause saying what it holds. Six bare URLs consume the whole thirty-second read.
### Compose the block's own sentences against the clarity standard
**Compose against `${CLAUDE_PLUGIN_ROOT}/rules/writing.md` as you write; run no editor pass afterwards.**
`phil:eos` applies the same principles when a human invokes it, and is not a stage here: a pass over the
block is a second writer.From pmvanev/phil-claude-plugin, MIT.
More from pmvanev/phil-claude-plugin
- 0.570score
issue-board
pmvanev
Use when driving a GitLab or GitHub issue tracker or board from the command line with `glab` or `gh` — moving a card between board columns, reordering a…
SkillAFreshness: AClaude Code +9 - 0.570score
board-snapshot
pmvanev
Use when asked where an issue board stands right now rather than what is wrong with it — "summarise my board", "what's on the board", "where does the board…
SkillAFreshness: AClaude Code +9 - 0.570score
board-setup
pmvanev
Use when recording a repo's issue-board constants in its `CLAUDE.md` — the forge and repo, the project and Status field ids, every option id, the enabled…
SkillAFreshness: AClaude Code +9 - 0.570score
nwave-slice-status
pmvanev
Use when the user asks where an nWave feature stands — "how many steps are in this slice", "which ones are done", "which one are we on", "what's next", "is…
SkillAFreshness: AClaude Code +9 - 0.566score
nwave-wave-summary
pmvanev
Use when asked what finished work decided, rather than where it stands or what you were doing — "what did DISCUSS decide", "what did that stage settle"…
SkillAFreshness: AClaude Code +9 - 0.566score
groom-issues
pmvanev
Skill bundle for the phil:groom-issues, phil:groom-fix, phil:groom-set and phil:groom-ask commands — reads a whole issue board in one list call per forge —…
SkillAFreshness: AClaude Code +9 - 0.565score
red-team-prose
pmvanev
Skill bundle for phil:red-team-prose command — reviews a doc, README, or release note for AI-generated tells, Elements of Style clarity, and fitness for its…
SkillAFreshness: AClaude Code +9 - 0.565score
edd
pmvanev
Skill bundle for phil:edd command — Expectation-Driven Development front-door.
SkillAFreshness: AClaude Code +9 - 0.565score
adversarial-review
pmvanev
Skill bundle for phil:adversarial-review command — a general-purpose independent adversarial critic.
SkillAFreshness: AClaude Code +9 - 0.561score
ai-eos
pmvanev
Skill bundle for phil:ai-eos command — detects the stylistic tells that mark technical prose as AI-generated, with a density verdict and ranked findings.
SkillAFreshness: AClaude Code +9 - 0.561score
redesign-tests
pmvanev
Skill bundle for phil:redesign-tests command — human-approved, behaviour-changing test redesign loop with a coverage-equivalence claim per rewrite
SkillAFreshness: AClaude Code +9 - 0.561score
refactor-loop
pmvanev
Skill bundle for phil:refactor-loop command — gated closed-loop refactoring with a separate proposer and correctness critic, hard test gates, and a DAG ledger
SkillAFreshness: AClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 10
- Last commit (this folder)
- Oct 14, 2026 (14 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/pmvanev/phil-claude-plugin
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from pmvanev
- 0.570score
nwave-slice-status
pmvanev
Use when the user asks where an nWave feature stands — "how many steps are in this slice", "which ones are done", "which one are we on", "what's next", "is…
SkillAFreshness: AClaude Code +9 - 0.570score
board-snapshot
pmvanev
Use when asked where an issue board stands right now rather than what is wrong with it — "summarise my board", "what's on the board", "where does the board…
SkillAFreshness: AClaude Code +9 - 0.570score
board-setup
pmvanev
Use when recording a repo's issue-board constants in its `CLAUDE.md` — the forge and repo, the project and Status field ids, every option id, the enabled…
SkillAFreshness: AClaude Code +9 - 0.570score
issue-board
pmvanev
Use when driving a GitLab or GitHub issue tracker or board from the command line with `glab` or `gh` — moving a card between board columns, reordering a…
SkillAFreshness: AClaude Code +9 - 0.566score
groom-issues
pmvanev
Skill bundle for the phil:groom-issues, phil:groom-fix, phil:groom-set and phil:groom-ask commands — reads a whole issue board in one list call per forge —…
SkillAFreshness: AClaude Code +9 - 0.566score
nwave-wave-summary
pmvanev
Use when asked what finished work decided, rather than where it stands or what you were doing — "what did DISCUSS decide", "what did that stage settle"…
SkillAFreshness: AClaude Code +9
Cite this page
nwave-issue-board skill. Agent Mart. https://agentmart.dev/skills/pmvanev-nwave-issue-board (last updated 2026-10-24)