vouchington-tooling 0.22.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +34 -0
  2. package/dist/markdown/details-scope.d.mts +13 -0
  3. package/dist/markdown/details-scope.mjs +73 -0
  4. package/dist/markdown/document-sections.d.mts +3 -0
  5. package/dist/markdown/document-sections.mjs +64 -0
  6. package/dist/markdown/document-types.d.mts +21 -0
  7. package/dist/markdown/document-types.mjs +1 -0
  8. package/dist/markdown/index.d.mts +3 -0
  9. package/dist/markdown/index.mjs +2 -0
  10. package/dist/markdown/validate-sections.d.mts +3 -0
  11. package/dist/markdown/validate-sections.mjs +34 -0
  12. package/package.json +1 -1
  13. package/skills/agent-workflow/SKILL.md +19 -24
  14. package/skills/agent-workflow/references/evidence-sweep.md +4 -0
  15. package/skills/agent-workflow/references/implementation-and-review.md +2 -7
  16. package/skills/agent-workflow/references/implementation.md +9 -2
  17. package/skills/agent-workflow/references/review.md +3 -0
  18. package/skills/backend-vitest-test-authoring/SKILL.md +5 -1
  19. package/skills/blackboard/SKILL.md +5 -1
  20. package/skills/dependabot/SKILL.md +5 -1
  21. package/skills/dotnet-test-authoring/SKILL.md +5 -1
  22. package/skills/git-commit-checklist/SKILL.md +9 -1
  23. package/skills/github-actions-authoring/SKILL.md +5 -1
  24. package/skills/github-actions-checklist/SKILL.md +9 -1
  25. package/skills/github-issue/SKILL.md +5 -1
  26. package/skills/manifest.json +52 -41
  27. package/skills/nextjs-vitest-test-authoring/SKILL.md +5 -1
  28. package/skills/npm-publishing/SKILL.md +5 -1
  29. package/skills/organize-github-issues/SKILL.md +5 -1
  30. package/skills/package-json-checklist/SKILL.md +5 -1
  31. package/skills/planning/SKILL.md +16 -11
  32. package/skills/planning/references/impact-discovery.md +2 -0
  33. package/skills/playwright-authoring/SKILL.md +5 -1
  34. package/skills/postgres-node-performance-tuning/SKILL.md +5 -1
  35. package/skills/postgres-partitioning-uuid-v7/SKILL.md +5 -1
  36. package/skills/pr-description/SKILL.md +49 -11
  37. package/skills/pr-description/references/examples.md +136 -0
  38. package/skills/retrospective/SKILL.md +5 -1
  39. package/skills/retrospective-distill/SKILL.md +5 -1
  40. package/skills/review-ci-logs/SKILL.md +15 -1
  41. package/skills/review-github-issue-taxonomy/SKILL.md +5 -1
  42. package/skills/revisit-followups/SKILL.md +5 -1
  43. package/skills/stacked-prs/SKILL.md +5 -1
  44. package/skills/static-analysis-checklist/SKILL.md +5 -1
  45. package/skills/storybook-authoring/SKILL.md +5 -1
  46. package/skills/swift-test-authoring/SKILL.md +5 -1
  47. package/skills/test-authoring/SKILL.md +5 -1
  48. package/skills/test-authoring/references/core-practice.md +2 -0
  49. package/skills/vitest-test-authoring/SKILL.md +5 -1
package/README.md CHANGED
@@ -338,6 +338,32 @@ shape, including short table delimiters. `extractLooseMarkdownTableRows` is inte
338
338
  recovery for malformed pipe rows; callers supply table positions to exclude and retain ownership of
339
339
  their policy interpretation.
340
340
 
341
+ `parseMarkdownSections` returns visible root H2 sections, their exact original `content`,
342
+ `startOffset`/`endOffset` source ranges, heading line, and `hasVisibleContent`. Heading text is
343
+ normalized by collapsing whitespace and removing Markdown formatting/comments and collapsed text; matching remains
344
+ case-sensitive. Source offsets are JavaScript string offsets, so `source.slice(startOffset,
345
+ endOffset)` preserves Unicode and CRLF exactly. Sections end at the next visible root H2 or EOF;
346
+ fenced examples, quoted headings, and headings inside `<details>` do not create boundaries.
347
+
348
+ ```ts
349
+ import { parseMarkdownSections, validateMarkdownSections } from 'vouchington-tooling/markdown'
350
+
351
+ const document = parseMarkdownSections(body)
352
+ const diagnostics = validateMarkdownSections(document, {
353
+ requiredHeadings: ['Summary', 'Impact'],
354
+ })
355
+ const relatedIssues = document.sections.find((section) => section.heading === 'Related issues')
356
+ ```
357
+
358
+ The caller owns required headings. Validation returns diagnostics with `code`, `message`, and
359
+ optional `heading`/`line`, for `missing-heading`, `duplicate-heading`, `empty-section`, or
360
+ `malformed-details`. Nonempty visible paragraphs, lists, and populated table bodies satisfy the
361
+ content check; comments, fenced/indented code, images, disclosure labels, and collapsed-only content
362
+ do not. The parser tracks balanced nested details/summary tags in GFM HTML nodes, accepting optional
363
+ summaries and quoted attributes; it is not a general HTML validator or sanitizer. It never rewrites
364
+ the input or infers semantic relevance, cost, schema conformance, or failure causes. The existing
365
+ `markdownSectionBetweenHeadings` API retains its original boundary behavior.
366
+
341
367
  `agent-harness-config` merges classifier-auto and sandbox keys into Claude, Codex, Grok, and Cursor
342
368
  config files. See [docs/agent-harness-config.md](./docs/agent-harness-config.md). `--global` updates
343
369
  home-directory configs; `--repo` updates a checkout. It does not copy allowlists, hooks, or plugins.
@@ -462,6 +488,14 @@ Codex plugins. The package build materializes plugin source trees without hand-c
462
488
  and writes sorted schema-v1 provenance to `skills/manifest.json`.
463
489
  Each manifest entry may declare its ordered `prerequisites`; ordinary Markdown links remain
464
490
  cross-references and never cause additional skills to be linked.
491
+ Prerequisites ensure installation closure; they do not require eagerly reading every installed
492
+ skill. Follow the invoked skill's conditional instructions for the current task.
493
+
494
+ Canonical entrypoints direct agents to applicable local instructions and adapters before using
495
+ portable policy. Local `AGENTS.md` may name an adapter alias; an already-read canonical skill or
496
+ adapter is not loaded again. `linkSkill` still links files only: it does not load instructions,
497
+ resolve local aliases, or execute a workflow. Validate observed agent loading separately from
498
+ installation and packaged-resource checks.
465
499
 
466
500
  Use `readSkillManifest(skillsRoot)` to discover installed skills or
467
501
  `linkSkill({ name, sourceRoot, targetRoot })` to link one into an explicit consumer directory. The
@@ -0,0 +1,13 @@
1
+ import type { MarkdownSectionsDiagnostic } from './document-types.mts';
2
+ /** Tracks disclosure tags from HTML nodes, never from fenced code or Markdown comments. */
3
+ export declare class DetailsScope {
4
+ private readonly markdown;
5
+ readonly diagnostics: MarkdownSectionsDiagnostic[];
6
+ private readonly frames;
7
+ constructor(markdown: string);
8
+ get visible(): boolean;
9
+ acceptHtml(html: string, startOffset: number): void;
10
+ finish(): void;
11
+ private acceptTag;
12
+ private problem;
13
+ }
@@ -0,0 +1,73 @@
1
+ /** Tracks disclosure tags from HTML nodes, never from fenced code or Markdown comments. */
2
+ export class DetailsScope {
3
+ markdown;
4
+ diagnostics = [];
5
+ frames = [];
6
+ constructor(markdown) {
7
+ this.markdown = markdown;
8
+ }
9
+ get visible() {
10
+ return this.frames.length === 0;
11
+ }
12
+ acceptHtml(html, startOffset) {
13
+ const tokens = /<!--[\s\S]*?(?:-->|$)|<\/?[a-z][a-z\d:-]*(?:[^"'<>]|"[^"]*"|'[^']*')*>/giu;
14
+ for (const token of html.matchAll(tokens)) {
15
+ if (token[0].startsWith('<!--'))
16
+ continue;
17
+ const tag = /^<(\/?)([a-z][a-z\d:-]*)/iu.exec(token[0]);
18
+ const name = tag[2].toLowerCase();
19
+ if (name !== 'details' && name !== 'summary')
20
+ continue;
21
+ const line = this.markdown.slice(0, startOffset + token.index).split('\n').length;
22
+ if (/\/\s*>$/u.test(token[0])) {
23
+ this.problem(line, `${tag[2]} cannot be self-closing`);
24
+ continue;
25
+ }
26
+ this.acceptTag(name, tag[1] === '/', line);
27
+ }
28
+ }
29
+ finish() {
30
+ for (const frame of this.frames)
31
+ this.problem(frame.line, 'details has no closing tag');
32
+ }
33
+ acceptTag(name, closing, line) {
34
+ if (name === 'details') {
35
+ if (!closing) {
36
+ if (this.frames.at(-1)?.summary === 'open') {
37
+ this.problem(line, 'details cannot open inside summary');
38
+ }
39
+ this.frames.push({ line, summary: 'absent' });
40
+ return;
41
+ }
42
+ const frame = this.frames.pop();
43
+ if (!frame)
44
+ this.problem(line, 'details closes without an opening tag');
45
+ else if (frame.summary === 'open')
46
+ this.problem(line, 'summary has no closing tag');
47
+ return;
48
+ }
49
+ const frame = this.frames.at(-1);
50
+ if (!frame) {
51
+ this.problem(line, 'summary must be inside details');
52
+ return;
53
+ }
54
+ if (closing) {
55
+ if (frame.summary !== 'open')
56
+ this.problem(line, 'summary closes without an opening tag');
57
+ else
58
+ frame.summary = 'closed';
59
+ }
60
+ else if (frame.summary !== 'absent') {
61
+ this.problem(line, 'details contains more than one summary or a nested summary');
62
+ }
63
+ else
64
+ frame.summary = 'open';
65
+ }
66
+ problem(line, reason) {
67
+ this.diagnostics.push({
68
+ code: 'malformed-details',
69
+ line,
70
+ message: `Malformed details: ${reason}.`,
71
+ });
72
+ }
73
+ }
@@ -0,0 +1,3 @@
1
+ import type { MarkdownSectionsDocument } from './document-types.mts';
2
+ /** Parses visible root H2 sections while retaining exact source ranges and disclosure scope. */
3
+ export declare function parseMarkdownSections(markdown: string): MarkdownSectionsDocument;
@@ -0,0 +1,64 @@
1
+ import { parseGfmMarkdown } from './ast.mjs';
2
+ import { DetailsScope } from './details-scope.mjs';
3
+ /** Parses visible root H2 sections while retaining exact source ranges and disclosure scope. */
4
+ export function parseMarkdownSections(markdown) {
5
+ const sections = [];
6
+ const scope = new DetailsScope(markdown);
7
+ let current;
8
+ const visit = (node, collectText) => {
9
+ if (node.type === 'html') {
10
+ scope.acceptHtml(node.value, node.position.start.offset);
11
+ return;
12
+ }
13
+ if (node.type === 'code' || node.type === 'image')
14
+ return;
15
+ if (collectText &&
16
+ scope.visible &&
17
+ current &&
18
+ (node.type === 'text' || node.type === 'inlineCode') &&
19
+ node.value.trim()) {
20
+ current.hasVisibleContent = true;
21
+ }
22
+ if (!('children' in node))
23
+ return;
24
+ for (const [index, child] of node.children.entries()) {
25
+ visit(child, collectText && node.type !== 'heading' && (node.type !== 'table' || index > 0));
26
+ }
27
+ };
28
+ for (const node of parseGfmMarkdown(markdown).children) {
29
+ if (node.type === 'heading') {
30
+ const wasVisible = scope.visible;
31
+ const heading = headingText(node, scope).replace(/\s+/gu, ' ').trim();
32
+ if (node.depth === 2 && wasVisible && heading) {
33
+ if (current)
34
+ current.endOffset = node.position.start.offset;
35
+ current = {
36
+ heading,
37
+ content: '',
38
+ startOffset: node.position.end.offset,
39
+ endOffset: markdown.length,
40
+ line: node.position.start.line,
41
+ hasVisibleContent: false,
42
+ };
43
+ sections.push(current);
44
+ }
45
+ continue;
46
+ }
47
+ visit(node, node.type === 'paragraph' || node.type === 'list' || node.type === 'table');
48
+ }
49
+ scope.finish();
50
+ for (const section of sections)
51
+ section.content = markdown.slice(section.startOffset, section.endOffset);
52
+ return { sections, diagnostics: scope.diagnostics };
53
+ }
54
+ function headingText(node, scope) {
55
+ if (node.type === 'html') {
56
+ scope.acceptHtml(node.value, node.position.start.offset);
57
+ return '';
58
+ }
59
+ if (node.type === 'text' || node.type === 'inlineCode')
60
+ return scope.visible ? node.value : '';
61
+ if (!('children' in node))
62
+ return '';
63
+ return node.children.map((child) => headingText(child, scope)).join('');
64
+ }
@@ -0,0 +1,21 @@
1
+ export type MarkdownVisibleSection = {
2
+ heading: string;
3
+ content: string;
4
+ startOffset: number;
5
+ endOffset: number;
6
+ line: number;
7
+ hasVisibleContent: boolean;
8
+ };
9
+ export type MarkdownSectionsDiagnostic = {
10
+ code: 'missing-heading' | 'duplicate-heading' | 'empty-section' | 'malformed-details';
11
+ message: string;
12
+ heading?: string;
13
+ line?: number;
14
+ };
15
+ export type MarkdownSectionsDocument = {
16
+ sections: MarkdownVisibleSection[];
17
+ diagnostics: MarkdownSectionsDiagnostic[];
18
+ };
19
+ export type ValidateMarkdownSectionsOptions = {
20
+ requiredHeadings: readonly string[];
21
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -1,5 +1,8 @@
1
1
  export { findMarkdownNode, findMarkdownNodes, parseGfmMarkdown, walkMarkdown } from './ast.mts';
2
2
  export { extractLooseMarkdownTableRows } from './loose-pipe-rows.mts';
3
+ export { parseMarkdownSections } from './document-sections.mts';
4
+ export { validateMarkdownSections } from './validate-sections.mts';
5
+ export type { MarkdownVisibleSection, MarkdownSectionsDiagnostic, MarkdownSectionsDocument, ValidateMarkdownSectionsOptions, } from './document-types.mts';
3
6
  export { markdownSectionBetweenHeadings } from './sections.mts';
4
7
  export { extractMarkdownTables, parseMarkdownTables } from './tables.mts';
5
8
  export { markdownNodeText } from './text.mts';
@@ -1,5 +1,7 @@
1
1
  export { findMarkdownNode, findMarkdownNodes, parseGfmMarkdown, walkMarkdown } from './ast.mjs';
2
2
  export { extractLooseMarkdownTableRows } from './loose-pipe-rows.mjs';
3
+ export { parseMarkdownSections } from './document-sections.mjs';
4
+ export { validateMarkdownSections } from './validate-sections.mjs';
3
5
  export { markdownSectionBetweenHeadings } from './sections.mjs';
4
6
  export { extractMarkdownTables, parseMarkdownTables } from './tables.mjs';
5
7
  export { markdownNodeText } from './text.mjs';
@@ -0,0 +1,3 @@
1
+ import type { MarkdownSectionsDiagnostic, MarkdownSectionsDocument, ValidateMarkdownSectionsOptions } from './document-types.mts';
2
+ /** Validates caller-owned headings and visible core content without inferring semantic relevance. */
3
+ export declare function validateMarkdownSections(document: MarkdownSectionsDocument, options: ValidateMarkdownSectionsOptions): MarkdownSectionsDiagnostic[];
@@ -0,0 +1,34 @@
1
+ /** Validates caller-owned headings and visible core content without inferring semantic relevance. */
2
+ export function validateMarkdownSections(document, options) {
3
+ const diagnostics = [...document.diagnostics];
4
+ for (const heading of options.requiredHeadings) {
5
+ const sections = document.sections.filter((section) => section.heading === heading);
6
+ if (sections.length === 0) {
7
+ diagnostics.push({
8
+ code: 'missing-heading',
9
+ heading,
10
+ message: `Missing required section: ${heading}.`,
11
+ });
12
+ continue;
13
+ }
14
+ if (sections.length > 1) {
15
+ diagnostics.push({
16
+ code: 'duplicate-heading',
17
+ heading,
18
+ line: sections[1].line,
19
+ message: `Duplicate required section: ${heading}.`,
20
+ });
21
+ }
22
+ for (const section of sections) {
23
+ if (!section.hasVisibleContent) {
24
+ diagnostics.push({
25
+ code: 'empty-section',
26
+ heading,
27
+ line: section.line,
28
+ message: `Required section has no visible prose, list, or table content: ${heading}.`,
29
+ });
30
+ }
31
+ }
32
+ }
33
+ return diagnostics;
34
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vouchington-tooling",
3
- "version": "0.22.0",
3
+ "version": "0.23.0",
4
4
  "description": "Vouchington CLI and extractable tooling libraries.",
5
5
  "homepage": "https://github.com/vouchington/vouchington-tooling/tree/main/packages/vouchington-tooling#readme",
6
6
  "bugs": {
@@ -1,35 +1,30 @@
1
1
  ---
2
2
  name: agent-workflow
3
- description: 'Shared workflow guidance for repository implementation: inspect local instructions, keep changes bounded, validate, and prepare reviewable commits.'
3
+ description: Implement and review repository changes within local policy.
4
4
  ---
5
5
 
6
6
  # Agent workflow
7
7
 
8
- Use this skill before implementation work. It supplies portable defaults; the repository's
9
- `AGENTS.md`, contribution guide, and CI configuration define the actual commands,
10
- branching, review, and release policy.
8
+ Read applicable `AGENTS.md` and their declared adapter alias, otherwise
9
+ `.agents/skills/agent-workflow/SKILL.md` from the repository root if present.
10
+ Local policy overrides these defaults; do not reload an already-read adapter or canonical skill.
11
11
 
12
- 1. Inspect the current checkout and its status without discarding local work. Follow the consumer
13
- repository's instructions for branch and worktree topology; do not create either implicitly.
14
- 2. Read every applicable `AGENTS.md` from the repository root through each changed
15
- file, then relevant documentation and tests. Apply the closest instruction only when rules
16
- conflict, and treat all applicable local instructions as higher priority than this skill.
17
- 3. Confirm the accepted task's boundary. Reuse existing ownership and utilities; ask before
18
- widening scope or making an irreversible external change.
19
- 4. Write a focused test first when behavior can be tested. Keep source, tests, docs, and generated
20
- artifacts within the repository's stated size and formatting rules.
21
- 5. Run the focused checks, then the local commands required for the changed surface. Report skipped
22
- checks with a concrete reason.
23
- 6. Review the diff for accidental files, secrets, generated output, broken documentation links,
24
- and assumptions that belong in local instructions instead.
25
- 7. When feedback arrives on an open change, give every surfaced item a disposition and drive it to
26
- closure before hand-off; do not leave items unaddressed or silently absorb or defer them.
12
+ Use before implementation. Inspect checkout status without discarding work; follow local branch,
13
+ worktree, contribution, and CI policy. Read every applicable `AGENTS.md` from the repository root
14
+ through changed files, plus relevant documentation and tests. Local instructions govern this skill.
27
15
 
28
- For portable implementation and review checks, read [implementation](references/implementation.md),
29
- [review](references/review.md), [review response](references/review-response.md), and
30
- [evidence sweep](references/evidence-sweep.md). The older
31
- [implementation and review](references/implementation-and-review.md) remains a compact overview.
32
- Local instructions remain authoritative for commands, commits, review systems, and release policy.
16
+ Use [PR descriptions](../pr-description/SKILL.md) before creating or updating a pull request.
17
+ Diagnose failed CI with [CI-log review](../review-ci-logs/SKILL.md), then update confirmed harness
18
+ gaps before handoff. Keep those records after checks pass; routine local successes stay in the
19
+ evidence record.
20
+
21
+ - During implementation, use [implementation](references/implementation.md).
22
+ - Before handoff, use [evidence sweep](references/evidence-sweep.md).
23
+ - For review, use [review](references/review.md).
24
+ - For surfaced feedback, use [review response](references/review-response.md).
25
+
26
+ Load only the references required by the current phase. Keep scope changes explicit; a discovered
27
+ blocker or follow-up does not authorize widening the task.
33
28
 
34
29
  Consumer wrapper or local instructions own: default branch, runner class, documentation root,
35
30
  review system, merge policy, and command catalog.
@@ -6,3 +6,7 @@ finding: state the blocker, affected surface, and remaining risk.
6
6
 
7
7
  Before handoff, compare the final diff to the accepted decision ledger and verify documentation,
8
8
  generated output, and public contracts agree with the implementation.
9
+
10
+ When one semantic defect is found, search sibling call and write sites for the same shape; record
11
+ why remaining matches are safe. Keep large logs and analysis artifacts outside the agent context,
12
+ and report bounded findings and their evidence rather than raw payloads.
@@ -1,9 +1,4 @@
1
1
  # Implementation and review
2
2
 
3
- Before editing, map callers, tests, configuration, and documentation that own the behavior. Keep the
4
- change within the accepted boundary; record a new dependency or product decision before widening it.
5
-
6
- After focused validation, inspect the complete diff for accidental generated files, secret exposure,
7
- dead paths, and documentation drift. Validate the public interface and failure paths, not only the
8
- happy path. Before a reviewable commit, run the repository-required checks and state any skipped
9
- checks with their concrete blocker.
3
+ Use [implementation](implementation.md) while editing, [evidence sweep](evidence-sweep.md) before
4
+ handoff, and [review](review.md) for an independent review.
@@ -1,8 +1,15 @@
1
1
  # Implementation
2
2
 
3
- Keep an accepted-decision ledger for interfaces, data boundaries, validation, and ownership choices
4
- that could otherwise be lost during coding. Start from a failing behavioral test when practical and
3
+ For cross-cutting work, track accepted interface, data, validation, and ownership decisions that
4
+ could otherwise be lost during coding. Start from a failing behavioral test when practical and
5
5
  complete the real path rather than adding placeholders or compatibility shims without a requirement.
6
6
 
7
7
  When behavior changes, update the public contract, documentation, fixtures, and generated artifacts
8
8
  that describe it. Keep local commands, branch policy, and release mechanics in the consumer wrapper.
9
+
10
+ Resolve rebase conflicts semantically: identify the upstream invariant, integrate both changes,
11
+ and rerun the tests for that invariant. Do not treat the conflict as a choice of whole-file versions.
12
+
13
+ Removing a deadline or abort bound needs a replacement on the same path, or evidence and a test
14
+ showing every caller supplies its own bound. When changing a policy table, check sibling rows for
15
+ contradictory conventions.
@@ -5,3 +5,6 @@ contract compatibility, failure paths, authorization, untrusted input, secrets,
5
5
  boundaries. Remove dead paths and stale documentation rather than labeling them as legacy.
6
6
 
7
7
  Record unresolved risk as an explicit accepted decision or follow-up, never as an unnoticed gap.
8
+ Check the pull-request description against the final behavior and audience impact. After CI
9
+ diagnosis, ensure confirmed local-verification gaps or local/CI mismatches and their correction
10
+ remain disclosed; passing checks do not erase the gap discovered earlier.
@@ -1,10 +1,14 @@
1
1
  ---
2
2
  name: backend-vitest-test-authoring
3
- description: Apply backend Vitest patterns for service, provider, persistence, and queue boundaries.
3
+ description: Test backend persistence, providers, services, and queues with Vitest.
4
4
  ---
5
5
 
6
6
  # Backend Vitest test authoring
7
7
 
8
+ Read applicable `AGENTS.md` and their declared adapter alias, otherwise
9
+ `.agents/skills/backend-vitest-test-authoring/SKILL.md` from the repository root if present.
10
+ Local policy overrides these defaults; do not reload an already-read adapter or canonical skill.
11
+
8
12
  Apply [vitest-test-authoring](../vitest-test-authoring/SKILL.md) first.
9
13
 
10
14
  - Exercise a real integration boundary only when the test environment controls its lifecycle.
@@ -1,10 +1,14 @@
1
1
  ---
2
2
  name: blackboard
3
- description: Record and retrieve concise contemporaneous session findings when the repository provides a journal or blackboard service.
3
+ description: Record and retrieve contemporaneous findings in the repository journal.
4
4
  ---
5
5
 
6
6
  # Session journal
7
7
 
8
+ Read applicable `AGENTS.md` and their declared adapter alias, otherwise
9
+ `.agents/skills/blackboard/SKILL.md` from the repository root if present.
10
+ Local policy overrides these defaults; do not reload an already-read adapter or canonical skill.
11
+
8
12
  Use when the current repository provides a journal, blackboard, or equivalent durable session
9
13
  record. Read local `AGENTS.md` for the provider, credential, retention, and
10
14
  subagent-identity rules.
@@ -1,10 +1,14 @@
1
1
  ---
2
2
  name: dependabot
3
- description: Configure or audit Dependabot coverage, cooldowns, package-family grouping, trusted CI, and conservative auto-merge policy for a repository.
3
+ description: Configure Dependabot coverage, grouping, cooldowns, and trusted automation.
4
4
  ---
5
5
 
6
6
  # Dependabot policy
7
7
 
8
+ Read applicable `AGENTS.md` and their declared adapter alias, otherwise
9
+ `.agents/skills/dependabot/SKILL.md` from the repository root if present.
10
+ Local policy overrides these defaults; do not reload an already-read adapter or canonical skill.
11
+
8
12
  Read every applicable `AGENTS.md`, then the repository's dependency, CI, release,
9
13
  and branch-protection docs. The consumer wrapper owns the accepted cooldown, package roots,
10
14
  first-party publishers, manual-update exceptions, runner policy, required checks, and secret source.
@@ -1,10 +1,14 @@
1
1
  ---
2
2
  name: dotnet-test-authoring
3
- description: Add maintainable .NET tests with appropriate unit, app, and integration boundaries.
3
+ description: Author .NET unit, application, and integration tests.
4
4
  ---
5
5
 
6
6
  # .NET test authoring
7
7
 
8
+ Read applicable `AGENTS.md` and their declared adapter alias, otherwise
9
+ `.agents/skills/dotnet-test-authoring/SKILL.md` from the repository root if present.
10
+ Local policy overrides these defaults; do not reload an already-read adapter or canonical skill.
11
+
8
12
  Apply [test-authoring](../test-authoring/SKILL.md).
9
13
 
10
14
  - Place a test at the narrowest layer that proves the behavior.
@@ -1,10 +1,14 @@
1
1
  ---
2
2
  name: git-commit-checklist
3
- description: Use before staging and committing changes to verify scope, validation, commit metadata, and local repository policy.
3
+ description: Verify scope, checks, and local policy before committing.
4
4
  ---
5
5
 
6
6
  # Git commit checklist
7
7
 
8
+ Read applicable `AGENTS.md` and their declared adapter alias, otherwise
9
+ `.agents/skills/git-commit-checklist/SKILL.md` from the repository root if present.
10
+ Local policy overrides these defaults; do not reload an already-read adapter or canonical skill.
11
+
8
12
  Use before every commit. Read local `AGENTS.md`, contribution guidance, and hook
9
13
  output first; they own commit format, required trailers, file-size limits, and validation commands.
10
14
 
@@ -19,3 +23,7 @@ output first; they own commit format, required trailers, file-size limits, and v
19
23
 
20
24
  Local instructions or the consumer wrapper own: branch names, file-size budgets, commit
21
25
  conventions, pull-request templates, and push commands.
26
+
27
+ When an authorized rebase push may race another writer, capture the remote tip before fetching and
28
+ push with an exact expected-tip lease. A lease against a freshly fetched tracking ref can overwrite
29
+ the concurrent change it was meant to protect.
@@ -1,10 +1,14 @@
1
1
  ---
2
2
  name: github-actions-authoring
3
- description: Author or redesign GitHub Actions workflows around event-driven orchestration, with remote-state polling prohibited.
3
+ description: Design event-driven GitHub Actions without remote-state polling.
4
4
  ---
5
5
 
6
6
  # GitHub Actions authoring
7
7
 
8
+ Read applicable `AGENTS.md` and their declared adapter alias, otherwise
9
+ `.agents/skills/github-actions-authoring/SKILL.md` from the repository root if present.
10
+ Local policy overrides these defaults; do not reload an already-read adapter or canonical skill.
11
+
8
12
  Never poll in CI. A workflow reacts to a state transition. Read
9
13
  [github-actions-checklist](../github-actions-checklist/SKILL.md) first, then every applicable
10
14
  `AGENTS.md`. Repository-local policy and the consumer wrapper own runner labels,
@@ -1,10 +1,14 @@
1
1
  ---
2
2
  name: github-actions-checklist
3
- description: Use when editing GitHub Actions workflows or composite actions to keep security, runner, permissions, concurrency, and validation aligned with local policy.
3
+ description: Check Actions triggers, permissions, runners, pins, and deadlines.
4
4
  ---
5
5
 
6
6
  # GitHub Actions checklist
7
7
 
8
+ Read applicable `AGENTS.md` and their declared adapter alias, otherwise
9
+ `.agents/skills/github-actions-checklist/SKILL.md` from the repository root if present.
10
+ Local policy overrides these defaults; do not reload an already-read adapter or canonical skill.
11
+
8
12
  Use before editing a workflow or composite action. Repository-local instructions own runners,
9
13
  approved action pins, concurrency names, secrets, permissions, and workflow-only pull-request rules.
10
14
  Apply this baseline unless a stricter local rule overrides it.
@@ -14,6 +18,10 @@ Apply this baseline unless a stricter local rule overrides it.
14
18
  - Use `pull_request` for pull-request workflows in private repositories.
15
19
  - Reserve `pull_request_target` for base-owned orchestration in a public repository, or for a
16
20
  narrowly scoped Dependabot or Renovate workflow.
21
+ - A pull-request CI workflow must not subscribe to `ready_for_review` or `converted_to_draft`
22
+ unless a job changes what it does on that transition. Those activity types start another run for
23
+ the same head, and `cancel-in-progress: true` replaces checks that already passed. Dependabot
24
+ auto-merge may keep `ready_for_review`: it enables merge and does not rerun tests.
17
25
  - A privileged workflow must not check out or execute untrusted pull-request content.
18
26
  - When changing orchestration, load
19
27
  [github-actions-authoring](../github-actions-authoring/SKILL.md). Do not poll remote workflow,
@@ -1,10 +1,14 @@
1
1
  ---
2
2
  name: github-issue
3
- description: Search, create, update, link, or assess GitHub issues using the repository's live issue policy and taxonomy.
3
+ description: Search, write, and classify GitHub issues within live authorization.
4
4
  ---
5
5
 
6
6
  # GitHub issues
7
7
 
8
+ Read applicable `AGENTS.md` and their declared adapter alias, otherwise
9
+ `.agents/skills/github-issue/SKILL.md` from the repository root if present.
10
+ Local policy overrides these defaults; do not reload an already-read adapter or canonical skill.
11
+
8
12
  Use for durable follow-ups and pull-request linkage. Read local `AGENTS.md`, issue
9
13
  templates, and repository-routing policy before any remote mutation.
10
14