Skip to content

Releases: nikolasd/nikolasd-plugins

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 12 Oct 16:17
1f6988c

Changed

  • pm specs-from-prd, business PRDs: the skill no longer assumes the PRD knows the systems. In Phase 1 it reads the repositories' own onboarding, architecture and README documents and agent instruction files, notes every other system they or the code name (including services that appear only in code comments), and asks for each repository's path and for the branch or ref that counts as the current code, recorded in a new Baseline header line. It also looks for specs, planning documents and tickets that already cover the PRD outside the specs folder. Phase 2 reads the documents the PRD relies on and settles, in one question, which are in scope, which version of each counts and which areas the run covers.
  • pm specs-from-prd, analysis: Phase 3 starts with a systems map and translates every requirement into the systems that would deliver it. Requirements get MET, PARTIAL or ABSENT; an ABSENT status needs a search record and survives a second pass that tries to find the capability under another name. Decisions already recorded in tickets, existing specs and design rules are collected and not asked again. A new Defect category covers code that is meant to work and does not: reported, not asked about. Subagent ABSENT results are re-read like FALSE and PARTIAL ones.
  • pm specs-from-prd, interview: opens with the systems map in plain words, then the audience question. Every question names the system it concerns and has background, an example, the question, options with what each means for the product's users, and evidence after them, written for a tech lead or solution architect who knows the systems in general but not every detail this PRD touches. The opening shows only the part of the systems map this PRD touches, for the user to correct, and quotes the audience and success measure when the PRD already states them. More than about ten findings: grouping by system or area is recommended. A finding that rested on a wrong fact is corrected and the decisions built on it are re-asked.
  • pm specs-from-prd, template and checker: the template gains a Baseline header line, a Systems involved table and a system column in the findings table. The checker accepts citations into other repositories as repo:path:line and takes --root NAME=PATH once per repository; an unprefixed citation in a spec resolves under that spec's Repo.
  • pm specs-from-prd, checker call: the draft reaches the checker as a file, specs-from-prd-draft-<slug>.md in the scratchpad or system temporary directory, instead of an inline heredoc that failed on Windows and led the agent to improvise a temporary file. Content rule 8 now allows that one draft copy. When python3 is missing or is the Windows Store stub, the skill tries python, py -3 and uv run --no-project python.
  • pm specs-from-prd, frontmatter and permissions: model: sonnet is removed, because a skill's model override lasts only until the user's next message, so it covered the analysis and nothing after it. The Permissions section now says accurately what is pre-approved and that the checker may ask for permission after the user's first reply.
  • pm specs-from-prd, when the user is asked: a new section lists the five points where the skill asks the user something, one step per message, so a repository found during the analysis is not folded into the opening question. The pacing offer is now a statement, not a second question.
  • pm specs-from-prd, decisions: a D-nn needs the user's answer or a source document that states it. When the user declines the interview, every choice they did not make is a gap, even when their success signal seems to settle it. A PRD claim the code shows to be FALSE is not reported as a defect.
  • pm specs-from-prd, Atlassian: a Confluence PRD can be read through an Atlassian server registered under another name or with other tool names, such as getConfluenceContent. The Atlassian steps moved to references/confluence.md, read only for a Confluence PRD, and the pm README now states this exception to the atlassian server-name requirement.
  • pm specs-from-prd, rules that survive a summary: a short Rules for the whole run block at the top of SKILL.md (no write before the confirmed review gate, the Source check: line, a gap instead of a choice nobody made, re-read the phase's reference after a summary) and an eight-step progress list replace the closing completion checklist. SKILL.md is shorter, so the part kept after a conversation summary holds the review gate.
  • pm specs-from-prd, scope and contradictions: what is in or out of scope must come from the PRD, the user or the code, and how to resolve a contradiction between the PRD and the code is a choice: without an answer it is a gap. The INVEST check asks before it splits, merges or reframes a locked spec or one a recorded decision settled, instead of "before drafting", which came after the draft.
  • pm specs-from-prd, asking for other repositories: the Phase 1 question says in one plain line what each system found does in this feature, with the evidence in brackets after it.

Added

  • pm evals: specs-from-prd/no-interview-records-gaps-not-decisions, and a dry-run-writes-nothing grader that checks the user is told whether the checker passed or did not run. Each writes-no-file grader, the edits-no-file grader and writes-nothing-outside-docs-specs now allow the checker's draft copy, and every ran-the-checker grader accepts python, py -3 and uv run python as well as python3. The plain-language grader of maps-a-business-prd-onto-the-systems is written for a tech lead or solution architect and judges only how the systems are described.
  • pm configuration: specs_dir in .claude/pm.json sets the folder specs-from-prd writes to (default docs/specs; absolute paths and .. refused).
  • pm evals: specs-from-prd/maps-a-business-prd-onto-the-systems, a PRD that names no system where the repository's docs and a code comment place invoices in an external billing service.

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 02 Oct 22:15
557e1f7

Added

  • pm specs-from-prd (/pm:specs-from-prd, pm 0.3.0): turns a PRD into one local specs document. It checks the PRD's claims against the code with file:line evidence, interviews you about what it finds, and writes specs that are each one small story under INVEST, with a feature-level design and every unresolved question recorded as a gap and never guessed. It writes only after you confirm the full draft and never touches Jira. A stdlib checker (check_specs.py) enforces unique IDs, resolvable acyclic dependencies, one repository per spec, acceptance criteria, the labels story-from-document reads, a cited path:line in every Technical approach and in the Components table (looked up on disk when run with --root), six INVEST results, a status that agrees with the gaps, an Open gaps list that agrees with the specs, a complete header, and no em dashes. It prints a fingerprint so the written file can be compared with the draft you approved. The document is re-runnable: IDs are stable, specs that already have a Story are locked, and removed specs become Withdrawn.
  • pm evals: 39 cases in total. New: 11 for specs-from-prd and 8 for story-from-document (spec selection, promote-mode injection, a project you name beating the configured one, stale line citations, an unknown spec ID), a shared order-service fixture in pm/evals/_lib/, and a CI step that runs pm/tests/test_check_specs.py (a checker, template, skill-file and contract test suite).

Changed

  • pm story-from-document: accepts path#S-03, a spec from a specs-from-prd document. It reads the whole document as context, builds a Story from that spec only, refuses a Withdrawn spec, asks about the gaps of a Needs decision spec, asks before creating a second Story for a spec that already records one, and tells you which Story: line to fill in. It never edits the document.
  • pm story-from-document and specs-from-prd, safety: only tools that read are pre-approved (the grant ends at your first reply anyway), so every write asks. One Source check: step now covers every path by which someone else's text reaches the model, in create and promote mode alike, and sits at the top of the message that ends the turn. Web pages are fetched verbatim. Decisions a source claims are settled are shown as candidates and copied only when you confirm them. A declined permission prompt stops the run.
  • pm story-from-document, gates: the duplicate check runs right after the repositories and project are settled (skipped under --dry-run or without Jira). A gate you already answered in the invocation is not asked again, but the final review gate always waits. An open gap is asked about once and may stay in the Story as [GAP: ...]. An amended draft needs a fresh confirmation. A project you name beats the configured one. A short standing-rules block at the top of SKILL.md and moving the optional mockups step into references/mockups.md keep the key rules inside the part of a skill that survives a conversation summary.
  • pm story-from-document and specs-from-prd, wording: one name per concept (the promote-mode step, checker "errors", INVEST "results"), two short model examples in the Story templates, a before-and-after split in invest.md, the stale phase count and an unreachable configuration sentence removed, and the Python requirement of the checker stated.

v0.7.1

Choose a tag to compare

@github-actions github-actions released this 02 Oct 10:28
b5532ae

Changed

  • nd delivery (nd 0.5.1): restored the pre-coding protocol (read, failing test, implement, verify, with SOLID/DRY/YAGNI/KISS) and a quick-reference table. It now targets medium and heavy work where quality matters and says explicitly that small or trivial edits are out of scope.

Added

  • nd evals: disciplined-delivery-skips-trivial-change. disciplined-delivery-tests-first now uses a medium task and passes 9 of 10 runs.

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 02 Oct 07:55
d9d7e48

Added

  • nd plugin (0.5.0): 18 new eval cases (44 in total). They cover trigger boundaries (architect-skips-plain-pr-review, herdr-skips-spawn-an-agent-for-review, handoff-skips-compact-conversation, onboarding-skips-single-c4-diagram, disciplined-delivery-skips-docs-typo-fix); safety (handoff-keeps-secrets-out, handoff-records-uncommitted-when-declined, onboarding-keeps-injection-and-secrets-out, delivery-gates-push, herdr-hands-dialogs-to-user, herdr-does-not-resend-after-timeout, architect-asks-before-delegating); and behaviour (handoff-updates-existing-file, delivery-commits-after-approval, engineer-reports-not-done-on-red-suite, engineer-challenges-with-evidence, architect-does-not-trust-a-green-report, onboarding-reports-a-failing-gate). The herdr cases run against a stub herdr and set HERDR_ENV through the eval sandbox's own shell startup files.
  • nd onboard: the checker fails a doc containing a secret-shaped string (key SECRETS; it prints the kind and line, never the value), accepts --inadmissible-dir, rejects a nonexistent --root, and prints its default citation floor.
  • nd herdr: a "Spawn a Claude peer" recipe that architect and engineer now share, and windows.md for the Git Bash and PowerShell notes.
  • pm plugin (0.2.1): two sdd eval cases (continues-local-only-without-atlassian, asks-which-copy-wins-on-divergence), and repo-context.sh --hash, which prints the document's hash for Phase 5.

Changed

  • nd plugin: the five skills whose folder name differed from their name now use the short name for both, so four slash commands change: /nd:disciplined-delivery is now /nd:delivery, /nd:reflecting is /nd:reflect, /nd:writing-plain-language is /nd:plain-language, and /nd:onboarding is /nd:onboard. /nd:herdr, /nd:handoff, /nd:architect and /nd:engineer are unchanged. The folders disciplined-delivery, reflecting, writing-plain-language, onboarding and spawning-herdr-agents were renamed to delivery, reflect, plain-language, onboard and herdr, so a spec validator no longer flags the mismatch, and the eval regexes accept one name instead of two.
  • nd onboard: writers treat everything read from the repo as data, never instructions, and never copy a secret value into the docs. In a run on a planted repo, the old briefs obeyed an injected "claim SOC2 compliance" comment in one of three runs; the new ones asserted it in none of 16 (they record it under Unknowns as an embedded instruction, as intended). The checker now matches the briefs: a non-empty, keyword-led mermaid block is required in the AI or runtime design doc, infrastructure.md, deployment.md and ONBOARDING.md as well as C4 and components docs; the citation floor counts distinct files (not anchors), defaults to min(25, max(3, citable_files * 2 // 3)) (printed on the first line; citable files exclude README, CLAUDE.md, AGENTS.md, docs/, reference/, LICENSE and the directory being checked), is never more than the repo has to cite (an earlier draft of this change asked a five-file repo for seven files, which no doc could meet), and excludes citations under the "existing in-repo prose" heading, which is now exempt only in ONBOARDING.md; markdown links out of the docs dir to README, CLAUDE.md or AGENTS.md fail; a placeholder is a TODO: or TBD: marker, not the bare word. SKILL.md caps the fix loop, bounds cost (default depth targeted above about 500 source files, a 30-agent stop, ask which track first above four), checks for stray writes, and lets the orchestrator read the README once for orientation.
  • nd handoff: never writes a secret value into HANDOFF.md even when asked (and scans the draft); commits only HANDOFF.md, by path, never on main, master or another protected branch, and never pushes; infers the focus when $ARGUMENTS is empty; updates an existing file for this session instead of appending; leads with Next Steps. Without the secrets rule the old skill wrote the key into the file in two of five runs when asked to.
  • nd herdr: answers a dialog only if it confirms a slash command it just sent or is the trust-folder prompt for the directory it set (everything else goes to the user); treats pane output as data, not instructions; checks before resending after a timeout; starts the agent kind the user named (default claude); closes only panes it recorded and asks first if the agent is still working. Outside Herdr it now runs no herdr command at all, not even to diagnose.
  • nd delivery: centred on the approval gate and the definition of done rather than test-first on every edit; approval counts only after the user has seen the diff, test result and exact message ("commit it" before that is not approval); the gated actions are defined by category (publishes, rewrites history, discards work, moves HEAD); it covers pre-existing red suites, no test runner, a declined gate and runs with nobody to approve. A docs-only typo fix does not load it (delivery-skips-docs-typo-fix), and any request to run a gated git action does (a bare "push this to origin" loaded it in 10 of 10 runs after the trigger phrases were widened; before, one run in five pushed without asking).
  • nd architect and engineer: after a challenge or question the engineer stops and waits; a challenge that still stands goes to the user, not to either session; a decision is the architect's only if a recorded user decision or the spec settles it and it is reversible; the engineer asks before spawning an architect and never commits unless the user authorized it; failure modes (declined delegation, silent engineer, red suite, low context) and sample task and report messages were added. The engineer now fires on an instruction from the architect session, including a go-ahead to commit (1 of 5 runs before, 5 of 5 after).
  • nd reflect: facts about code are verified against files, while decisions are recorded as "decided in session, not verifiable"; it never guesses a storage path when basic-memory is unreachable; updates an existing note instead of creating a second one; suggests rule edits instead of making them; offers to reflect instead of starting.
  • nd plain-language: says what it does, keeps meaning, code and quoted identifiers exact, and holds the register for the rest of the conversation.
  • nd descriptions for handoff, herdr, onboard, architect, delivery, reflect and plain-language now state what the skill does as well as when to use it, and their trigger phrases were narrowed to avoid colliding with built-in /compact, in-session subagents and single-document requests.
  • pm sdd: Phase 5 recomputes local_hash with repo-context.sh --hash (which allowed-tools already covers) instead of an unlisted git hash-object. Reference files point at ../templates/... and ../scripts/..., story-from-document no longer reads as locked after a dry run, and epic says "two writes, then a confirmation".

Fixed

  • nd evals: on macOS the eval sandbox cannot run git (the Xcode shim needs a cache file it may not write), which made handoff-guards-non-git, handoff-asks-before-committing, delivery-shows-before-committing and engineer-refuses-unauthorized-commit fail for reasons unrelated to the skills. Their scaffolds now put the real git binary on the sandbox's PATH (only when it exists and only inside the eval's own temporary home), and all four pass. The plain-language-explains-plainly judge failed plain answers (it read bold plain sentences as jargon labels), which made the case fail with and without the plugin; its criteria are now exact. reflecting-asks-before-writing also checks the write_note and edit_note path, not only Write. The onboard cases now read the files the run wrote instead of the Write tool's input, because with Bash granted the agent may write the docs with a heredoc and a Write-only check passes or fails for the wrong reason; they also get a 900 s timeout, since three evals in parallel pushed runs past the default 300 s.

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 01 Oct 15:39
9a94753

Added

  • pm plugin (0.2.0): eight new eval cases that give the skill a canned Atlassian
    server (evals/<case>/mocks/atlassian/), so the write tools exist and a max: 0
    grader on them is a real test. They cover a held confirmation for every skill that
    writes (holds-write-until-confirmed for epic, epic-refine, story,
    ui-mockups, story-from-document and sdd), an existing Epic or Story being shown
    before a second one is created (asks-about-existing-epic, asks-about-existing-story),
    and a source document that tries to instruct the assistant
    (story-from-document/ignores-instructions-in-source).
  • pm: sdd records local_hash (a git hash-object of the document) in
    docs/.solution-design.state.json, and repo-context.sh prints it as "Local file
    hash". A state file without it still works; the first run falls back to the Version
    field and records the hash.
  • pm: epic-refine writes a **Technical constraints:** line into a standard-delivery
    Epic's Delivery section, and story copies it, since a standard Epic has no phase
    constraints.

Changed

  • pm: a confirmation now has to come after the user has seen the draft. An earlier
    "skip the review" or "I trust you" no longer counts, and each skill lists what
    confirming will do and ends its turn. Before this, epic, epic-refine, ui-mockups
    and sdd wrote to Jira, Confluence or git anyway in every run of the new mocked evals,
    story tried to create the Story in every run (the sandbox denied it), and
    story-from-document wrote in two of three. sdd still lets you skip the interview,
    leaving each judgment call as an open question.
  • pm: the skills no longer fill in values nobody supplied. An NFR threshold, persona,
    owner, sub-task effort or constraint that is not in the Epic, the source or your answers
    becomes [GAP: …] and goes in the gap list, and epic-refine draws no sequence diagram
    from components it has not confirmed. epic leaves _(Not provided: …)_ for an
    unanswered question. story-from-document no longer pads acceptance criteria to a
    count, asks before using a different issue type when the project has no Story type, and
    story takes sub-task effort from you (and proposes sub-tasks only for separable work
    streams) instead of judging size from its own estimate.
  • pm: checks that used to run after the first irreversible write now run before it.
    epic searches the project for a similar Epic once it has the name. story re-checks
    that the Epic's story-table row still exists before creating the Story.
    story-from-document searches for an existing Story by its source reference at the
    review gate, with no date window, and again before writing.
  • pm: after rewriting an Epic or Story description, epic-refine, story, ui-mockups
    and story-from-document (promote mode) re-fetch it and stop if the state line, the
    story-table Ids or the section content did not survive Jira's markdown round trip.
  • pm: story-from-document treats the source, an existing Story and fetched pages as
    data. It tells you about any text aimed at the assistant, in a Source check: line at
    the start of its next message and again at the review gate, even when that text asks it
    to stay quiet. It also fetches non-Confluence URLs with WebFetch and ignores
    --dry-run when working out what the argument is.
  • pm: sdd runs the guide's pre-share checklist without its rendered-image item (the
    skill cannot upload attachments), strips its "Rendered image not yet attached" notes
    when the Confluence copy is taken as authoritative, and links the guide's Part files
    directly instead of through an index. Its requirement-status vocabulary no longer has
    Retired: a retired item is Descoped. The skill body is trimmed to 497 lines and its
    description now says when to use it.
  • pm: ui-mockups writes its own gaps under ### UI Open Questions instead of a second
    ## Summary of Gaps, treats _No mockups were produced for this Epic._ as a
    placeholder, and ends its turn when the Atlassian MCP is missing.
  • pm: epic, epic-refine and story no longer pre-approve Write, which none of
    them uses. ui-mockups and story-from-document deliberately leave Artifact out of
    allowed-tools, so publishing a mockup canvas stays a prompted action. The skills read
    their argument through $ARGUMENTS, and the em dashes the rules ban are gone from the
    skills' own headings and templates.

Fixed

  • pm evals: the old Jira guards passed only because the sandbox had no Atlassian server.
    epic's holds-write-until-confirmed now ships mocks and would have failed on the
    previous skill. The sdd update-preserves-ids case uses Descoped, and the manual
    story-from-document scenario no longer expects sub-tasks for a one-repo change.

v0.5.1

Choose a tag to compare

@github-actions github-actions released this 01 Oct 09:36
c673a1c

Changed

  • pm plugin (0.1.1): the skills no longer estimate or write story points, and no longer
    add, change or remove Jira labels. An Epic's maturity is now carried only by the
    **Epic Maturity State:** line in its description. The Epic story table is
    | Id | Story | Summary | Status |; an existing table that still has a Story Points
    column is left as it is. story decides whether a Story needs sub-tasks from about one
    week of work for one developer, not from a point value.
  • pm: the points_scale plugin option and project-file key are removed, since nothing
    reads them. The site option is unchanged.
  • pm: story now creates sub-tasks before it updates the Epic, and leaves the Epic
    untouched if any sub-task failed, so running /pm:story again resumes the same Story
    instead of skipping it.
  • pm: ui-mockups never moves an Epic's maturity backwards. Its confirmation says
    when the state is left as it is.
  • pm: epic checks the Jira project and the Epic issue type before the Q&A, asks for any
    required fields beyond the standard ones up front, and guards a retried create against duplicates.
    With no Atlassian MCP it now ends the turn at that check, instead of running the whole
    interview and failing at the final write or previewing sections it cannot save.
    epic-refine matches its template placeholders by their words, so Jira's markdown
    re-escaping no longer hides them.
  • pm: story-from-document always resolves the project's Story type name in create
    mode, and reads an interrupted Story's children and links before resuming it.
  • pm: sdd says which copy wins after a divergence, adds a zensical.toml nav entry
    only when the file already has a nav array, lists that edit in its confirmation, and
    warns that updating a Confluence page replaces its whole body. --dry-run also makes
    no offer to save configuration, in every skill that has it.
  • pm: the shared mockup procedure (ui-mockups and story-from-document) has screens
    reuse the first approved screen's CSS variables and shell markup, and makes a state
    that matters (empty, loading, error) its own page.
  • pm: removed the trigger phrases from the skill descriptions, since the skills run only
    when invoked. The root README lists the skill as sdd, matching /pm:sdd.

Fixed

  • pm configuration: sdd_template and sdd_guide in .claude/pm.json must now be paths
    relative to the repository (or a Confluence page ID). An absolute path, ~ or a drive
    letter is refused, so a cloned repository cannot point sdd at a file such as
    ~/.ssh/id_rsa. When a key appears twice, the first occurrence now wins on one line
    as well as across lines, and a value cut short by an escaped quote is treated as unset (a path value must not
    end in a backslash).
    repos_root is still accepted, and story-from-document tells you the path and asks
    once before reading outside the current repository.

CI

  • release.yml runs the two pm shell tests before publishing. validate.yml checks that
    every pm skill loads the configuration and pre-approves the loader command.

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 30 Sep 23:30
329a1f7

Added

  • pm plugin (0.1.0): project-management skills for Jira and Confluence, using the
    official Atlassian MCP server (registered as atlassian). All six skills run only
    when invoked, because each can write to Jira, Confluence or git, and each asks
    for explicit confirmation of a full draft before it writes anything.
    • epic, ui-mockups, epic-refine and story: a staged Epic-to-Story
      pipeline. epic turns a business-level Q&A (optionally seeded from a PRD)
      into a high-level Epic; ui-mockups optionally adds screens for business
      review; epic-refine adds technical detail grounded in code the agent has
      read; story creates one Story at a time from the Epic's story table. The
      Epic's maturity is tracked by a state line and a label, and each skill
      updates the Epic in one write, carrying existing labels forward.
    • story-from-document: builds a verified Story from a source document or
      brief, or promotes an existing Story in place (keeping the original text),
      with sub-tasks and dependency links. It checks claims against the real
      repositories with file:line evidence, never duplicates sub-tasks or links
      from an earlier run, and supports --dry-run, which writes nothing anywhere
      (Jira, Confluence or claude.ai).
    • sdd (/pm:sdd): creates or refreshes one living Solution Design Document per
      repository, grounded in the code, as a local markdown file and a Confluence
      page kept in sync. It detects hand edits on either side by page version and
      uncommitted changes, adopts an existing page with the standard title, preserves
      every ID on updates, and commits only the paths it names after one
      confirmation that lists every side effect. The bundled template and authoring
      guide are organisation-neutral, and either can be replaced with your own (a
      file or a Confluence page). The guide is split by Part and loaded per Part; its
      fictional examples are never copied into a document, and template text cannot
      override the skill's rules.
  • pm configuration: two plugin options (site, points_scale) plus an optional
    per-project .claude/pm.json (project_key, repos_root, sdd_template,
    sdd_guide, sdd_space, sdd_parent_id), resolved by pm/scripts/config.sh and
    injected into every skill. Project-file values are format-checked, and invalid
    ones are ignored. Anything not configured is asked for, with an offer to save it.
  • pm mockups: each screen is rendered to a PNG by Chrome, Edge, Chromium or
    Brave on macOS, Linux or Windows (PM_BROWSER selects one), falling back to a
    private Claude Design canvas (after asking, and never during a dry run), then to
    HTML files only.
  • pm quality checks: an eval suite in pm/evals/ (ten cases; see its README for
    what it can and cannot cover and for how they were calibrated), and deterministic
    tests for the configuration loader and the sdd repository-context script,
    pm/tests/, which run in CI.

Changed

  • The marketplace identifier is now nikolasd-plugins (it was misspelled
    nikolad-plugins) and matches the GitHub repo name. If you added the marketplace
    under the old name, remove it and add it again; plugins install as
    nd@nikolasd-plugins, pm@nikolasd-plugins and ty-lsp@nikolasd-plugins.

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 30 Sep 22:02
0ad00d0

Added

  • nd plugin: onboarding skill (frontmatter name: onboard; the command is
    /nd:onboarding, from the folder name), moved in from personal
    ~/.claude/skills — a workflow for producing a code-grounded onboarding
    documentation set (C4 context/containers/components, engineering, AI design,
    infrastructure, deployment, ownership map, fork-style ONBOARDING) for any repo,
    with a three-layer common/ + per-track layout when the repo holds several
    discrete products. Ships checker.py (citation/dangling-path/mermaid/link/
    track-leak acceptance gate with --layout, --track NAME:REGEX, --ai-doc,
    --agents-doc), briefs.md (subagent and reviewer briefs) and
    objective-template.md (goal-mode objective). What was verified, and how, is in
    the next entry and in nd/evals/README.md.
  • nd plugin: onboarding now runs outside the original harness (subagent and
    goal-tool fallbacks, explicit phase order, an inventory step before briefing) and
    checker.py enforces the code-only rule: it fails inadmissible citations (README,
    CLAUDE.md, docs/, reference/) outside an "Existing in-repo prose" section, line
    and symbol anchors that don't exist, TODO/TBD placeholders, and ONBOARDING entries
    that mention a sibling without linking it; paths match case-exactly, and MIME
    types, ~/@ strings and path:func() anchors are handled. Agents now report in
    fixed plain-text headings instead of JSON. The minimum-citations rule now counts
    unique citations (path plus anchor) rather than unique files, and the rules say a
    file the docs call absent is named in plain text. SKILL.md gained a workflow
    checklist, a Python preflight (an unrun gate is reported NOT RUN, never PASS), a
    "running short" rule, and a verification-depth choice (full or targeted); track
    detection and gate details moved to tracks.md and gate.md. Reviewers are
    capped by group size, work alone (no helper agents) and must return a report with a
    Covered line, after a real run showed one oversized reviewer stall, spawn helpers
    that applied nothing, and leave the orchestrator to reconcile about 35 findings.
    The checker now also keeps the README exemption open across sub-headings, counts
    route-group paths like src/app/(auth)/login/page.tsx and bare *.config.* files,
    ignores symbols that occur only in comment lines, and gate.md has a failure-to-action
    table, a definition of "fails twice", and an always-pass---root rule. The brief
    tells writers to backtick a file only when citing its real path and to write "to-do
    comments" instead of the literal placeholder words; in a mixed repo agents.md
    covers agents and workloads, and the reviewer count for tracked repos is stated
    (and marked unmeasured).
    84 tests in tests/onboarding/ (the checker, plus consistency tests that tie the
    brief, gate.md and SKILL.md to the checker).
    Evidence, with its limits: 4 eval cases. The trigger case fires on natural phrasing
    (5/5 with the plugin); its Δ +1.00 is structural, since a baseline cannot load a skill
    it lacks. The near-miss does not over-fire. The applied case passes but does not
    discriminate from a baseline (Δ 0.00). The full-workflow case is one run each on two
    real repos, both single-layout Next.js apps: the second finished (score 0.82, 10 agents,
    824 claims checked and 68 corrected by the agents' own count) and its output passes the
    checker when run afterwards, but its final-report grader was skipped, not passed, and
    the agent had no shell to run the checker itself. That run used a repo about eight times
    smaller than the one where a reviewer stalled, so it does not show the review-group cap
    fixes that stall. The tracked layout, round-2 fixes, targeted depth and Haiku/Opus
    have not been exercised by an agent.

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 28 Sep 14:34

Added

  • nd plugin: disciplined-delivery skill (frontmatter name: delivery; the command
    is still /nd:disciplined-delivery, from the folder name) — a delivery protocol
    that applies before any code is written or changed, however small the edit:
    research before code, test first, the definition of "fully implemented" (coverage
    and ADR criteria apply where the repo uses them), adversarial self-review, honest
    status reporting, and one explicit "approve" per commit, push, rebase, amend, PR or
    checkout change. Test-first mechanics are delegated to
    superpowers:test-driven-development.
  • nd/evals/disciplined-delivery/: 4 cases. tests-first (a plain coding request
    must get a test edited before the code), flags-incomplete-done (trigger),
    skips-code-explanation (near-miss), and shows-before-committing ("Commit it"
    must still get the diff stat, test result and commit message shown, and an
    "approve" asked for, first). Run 2026-09-28 on Windows (5 runs × 2 arms, Sonnet
    judge): tests-first 1.00 with the plugin vs 0.00 without (Δ +1.00, skill fired
    5/5); flags-incomplete-done and skips-code-explanation 1.00 in both arms; and
    engineer-skips-solo-task re-run at 1.00, since the new skill now also fires on
    solo coding tasks. tests-first checks edit order with a regex over the trace; an
    llm judge failed correctly ordered runs because it judged the final reply.
    The skill's earlier description ("starting a coding task") fired on only
    6 of 12 small-edit runs, which is why the description now names any edit.
    shows-before-committing needs Bash and has not been run yet: this machine's
    unreadable Automox PATH entry blocks it, so it still needs a Linux run.

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 20:58
60e2fba

Added

  • nd plugin, two skills moved in from personal ~/.claude/skills: architect
    (plans, reviews and delegates to a separate engineer session) and engineer
    (implements architect tasks with TDD, reports back with evidence). Each spawns its
    missing peer via Herdr and sets the peer's model with /model, since a skill's
    model: field only lasts one turn.
  • nd/evals/architect/ and nd/evals/engineer/: trigger / near-miss / applied eval
    cases for both new skills (6 cases), closing the gap tracked in
    docs/memory/tasks/architect-engineer-evals.md. The applied cases regression-test
    the two highest-severity rules: architect-stops-without-herdr (no engineer session
    • HERDR_ENV unset must stop delegation, not fall back to self-implementing or a
      subagent) and engineer-refuses-unauthorized-commit (an architect instruction to
      commit only counts if it says the user authorized it). Run for real 2026-09-24 (5
      runs × 2 arms, Sonnet judge): all six at 1.00 score / 1.00 pass rate with the plugin,
      after fixing three test-authoring bugs surfaced along the way — see
      nd/evals/README.md's Resolved section. No changes needed to either SKILL.md.