@haus-tech/haus-workflow 5.11.0 → 5.12.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.12.0](https://github.com/WeAreHausTech/haus-workflow/compare/v5.11.0...v5.12.0) (2026-10-08)
4
+
5
+ ### Bug Fixes
6
+
7
+ - **doctor:** AGENT REFS skips bold terms and agent words outside the sentence (ADR-0149) ([#633](https://github.com/WeAreHausTech/haus-workflow/issues/633)) ([c67b09c](https://github.com/WeAreHausTech/haus-workflow/commit/c67b09c40341f17ccafa89ecb2515129de407827)), closes [#307](https://github.com/WeAreHausTech/haus-workflow/issues/307) [#328](https://github.com/WeAreHausTech/haus-workflow/issues/328) [#329](https://github.com/WeAreHausTech/haus-workflow/issues/329) [WeAreHausTech/haus-workflow-catalog#307](https://github.com/WeAreHausTech/haus-workflow-catalog/issues/307)
8
+
3
9
  ## [5.11.0](https://github.com/WeAreHausTech/haus-workflow/compare/v5.10.1...v5.11.0) (2026-10-07)
4
10
 
5
11
  ### Features
package/dist/cli.js CHANGED
@@ -8910,11 +8910,13 @@ var BOLD_SPAN = /\*\*([^*\n]+)\*\*/g;
8910
8910
  var BARE_NAME = /^[a-z0-9][a-z0-9-]{2,}$/;
8911
8911
  var KEBAB_NAME = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)+$/;
8912
8912
  var AGENT_WORD = /\bagents?\b/i;
8913
+ var SENTENCE_END = /[.!?](?=\s|$)/g;
8913
8914
  var ITEMS_HEADING = /\b(?:skills?|agents?)\b/i;
8914
8915
  var LIST_ITEM = /^(\s*(?:[-*+]|\d+[.)])\s+)(.*)$/;
8915
8916
  var LIST_LABEL = /^[A-Za-z][A-Za-z /]{0,24}:\s*/;
8916
8917
  var KEYWORD_BEFORE = /(?:sub)?(?:skills?|agents?)\s*[:=-]*\s*$/i;
8917
8918
  var KEYWORD_AFTER = /^\s+(?:[A-Za-z]+\s+)?(?:sub)?(?:skills?|agents?)\b/i;
8919
+ var ARTICLE_BEFORE = /\b(?:a|an)\s+$/i;
8918
8920
  var ROUTER_BEFORE = /\b(?:routes?|routing|delegates?|dispatch(?:es)?|hands? off)\s*(?:to|→|->|:)?\s*$/i;
8919
8921
  var RUN_SEPARATOR = /^\s*(?:\([^)\n]*\))?\s*(?:,|;|\/|\band\b|\bor\b|\bplus\b)\s*(?:the\s+)?$/i;
8920
8922
  var INLINE_KEYWORD_NAME = /^(?:sub)?(?:skills?|agents?)\s*[:=]\s*(\S+)$/i;
@@ -8948,7 +8950,15 @@ function groupRuns(line2, spans) {
8948
8950
  }
8949
8951
  return runs;
8950
8952
  }
8951
- function isAgentContext(line2, nearestHeading) {
8953
+ function sentenceAround(line2, token) {
8954
+ let start = 0;
8955
+ for (const end of line2.matchAll(SENTENCE_END)) {
8956
+ if (end.index >= token.end) return [start, end.index + 1];
8957
+ start = end.index + 1;
8958
+ }
8959
+ return [start, line2.length];
8960
+ }
8961
+ function isAgentContext(line2, token, nearestHeading) {
8952
8962
  let blanked = "";
8953
8963
  let cursor = 0;
8954
8964
  for (const span of boldNameSpans(line2)) {
@@ -8956,7 +8966,8 @@ function isAgentContext(line2, nearestHeading) {
8956
8966
  cursor = span.end;
8957
8967
  }
8958
8968
  blanked += line2.slice(cursor);
8959
- return AGENT_WORD.test(blanked) || AGENT_WORD.test(nearestHeading);
8969
+ const [start, end] = sentenceAround(line2, token);
8970
+ return AGENT_WORD.test(blanked.slice(start, end)) || AGENT_WORD.test(nearestHeading);
8960
8971
  }
8961
8972
  function extractNameReferences(lines, { knownNames = /* @__PURE__ */ new Set() } = {}) {
8962
8973
  const out = [];
@@ -8970,16 +8981,17 @@ function extractNameReferences(lines, { knownNames = /* @__PURE__ */ new Set() }
8970
8981
  const itemBody = listMatch?.[2]?.replace(LIST_LABEL, "");
8971
8982
  const itemBodyStart = itemBody === void 0 ? -1 : line2.length - itemBody.length;
8972
8983
  const underItemsHeading = ITEMS_HEADING.test(nearestHeading);
8973
- const looseContext = isAgentContext(line2, nearestHeading);
8984
+ const looseContext = (span) => KEBAB_NAME.test(span.text) && isAgentContext(line2, span, nearestHeading);
8974
8985
  for (const run of groupRuns(line2, boldNameSpans(line2))) {
8975
8986
  const before = line2.slice(0, run[0].start);
8976
8987
  const after = line2.slice(run.at(-1).end);
8977
- const positional = KEYWORD_BEFORE.test(before) || ROUTER_BEFORE.test(before) || KEYWORD_AFTER.test(after) || // Two co-listed installed items make the run an item list. One is not enough:
8988
+ const classifier = ARTICLE_BEFORE.test(before);
8989
+ const positional = KEYWORD_BEFORE.test(before) || ROUTER_BEFORE.test(before) || !classifier && KEYWORD_AFTER.test(after) || // Two co-listed installed items make the run an item list. One is not enough:
8978
8990
  // package names share basenames with skills.
8979
8991
  run.filter((span) => knownNames.has(span.text)).length >= 2 || underItemsHeading && run[0].start === itemBodyStart;
8980
8992
  for (const span of run) {
8981
8993
  if (inCodeSpan(span.start)) continue;
8982
- if (!positional && !(KEBAB_NAME.test(span.text) && looseContext)) continue;
8994
+ if (!positional && (classifier || !looseContext(span))) continue;
8983
8995
  out.push({ line: lineNumber, name: span.text, kind: "bold" });
8984
8996
  }
8985
8997
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "6.9.0",
2
+ "version": "6.10.0",
3
3
  "manifestFormat": 2,
4
4
  "globalPlugins": [
5
5
  {
@@ -40,7 +40,9 @@
40
40
  "haus.mattpocock-domain-modeling",
41
41
  "haus.mattpocock-grill-with-docs",
42
42
  "haus.mattpocock-research",
43
- "haus.mattpocock-handoff"
43
+ "haus.mattpocock-handoff",
44
+ "haus.mattpocock-retro",
45
+ "haus.mattpocock-writing-for-agents"
44
46
  ]
45
47
  },
46
48
  "keepIds": ["haus.currents-dev-playwright-best-practices"]
@@ -49,7 +51,7 @@
49
51
  "items": [
50
52
  {
51
53
  "id": "haus.agentic-workflow-standard",
52
- "version": "2.1.0",
54
+ "version": "2.2.1",
53
55
  "source": "haus",
54
56
  "type": "template",
55
57
  "path": "templates/agentic-workflow-standard.md",
@@ -60,7 +62,7 @@
60
62
  "tags": ["workflow", "baseline", "project-instructions"],
61
63
  "repoRoles": [],
62
64
  "installMode": "copy-selected",
63
- "tokenEstimate": 3189,
65
+ "tokenEstimate": 3434,
64
66
  "tokenBudget": 5131,
65
67
  "default": true,
66
68
  "reviewStatus": "approved",
@@ -1656,7 +1658,7 @@
1656
1658
  },
1657
1659
  {
1658
1660
  "id": "haus.adr-decisions",
1659
- "version": "1.1.0",
1661
+ "version": "1.2.0",
1660
1662
  "source": "haus",
1661
1663
  "type": "skill",
1662
1664
  "path": "skills/haus-owned/general/adr-decisions",
@@ -1668,7 +1670,7 @@
1668
1670
  "repoRoles": [],
1669
1671
  "ecosystem": "general",
1670
1672
  "installMode": "copy-selected",
1671
- "tokenEstimate": 863,
1673
+ "tokenEstimate": 924,
1672
1674
  "tokenBudget": 1122,
1673
1675
  "default": true,
1674
1676
  "reviewStatus": "approved",
@@ -1676,7 +1678,7 @@
1676
1678
  },
1677
1679
  {
1678
1680
  "id": "haus.issue-authoring",
1679
- "version": "1.3.0",
1681
+ "version": "1.4.1",
1680
1682
  "source": "haus",
1681
1683
  "type": "skill",
1682
1684
  "path": "skills/haus-owned/general/issue-authoring",
@@ -1688,7 +1690,7 @@
1688
1690
  "repoRoles": [],
1689
1691
  "ecosystem": "general",
1690
1692
  "installMode": "copy-selected",
1691
- "tokenEstimate": 2284,
1693
+ "tokenEstimate": 2590,
1692
1694
  "tokenBudget": 2970,
1693
1695
  "default": true,
1694
1696
  "reviewStatus": "approved",
@@ -1725,7 +1727,7 @@
1725
1727
  },
1726
1728
  {
1727
1729
  "id": "haus.issue-creator",
1728
- "version": "1.2.0",
1730
+ "version": "1.3.0",
1729
1731
  "source": "haus",
1730
1732
  "type": "agent",
1731
1733
  "path": "agents/haus-owned/issue-creator.md",
@@ -1737,7 +1739,7 @@
1737
1739
  "repoRoles": [],
1738
1740
  "ecosystem": "general",
1739
1741
  "installMode": "copy-selected",
1740
- "tokenEstimate": 749,
1742
+ "tokenEstimate": 797,
1741
1743
  "tokenBudget": 974,
1742
1744
  "default": true,
1743
1745
  "reviewStatus": "approved",
@@ -5564,14 +5566,14 @@
5564
5566
  },
5565
5567
  {
5566
5568
  "id": "haus.mattpocock-grill-with-docs",
5567
- "version": "1.0.0",
5569
+ "version": "1.0.1",
5568
5570
  "source": "curated",
5569
5571
  "type": "skill",
5570
5572
  "path": "sources/mattpocock/skills/engineering/grill-with-docs",
5571
5573
  "title": "Mattpocock Grill With Docs",
5572
5574
  "purpose": "A relentless interview to sharpen a plan or design, which also creates docs (ADR's and glossary) as we go.",
5573
5575
  "whenToUse": "A relentless interview to sharpen a plan or design, which also creates docs (ADR's and glossary) as we go.",
5574
- "whenNotToUse": "Not for a customer request that is to be specced: the request flow never asks questions back. Run it on a branch or worktree, because it writes files. One session: split larger work first.",
5576
+ "whenNotToUse": "Not for a customer request that is to be specced: the request flow never asks questions back. Run it on a branch (a worktree only from a clean, committed state), because it writes files. One session: split larger work first.",
5575
5577
  "tags": ["workflow"],
5576
5578
  "repoRoles": [],
5577
5579
  "tokenEstimate": 62,
@@ -5660,6 +5662,72 @@
5660
5662
  "role": "handoff-workflow"
5661
5663
  }
5662
5664
  ]
5665
+ },
5666
+ {
5667
+ "id": "haus.mattpocock-retro",
5668
+ "version": "1.0.0",
5669
+ "source": "curated",
5670
+ "type": "skill",
5671
+ "path": "sources/mattpocock/skills/engineering/retro",
5672
+ "title": "Mattpocock Retro",
5673
+ "purpose": "Conduct a retrospective on a coding session.",
5674
+ "whenToUse": "Conduct a retrospective on a coding session.",
5675
+ "whenNotToUse": "Not for a verdict on the code a session produced. A candidate about haus-shipped content is filed upstream, never hand-edited. Only the candidates you pick are filed.",
5676
+ "tags": ["workflow"],
5677
+ "repoRoles": [],
5678
+ "tokenEstimate": 1093,
5679
+ "tokenBudget": 1421,
5680
+ "installMode": "copy-selected",
5681
+ "default": false,
5682
+ "reviewStatus": "approved",
5683
+ "riskLevel": "low",
5684
+ "useMode": "copy",
5685
+ "license": "MIT",
5686
+ "licenseConfidence": "high",
5687
+ "originSourceId": "mattpocock-skills",
5688
+ "originUrl": "https://github.com/mattpocock/skills/blob/4588b32ecab9ecc9fc8cc6b6c5e7d675b6004b0d/skills/engineering/retro/SKILL.md",
5689
+ "pinnedRef": "4588b32ecab9ecc9fc8cc6b6c5e7d675b6004b0d",
5690
+ "ecosystem": "general",
5691
+ "optInTier": "workflow",
5692
+ "optInGroup": "Session retrospective",
5693
+ "requiresAny": [
5694
+ {
5695
+ "role": "retro-workflow"
5696
+ }
5697
+ ]
5698
+ },
5699
+ {
5700
+ "id": "haus.mattpocock-writing-for-agents",
5701
+ "version": "1.0.0",
5702
+ "source": "curated",
5703
+ "type": "skill",
5704
+ "path": "sources/mattpocock/skills/productivity/writing-for-agents",
5705
+ "title": "Mattpocock Writing For Agents",
5706
+ "purpose": "Writing documents for agents. Use when creating or editing skills, or modifying AGENTS.md or CLAUDE.md.",
5707
+ "whenToUse": "Writing documents for agents. Use when creating or editing skills, or modifying AGENTS.md or CLAUDE.md.",
5708
+ "whenNotToUse": "Not for generating or refreshing project docs or the CLAUDE.md body: the writing-documentation skill owns that. Not for testing a skill before shipping: the superpowers writing-skills skill does that. Never on haus-managed files and blocks, which change only through the catalog and haus apply.",
5709
+ "tags": ["workflow"],
5710
+ "repoRoles": [],
5711
+ "tokenEstimate": 2722,
5712
+ "tokenBudget": 3539,
5713
+ "installMode": "copy-selected",
5714
+ "default": false,
5715
+ "reviewStatus": "approved",
5716
+ "riskLevel": "low",
5717
+ "useMode": "copy",
5718
+ "license": "MIT",
5719
+ "licenseConfidence": "high",
5720
+ "originSourceId": "mattpocock-skills",
5721
+ "originUrl": "https://github.com/mattpocock/skills/blob/4588b32ecab9ecc9fc8cc6b6c5e7d675b6004b0d/skills/productivity/writing-for-agents/SKILL.md",
5722
+ "pinnedRef": "4588b32ecab9ecc9fc8cc6b6c5e7d675b6004b0d",
5723
+ "ecosystem": "general",
5724
+ "optInTier": "workflow",
5725
+ "optInGroup": "Session retrospective",
5726
+ "requiresAny": [
5727
+ {
5728
+ "role": "retro-workflow"
5729
+ }
5730
+ ]
5663
5731
  }
5664
5732
  ]
5665
5733
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haus-tech/haus-workflow",
3
- "version": "5.11.0",
3
+ "version": "5.12.0",
4
4
  "description": "Haus AI workflow CLI for Claude Code.",
5
5
  "type": "module",
6
6
  "bin": {