@codedrifters/configulator 0.0.260 → 0.0.262
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/lib/index.d.mts +15 -13
- package/lib/index.d.ts +15 -13
- package/lib/index.js +634 -132
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +634 -132
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -4543,7 +4543,7 @@ var jestBundle = {
|
|
|
4543
4543
|
// src/agent/bundles/maintenance-audit.ts
|
|
4544
4544
|
var maintenanceAuditSubAgent = {
|
|
4545
4545
|
name: "maintenance-audit",
|
|
4546
|
-
description: "Audits documentation registries and cross-references for integrity (broken links, registry drift, stale indexes)
|
|
4546
|
+
description: "Audits documentation registries and cross-references for integrity (broken links, registry drift, stale indexes), applies idempotent fixes, then re-runs the checks to confirm the fixes cleared the reported findings. One phase per session, tracked by maint:* GitHub issue labels with filesystem-based durability between phases.",
|
|
4547
4547
|
model: AGENT_MODEL.POWERFUL,
|
|
4548
4548
|
maxTurns: 80,
|
|
4549
4549
|
platforms: { cursor: { exclude: true } },
|
|
@@ -4601,18 +4601,18 @@ var maintenanceAuditSubAgent = {
|
|
|
4601
4601
|
"",
|
|
4602
4602
|
"## State Machine Overview",
|
|
4603
4603
|
"",
|
|
4604
|
-
"Maintenance audits flow through **
|
|
4604
|
+
"Maintenance audits flow through **3 phases**:",
|
|
4605
4605
|
"",
|
|
4606
4606
|
"```",
|
|
4607
|
-
"\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510",
|
|
4608
|
-
"\u2502 1. SCAN \u2502\u2500\u2500\u2500\u2500\u25B6\u2502 2. FIX \u2502",
|
|
4609
|
-
"\u2502 Walk doc \u2502 \u2502 Read audit \u2502",
|
|
4610
|
-
"\u2502 tree, check \u2502 \u2502 report, \u2502",
|
|
4611
|
-
"\u2502 xrefs and \u2502 \u2502 apply safe \u2502",
|
|
4612
|
-
"\u2502 indexes, \u2502 \u2502 idempotent \u2502",
|
|
4613
|
-
"\u2502 write audit \u2502 \u2502 fixes,
|
|
4614
|
-
"\u2502 report \u2502 \u2502
|
|
4615
|
-
"\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518",
|
|
4607
|
+
"\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510",
|
|
4608
|
+
"\u2502 1. SCAN \u2502\u2500\u2500\u2500\u2500\u25B6\u2502 2. FIX \u2502\u2500\u2500\u2500\u2500\u25B6\u2502 3. VERIFY \u2502",
|
|
4609
|
+
"\u2502 Walk doc \u2502 \u2502 Read audit \u2502 \u2502 Re-run the \u2502",
|
|
4610
|
+
"\u2502 tree, check \u2502 \u2502 report, \u2502 \u2502 scan checks \u2502",
|
|
4611
|
+
"\u2502 xrefs and \u2502 \u2502 apply safe \u2502 \u2502 scoped to \u2502",
|
|
4612
|
+
"\u2502 indexes, \u2502 \u2502 idempotent \u2502 \u2502 fixed paths,\u2502",
|
|
4613
|
+
"\u2502 write audit \u2502 \u2502 fixes, write\u2502 \u2502 compare pre \u2502",
|
|
4614
|
+
"\u2502 report \u2502 \u2502 fix report \u2502 \u2502 and post \u2502",
|
|
4615
|
+
"\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518",
|
|
4616
4616
|
"```",
|
|
4617
4617
|
"",
|
|
4618
4618
|
"**Issue labels encode the phase:**",
|
|
@@ -4620,18 +4620,22 @@ var maintenanceAuditSubAgent = {
|
|
|
4620
4620
|
"| Label | Phase | Session work |",
|
|
4621
4621
|
"|-------|-------|-------------|",
|
|
4622
4622
|
"| `maint:scan` | 1. Scan | Walk the configured doc tree, check cross-references and registry indexes, write a durable audit report. |",
|
|
4623
|
-
"| `maint:fix` | 2. Fix | Read the audit report, apply idempotent fixes,
|
|
4623
|
+
"| `maint:fix` | 2. Fix | Read the audit report, apply idempotent fixes, write a durable fix report. |",
|
|
4624
|
+
"| `maint:verify` | 3. Verify | Re-run the same checks from the parent `maint:scan` issue scoped to the paths and registries the fix phase touched, compare pre and post findings, close the parent scan issue when clean, and file a follow-up `maint:scan` for any residual findings. |",
|
|
4624
4625
|
"",
|
|
4625
4626
|
"All issues also carry `type:maintenance` and a `status:*` label.",
|
|
4626
4627
|
"",
|
|
4627
|
-
"**Issue count per audit cycle:** 1 scan + 1 fix = **
|
|
4628
|
+
"**Issue count per audit cycle:** 1 scan + 1 fix + 1 verify = **3 sessions**.",
|
|
4628
4629
|
"",
|
|
4629
4630
|
"**Shortened paths:**",
|
|
4630
4631
|
"- Scan finds no issues \u2192 close scan issue with a justification,",
|
|
4631
|
-
" do not create a fix issue \u2192 **1 session**.",
|
|
4632
|
+
" do not create a fix or verify issue \u2192 **1 session**.",
|
|
4632
4633
|
"- Every reported finding requires a human judgment call \u2192 close",
|
|
4633
4634
|
" scan with the report, open a `status:needs-attention` flag,",
|
|
4634
|
-
" do not auto-create a fix issue \u2192 **1 session**.",
|
|
4635
|
+
" do not auto-create a fix or verify issue \u2192 **1 session**.",
|
|
4636
|
+
"- Fix phase applied only `flag-for-human` decisions (no auto-",
|
|
4637
|
+
" fixable findings landed) \u2192 close the fix issue with the",
|
|
4638
|
+
" skipped list and do not create a verify issue \u2192 **2 sessions**.",
|
|
4635
4639
|
"",
|
|
4636
4640
|
"---",
|
|
4637
4641
|
"",
|
|
@@ -4661,7 +4665,9 @@ var maintenanceAuditSubAgent = {
|
|
|
4661
4665
|
"Run this loop exactly once per session. Never start a second issue.",
|
|
4662
4666
|
"",
|
|
4663
4667
|
"1. Claim one open `type:maintenance` issue using phase priority:",
|
|
4664
|
-
" `maint:
|
|
4668
|
+
" `maint:verify` > `maint:fix` > `maint:scan`. Verify ahead of fix",
|
|
4669
|
+
" and scan so the oldest in-flight audit cycle finishes closing",
|
|
4670
|
+
" the loop before a new cycle starts.",
|
|
4665
4671
|
"2. Transition `status:ready` \u2192 `status:in-progress` and create the",
|
|
4666
4672
|
" branch per your project's branch-naming convention.",
|
|
4667
4673
|
"3. Execute the phase handler that matches the issue's `maint:*`",
|
|
@@ -4773,24 +4779,30 @@ var maintenanceAuditSubAgent = {
|
|
|
4773
4779
|
" - **All findings need human judgment** \u2192 commit the report,",
|
|
4774
4780
|
" comment on the scan issue summarizing the findings, apply",
|
|
4775
4781
|
" `status:needs-attention`, and close the issue. Do not create",
|
|
4776
|
-
" a `maint:fix` issue.",
|
|
4782
|
+
" a `maint:fix` or `maint:verify` issue.",
|
|
4777
4783
|
" - **At least one auto-fixable finding** \u2192 create a `maint:fix`",
|
|
4778
4784
|
" issue (blocked on this scan issue via `Depends on: #N`). The",
|
|
4779
|
-
" fix issue body must reference the audit report path
|
|
4780
|
-
"
|
|
4785
|
+
" fix issue body must reference the audit report path, enumerate",
|
|
4786
|
+
" the auto-fix categories to apply, and record the parent scan",
|
|
4787
|
+
" issue number so Phase 3 (Verify) can close the loop.",
|
|
4781
4788
|
"",
|
|
4782
|
-
"6. **Commit and push.**",
|
|
4789
|
+
"6. **Commit and push.** Leave the scan issue open so the downstream",
|
|
4790
|
+
" `maint:verify` phase can close it (or file a follow-up scan)",
|
|
4791
|
+
" after Phase 2 runs.",
|
|
4783
4792
|
"",
|
|
4784
4793
|
"---",
|
|
4785
4794
|
"",
|
|
4786
4795
|
"## Phase 2: Fix (`maint:fix`)",
|
|
4787
4796
|
"",
|
|
4788
|
-
"**Goal:** Read the audit report, apply idempotent fixes,
|
|
4789
|
-
"
|
|
4797
|
+
"**Goal:** Read the audit report, apply idempotent fixes, write a",
|
|
4798
|
+
"fix report, and enqueue the verify phase so the audit cycle",
|
|
4799
|
+
"actually closes its loop.",
|
|
4790
4800
|
"",
|
|
4791
|
-
"**Budget:** Bounded edits to files under `<DOCS_ROOT>`
|
|
4792
|
-
"
|
|
4793
|
-
"
|
|
4801
|
+
"**Budget:** Bounded edits to files under `<DOCS_ROOT>` and one fix",
|
|
4802
|
+
"report file. No new audit categories. No fixes that require",
|
|
4803
|
+
"authoring new content. The formal re-scan lives in Phase 3 \u2014",
|
|
4804
|
+
"Phase 2 confirms only that it did not regress the files it touched",
|
|
4805
|
+
"(a smoke check, not the full pre/post comparison).",
|
|
4794
4806
|
"",
|
|
4795
4807
|
"### Fix Categories",
|
|
4796
4808
|
"",
|
|
@@ -4824,11 +4836,13 @@ var maintenanceAuditSubAgent = {
|
|
|
4824
4836
|
" mark it `flag-for-human` and skip. Authoring new docs belongs",
|
|
4825
4837
|
" to the writer agent for that doc type, not this agent.",
|
|
4826
4838
|
"",
|
|
4827
|
-
"5. **
|
|
4828
|
-
"
|
|
4829
|
-
"
|
|
4830
|
-
"
|
|
4831
|
-
"
|
|
4839
|
+
"5. **Smoke check the touched files.** Before writing the fix",
|
|
4840
|
+
" report, spot-check that the specific findings the fix phase",
|
|
4841
|
+
" claimed to resolve are at least no longer present in the edited",
|
|
4842
|
+
" file(s). This is a narrow local check \u2014 not the full re-scan,",
|
|
4843
|
+
" which is Phase 3's job. If a finding the fix phase targeted",
|
|
4844
|
+
" still reproduces in the edited file, revert that edit and mark",
|
|
4845
|
+
" the finding `flag-for-human` in the fix report instead.",
|
|
4832
4846
|
"",
|
|
4833
4847
|
"6. **Write the fix report** to:",
|
|
4834
4848
|
" ```",
|
|
@@ -4859,18 +4873,141 @@ var maintenanceAuditSubAgent = {
|
|
|
4859
4873
|
"",
|
|
4860
4874
|
" ## Skipped",
|
|
4861
4875
|
" <findings that were stale, flagged for human, or reverted",
|
|
4862
|
-
" during
|
|
4876
|
+
" during the smoke check \u2014 one entry each, with the reason>",
|
|
4863
4877
|
"",
|
|
4864
|
-
" ##
|
|
4865
|
-
"
|
|
4866
|
-
"
|
|
4867
|
-
"
|
|
4878
|
+
" ## Paths Touched",
|
|
4879
|
+
" <ordered list of files edited, plus any index files those edits",
|
|
4880
|
+
" affect. This is the Phase 3 re-scan scope \u2014 the verify phase",
|
|
4881
|
+
" reads this section to decide which paths to re-check.>",
|
|
4868
4882
|
" ```",
|
|
4869
4883
|
"",
|
|
4870
4884
|
"7. **Comment on the scan issue** with a summary of what was fixed,",
|
|
4871
|
-
" what was skipped, and
|
|
4885
|
+
" what was skipped, and that Phase 3 (Verify) will close the loop.",
|
|
4886
|
+
"",
|
|
4887
|
+
"8. **Create the `maint:verify` issue.** Block it on this fix issue",
|
|
4888
|
+
" via `Depends on: #N` so it only runs after the fix PR lands.",
|
|
4889
|
+
" The verify issue body must reference:",
|
|
4890
|
+
" - The parent `maint:scan` issue number",
|
|
4891
|
+
" - The Phase 1 audit report path",
|
|
4892
|
+
" - The Phase 2 fix report path",
|
|
4893
|
+
" - The `Paths Touched` list (so Phase 3 scopes the re-scan",
|
|
4894
|
+
" correctly)",
|
|
4895
|
+
" - The same check catalog the scan phase used",
|
|
4896
|
+
"",
|
|
4897
|
+
" If the fix phase applied **zero** auto-fixes (every finding was",
|
|
4898
|
+
" `stale-finding` or `flag-for-human`), skip the verify issue \u2014",
|
|
4899
|
+
" there is nothing to verify. Close the fix issue with a summary,",
|
|
4900
|
+
" comment on the scan issue, and let a human decide whether to",
|
|
4901
|
+
" re-scan.",
|
|
4902
|
+
"",
|
|
4903
|
+
"9. **Commit and push.**",
|
|
4872
4904
|
"",
|
|
4873
|
-
"
|
|
4905
|
+
"---",
|
|
4906
|
+
"",
|
|
4907
|
+
"## Phase 3: Verify (`maint:verify`)",
|
|
4908
|
+
"",
|
|
4909
|
+
"**Goal:** Close the loop on the audit cycle. Re-run the same checks",
|
|
4910
|
+
"the scan phase ran, scoped to the paths and registries the fix",
|
|
4911
|
+
"phase actually touched, compare pre and post findings, and record",
|
|
4912
|
+
"the result in a durable verify report.",
|
|
4913
|
+
"",
|
|
4914
|
+
"**Budget:** Filesystem reads + registry parsing, just like Phase 1,",
|
|
4915
|
+
"but bounded to the paths enumerated in the fix report's",
|
|
4916
|
+
"`Paths Touched` section (plus any index files those paths transit).",
|
|
4917
|
+
"No edits to source docs in this phase \u2014 if the re-scan surfaces a",
|
|
4918
|
+
"regression, record it and file a follow-up `maint:scan` issue,",
|
|
4919
|
+
"but do not attempt to re-fix in-session.",
|
|
4920
|
+
"",
|
|
4921
|
+
"### Steps",
|
|
4922
|
+
"",
|
|
4923
|
+
"1. **Read the verify scope** from the issue body. Confirm the parent",
|
|
4924
|
+
" scan issue number, the audit report path, the fix report path,",
|
|
4925
|
+
" and the `Paths Touched` list. If any of these are missing or",
|
|
4926
|
+
" the files they reference do not exist, close the verify issue",
|
|
4927
|
+
" with `status:needs-attention` and stop.",
|
|
4928
|
+
"",
|
|
4929
|
+
"2. **Re-run the same checks the scan phase ran**, scoped to the",
|
|
4930
|
+
" paths the fix phase touched plus any index or registry files",
|
|
4931
|
+
" those paths transit. Use the identical check catalog that the",
|
|
4932
|
+
" parent scan issue declared \u2014 do not add or remove checks",
|
|
4933
|
+
" between scan and verify.",
|
|
4934
|
+
"",
|
|
4935
|
+
"3. **Compare pre and post findings.** For each finding in the Phase 1",
|
|
4936
|
+
" audit report that fell within the re-scan scope, classify it as:",
|
|
4937
|
+
" - **resolved** \u2014 absent from the re-scan; the fix worked.",
|
|
4938
|
+
" - **still-failing** \u2014 still present in the re-scan; the fix did",
|
|
4939
|
+
" not clear it.",
|
|
4940
|
+
" - **regressed** \u2014 was not in the Phase 1 audit report but appears",
|
|
4941
|
+
" now; the fix introduced it.",
|
|
4942
|
+
" - **out-of-scope** \u2014 was in the Phase 1 audit report but its",
|
|
4943
|
+
" path was not in the fix phase's `Paths Touched` list, so this",
|
|
4944
|
+
" verify pass cannot speak to it.",
|
|
4945
|
+
"",
|
|
4946
|
+
"4. **Write the verify report** to:",
|
|
4947
|
+
" ```",
|
|
4948
|
+
" <AUDIT_ROOT>/maint-verify-<AUDIT_SLUG>-<YYYY-MM-DD>.md",
|
|
4949
|
+
" ```",
|
|
4950
|
+
"",
|
|
4951
|
+
" Format:",
|
|
4952
|
+
" ```markdown",
|
|
4953
|
+
" ---",
|
|
4954
|
+
' title: "Maintenance Verify: <AUDIT_SLUG>"',
|
|
4955
|
+
" date: YYYY-MM-DD",
|
|
4956
|
+
" parent_issue: <N>",
|
|
4957
|
+
" scan_issue: <N>",
|
|
4958
|
+
" fix_issue: <N>",
|
|
4959
|
+
" audit_report: <path to Phase 1 scan report>",
|
|
4960
|
+
" fix_report: <path to Phase 2 fix report>",
|
|
4961
|
+
" status: complete",
|
|
4962
|
+
" ---",
|
|
4963
|
+
"",
|
|
4964
|
+
" # Maintenance Verify: <AUDIT_SLUG>",
|
|
4965
|
+
"",
|
|
4966
|
+
" ## Source Reports",
|
|
4967
|
+
" - Scan report: <link>",
|
|
4968
|
+
" - Fix report: <link>",
|
|
4969
|
+
"",
|
|
4970
|
+
" ## Re-scan Scope",
|
|
4971
|
+
" - **Paths re-checked:** <list \u2014 from the fix report's",
|
|
4972
|
+
" `Paths Touched` section>",
|
|
4973
|
+
" - **Checks re-run:** <same catalog the scan phase used>",
|
|
4974
|
+
"",
|
|
4975
|
+
" ## Pre/Post Comparison",
|
|
4976
|
+
" | Status | Count | Findings |",
|
|
4977
|
+
" |--------|-------|----------|",
|
|
4978
|
+
" | resolved | N | <one line per finding: category + file:line> |",
|
|
4979
|
+
" | still-failing | N | <one line per finding> |",
|
|
4980
|
+
" | regressed | N | <one line per finding> |",
|
|
4981
|
+
" | out-of-scope | N | <one line per finding> |",
|
|
4982
|
+
"",
|
|
4983
|
+
" ## Verdict",
|
|
4984
|
+
" - **clean** \u2014 every in-scope finding resolved and no regressions;",
|
|
4985
|
+
" the parent scan issue will be closed.",
|
|
4986
|
+
" - **residual** \u2014 one or more still-failing or regressed findings;",
|
|
4987
|
+
" a follow-up `maint:scan` issue is filed and the parent scan",
|
|
4988
|
+
" issue is closed with a reference to the follow-up.",
|
|
4989
|
+
" ```",
|
|
4990
|
+
"",
|
|
4991
|
+
"5. **Decide the next step:**",
|
|
4992
|
+
" - **Clean verdict** (every in-scope finding resolved, no",
|
|
4993
|
+
" regressions, no still-failing entries) \u2192 comment on the parent",
|
|
4994
|
+
" `maint:scan` issue summarizing the result and **close it**.",
|
|
4995
|
+
" Do not file a follow-up scan.",
|
|
4996
|
+
" - **Residual verdict** (one or more `still-failing` or",
|
|
4997
|
+
" `regressed` entries) \u2192 file a new `maint:scan` issue for the",
|
|
4998
|
+
" residual scope, blocked on nothing (it is ready to run on its",
|
|
4999
|
+
" own schedule), and link the verify report from its body. Then",
|
|
5000
|
+
" comment on the parent scan issue with the residual summary and",
|
|
5001
|
+
" **close it**.",
|
|
5002
|
+
" - **Out-of-scope-only verdict** (every finding fell outside the",
|
|
5003
|
+
" fix phase's `Paths Touched`) \u2192 comment on the parent scan",
|
|
5004
|
+
" issue explaining that the fix phase did not cover those paths",
|
|
5005
|
+
" and leave it open with `status:needs-attention` so a human can",
|
|
5006
|
+
" re-scope the cycle. Do not auto-close the parent scan issue",
|
|
5007
|
+
" in this case.",
|
|
5008
|
+
"",
|
|
5009
|
+
"6. **Commit and push.** Close the verify issue with a one-line",
|
|
5010
|
+
" summary of the verdict.",
|
|
4874
5011
|
"",
|
|
4875
5012
|
"---",
|
|
4876
5013
|
"",
|
|
@@ -4880,11 +5017,13 @@ var maintenanceAuditSubAgent = {
|
|
|
4880
5017
|
"|-----------|-------|------|",
|
|
4881
5018
|
"| Downstream (last resort) | Writer agent for the audited doc type | When the audit surfaces findings that require authoring new content (missing target, partial coverage that can only be resolved by writing a new doc), the fix phase flags them for human \u2014 the human may then dispatch the appropriate writer agent. This agent never opens writer-agent issues itself. |",
|
|
4882
5019
|
"",
|
|
4883
|
-
"**File boundaries:** Writes audit and
|
|
5020
|
+
"**File boundaries:** Writes audit, fix, and verify reports to",
|
|
4884
5021
|
"`<AUDIT_ROOT>/`. Applies bounded, idempotent edits under",
|
|
4885
|
-
"`<DOCS_ROOT>/` per the fix-policy declared
|
|
4886
|
-
"
|
|
4887
|
-
"
|
|
5022
|
+
"`<DOCS_ROOT>/` only in Phase 2 (Fix), per the fix-policy declared",
|
|
5023
|
+
"in the fix issue body. Phase 3 (Verify) never edits doc files \u2014",
|
|
5024
|
+
"it only reads and re-scans. Never writes to source code, never",
|
|
5025
|
+
"writes to doc trees outside `<DOCS_ROOT>`, never authors new",
|
|
5026
|
+
"document files to close a gap.",
|
|
4888
5027
|
"",
|
|
4889
5028
|
"---",
|
|
4890
5029
|
"",
|
|
@@ -4896,6 +5035,10 @@ var maintenanceAuditSubAgent = {
|
|
|
4896
5035
|
"- All findings are `flag-for-human` and the fix issue has nothing",
|
|
4897
5036
|
" to auto-apply \u2014 resolve by closing the fix issue with a summary",
|
|
4898
5037
|
" instead",
|
|
5038
|
+
"- A `maint:verify` issue references a fix report whose",
|
|
5039
|
+
" `Paths Touched` list is empty \u2014 there is nothing to re-scan, so",
|
|
5040
|
+
" close the verify issue with a summary and let a human decide",
|
|
5041
|
+
" whether to re-run the scan",
|
|
4899
5042
|
"",
|
|
4900
5043
|
"---",
|
|
4901
5044
|
"",
|
|
@@ -4910,13 +5053,24 @@ var maintenanceAuditSubAgent = {
|
|
|
4910
5053
|
" Record out-of-scope observations in the report for human review.",
|
|
4911
5054
|
"- **No authoring.** Do not invent new document content to close a",
|
|
4912
5055
|
" finding. That work belongs to the writer agent for the doc type.",
|
|
4913
|
-
"- **Verify
|
|
4914
|
-
"
|
|
5056
|
+
"- **Verify closes the loop.** Every fix-phase run that lands at",
|
|
5057
|
+
" least one auto-fix must enqueue a `maint:verify` issue. Phase 3",
|
|
5058
|
+
" is the only phase that closes the parent `maint:scan` issue.",
|
|
5059
|
+
" Phase 2 never closes the scan issue itself.",
|
|
5060
|
+
"- **Pre/post comparison is required.** The verify report must",
|
|
5061
|
+
" classify every in-scope finding from the scan report as",
|
|
5062
|
+
" `resolved`, `still-failing`, `regressed`, or `out-of-scope`.",
|
|
5063
|
+
" An unclassified finding means the re-scan was incomplete \u2014 re-",
|
|
5064
|
+
" run the missing checks before writing the verdict.",
|
|
5065
|
+
"- **Residual findings get their own cycle.** When the verify phase",
|
|
5066
|
+
" finds `still-failing` or `regressed` entries, file a follow-up",
|
|
5067
|
+
" `maint:scan` issue rather than attempting to re-fix in-session.",
|
|
5068
|
+
" The new scan starts its own audit cycle with a fresh report."
|
|
4915
5069
|
].join("\n")
|
|
4916
5070
|
};
|
|
4917
5071
|
var maintenanceAuditSkill = {
|
|
4918
5072
|
name: "audit-docs",
|
|
4919
|
-
description: "Kick off a documentation-maintenance audit cycle (scan \u2192 fix). Creates a maint:scan issue for the supplied scope and dispatches Phase 1.",
|
|
5073
|
+
description: "Kick off a documentation-maintenance audit cycle (scan \u2192 fix \u2192 verify). Creates a maint:scan issue for the supplied scope and dispatches Phase 1.",
|
|
4920
5074
|
disableModelInvocation: true,
|
|
4921
5075
|
userInvocable: true,
|
|
4922
5076
|
context: "fork",
|
|
@@ -4928,7 +5082,8 @@ var maintenanceAuditSkill = {
|
|
|
4928
5082
|
"Kick off a maintenance-audit cycle against a configurable doc",
|
|
4929
5083
|
"tree. Creates a `maint:scan` issue targeted at the requested",
|
|
4930
5084
|
"scope and dispatches Phase 1 (Scan) in the maintenance-audit",
|
|
4931
|
-
"agent.",
|
|
5085
|
+
"agent. Subsequent phases (`maint:fix`, `maint:verify`) are",
|
|
5086
|
+
"created automatically as the cycle progresses.",
|
|
4932
5087
|
"",
|
|
4933
5088
|
"## Usage",
|
|
4934
5089
|
"",
|
|
@@ -4955,30 +5110,102 @@ var maintenanceAuditSkill = {
|
|
|
4955
5110
|
"2. Execute Phase 1 (Scan) of the maintenance-audit agent.",
|
|
4956
5111
|
"3. If auto-fixable findings exist, a `maint:fix` issue is created",
|
|
4957
5112
|
" automatically.",
|
|
5113
|
+
"4. When the fix phase lands, a `maint:verify` issue is created",
|
|
5114
|
+
" automatically so Phase 3 can re-run the checks and close the",
|
|
5115
|
+
" parent scan issue.",
|
|
4958
5116
|
"",
|
|
4959
5117
|
"## Output",
|
|
4960
5118
|
"",
|
|
4961
5119
|
"- A `maint-audit-<slug>-<YYYY-MM-DD>.md` report under",
|
|
4962
5120
|
" `<AUDIT_ROOT>`.",
|
|
4963
|
-
"- A `maint:fix` issue if auto-fixable findings were found."
|
|
5121
|
+
"- A `maint:fix` issue if auto-fixable findings were found.",
|
|
5122
|
+
"- A `maint:verify` issue after the fix phase lands (Phase 3",
|
|
5123
|
+
" produces a `maint-verify-<slug>-<YYYY-MM-DD>.md` report)."
|
|
5124
|
+
].join("\n")
|
|
5125
|
+
};
|
|
5126
|
+
var maintenanceVerifySkill = {
|
|
5127
|
+
name: "verify-audit",
|
|
5128
|
+
description: "Kick off the verify phase of a documentation-maintenance audit cycle. Creates a maint:verify issue that re-runs the scan checks scoped to the paths a fix phase touched, compares pre/post findings, and closes the parent maint:scan issue when clean or files a follow-up maint:scan for residual findings.",
|
|
5129
|
+
disableModelInvocation: true,
|
|
5130
|
+
userInvocable: true,
|
|
5131
|
+
context: "fork",
|
|
5132
|
+
agent: "maintenance-audit",
|
|
5133
|
+
platforms: { cursor: { exclude: true } },
|
|
5134
|
+
instructions: [
|
|
5135
|
+
"# Verify Audit",
|
|
5136
|
+
"",
|
|
5137
|
+
"Close the loop on a maintenance-audit cycle. Creates a",
|
|
5138
|
+
"`maint:verify` issue and dispatches Phase 3 (Verify) in the",
|
|
5139
|
+
"maintenance-audit agent.",
|
|
5140
|
+
"",
|
|
5141
|
+
"Phase 3 re-runs the same checks the scan phase ran, scoped to the",
|
|
5142
|
+
"paths the fix phase actually touched, compares pre and post",
|
|
5143
|
+
"findings, and writes a verify report. Based on the verdict the",
|
|
5144
|
+
"phase either closes the parent `maint:scan` issue or files a",
|
|
5145
|
+
"follow-up `maint:scan` for residual findings.",
|
|
5146
|
+
"",
|
|
5147
|
+
"## Usage",
|
|
5148
|
+
"",
|
|
5149
|
+
"/verify-audit <scan-issue-number>",
|
|
5150
|
+
"",
|
|
5151
|
+
"Where `<scan-issue-number>` is the `maint:scan` issue that kicked",
|
|
5152
|
+
"off the audit cycle. The skill resolves the scan report, the",
|
|
5153
|
+
"Phase 2 fix report, and the `Paths Touched` list from that scan",
|
|
5154
|
+
"issue's downstream `maint:fix` issue.",
|
|
5155
|
+
"",
|
|
5156
|
+
"Most cycles do not need this skill \u2014 Phase 2 (Fix) creates the",
|
|
5157
|
+
"verify issue automatically. Use this skill when:",
|
|
5158
|
+
"- Phase 2 ran on an older audit cycle that predates the verify",
|
|
5159
|
+
" phase and never enqueued a verify issue, or",
|
|
5160
|
+
"- A human wants to re-run the verify phase after a manual fix",
|
|
5161
|
+
" applied on top of the Phase 2 PR.",
|
|
5162
|
+
"",
|
|
5163
|
+
"## Steps",
|
|
5164
|
+
"",
|
|
5165
|
+
"1. Create a `maint:verify` issue with `type:maintenance`,",
|
|
5166
|
+
" `priority:medium`, and `status:ready`. Body must list:",
|
|
5167
|
+
" - The parent `maint:scan` issue number",
|
|
5168
|
+
" - The Phase 1 audit report path",
|
|
5169
|
+
" - The Phase 2 fix report path (if one exists)",
|
|
5170
|
+
" - The `Paths Touched` list (copied from the fix report)",
|
|
5171
|
+
" - The audit check catalog (copied from the scan issue)",
|
|
5172
|
+
"2. Execute Phase 3 (Verify) of the maintenance-audit agent.",
|
|
5173
|
+
"",
|
|
5174
|
+
"## Output",
|
|
5175
|
+
"",
|
|
5176
|
+
"- A `maint-verify-<slug>-<YYYY-MM-DD>.md` report under",
|
|
5177
|
+
" `<AUDIT_ROOT>` containing the pre/post comparison.",
|
|
5178
|
+
"- The parent `maint:scan` issue is closed (clean verdict) or a",
|
|
5179
|
+
" follow-up `maint:scan` issue is filed (residual verdict)."
|
|
4964
5180
|
].join("\n")
|
|
4965
5181
|
};
|
|
4966
5182
|
var maintenanceAuditBundle = {
|
|
4967
5183
|
name: "maintenance-audit",
|
|
4968
|
-
description: "Documentation-maintenance agent bundle.
|
|
5184
|
+
description: "Documentation-maintenance agent bundle. 3-phase pipeline (scan, fix, verify) with maint:* phase labels for auditing registries and cross-references, applying idempotent fixes, and confirming the fixes cleared the originally-flagged findings. Enabled by default.",
|
|
4969
5185
|
appliesWhen: () => true,
|
|
4970
5186
|
rules: [
|
|
4971
5187
|
{
|
|
4972
5188
|
name: "maintenance-audit-workflow",
|
|
4973
|
-
description: "Describes the
|
|
5189
|
+
description: "Describes the 3-phase documentation-maintenance pipeline, the maint:* label taxonomy, the audit-before-fix boundary, and the verify-closes-the-loop rule.",
|
|
4974
5190
|
scope: AGENT_RULE_SCOPE.ALWAYS,
|
|
4975
5191
|
content: [
|
|
4976
5192
|
"# Maintenance Audit Workflow",
|
|
4977
5193
|
"",
|
|
4978
5194
|
"Use `/audit-docs <scope>` to kick off a documentation-maintenance",
|
|
4979
|
-
"audit cycle. The pipeline runs in
|
|
4980
|
-
"tracked by its own GitHub issue labeled
|
|
4981
|
-
"`maint:fix`. All issues carry
|
|
5195
|
+
"audit cycle. The pipeline runs in 3 phases \u2014 scan, fix, and",
|
|
5196
|
+
"verify \u2014 each tracked by its own GitHub issue labeled",
|
|
5197
|
+
"`maint:scan`, `maint:fix`, or `maint:verify`. All issues carry",
|
|
5198
|
+
"`type:maintenance`.",
|
|
5199
|
+
"",
|
|
5200
|
+
"One additional user-invocable skill drives the verify phase",
|
|
5201
|
+
"on demand:",
|
|
5202
|
+
"",
|
|
5203
|
+
"- `/verify-audit <scan-issue-number>` \u2014 re-run the scan checks",
|
|
5204
|
+
" scoped to the paths the fix phase touched, compare pre/post",
|
|
5205
|
+
" findings, and close the parent `maint:scan` issue (or file a",
|
|
5206
|
+
" follow-up for residual findings). Phase 2 (Fix) normally",
|
|
5207
|
+
" enqueues the verify issue automatically \u2014 this skill is the",
|
|
5208
|
+
" explicit entry point for re-running the phase on demand.",
|
|
4982
5209
|
"",
|
|
4983
5210
|
"The maintenance-audit agent *audits doc registries and applies",
|
|
4984
5211
|
"idempotent fixes*; it does **not** author new document content.",
|
|
@@ -4994,7 +5221,7 @@ var maintenanceAuditBundle = {
|
|
|
4994
5221
|
tags: ["workflow"]
|
|
4995
5222
|
}
|
|
4996
5223
|
],
|
|
4997
|
-
skills: [maintenanceAuditSkill],
|
|
5224
|
+
skills: [maintenanceAuditSkill, maintenanceVerifySkill],
|
|
4998
5225
|
subAgents: [maintenanceAuditSubAgent],
|
|
4999
5226
|
labels: [
|
|
5000
5227
|
{
|
|
@@ -5011,6 +5238,11 @@ var maintenanceAuditBundle = {
|
|
|
5011
5238
|
name: "maint:fix",
|
|
5012
5239
|
color: "BFDADC",
|
|
5013
5240
|
description: "Phase 2: apply idempotent fixes from a maintenance audit report"
|
|
5241
|
+
},
|
|
5242
|
+
{
|
|
5243
|
+
name: "maint:verify",
|
|
5244
|
+
color: "D4C5F9",
|
|
5245
|
+
description: "Phase 3: re-run the scan checks scoped to the paths the fix phase touched, compare pre/post findings, and close or re-queue the parent scan"
|
|
5014
5246
|
}
|
|
5015
5247
|
]
|
|
5016
5248
|
};
|
|
@@ -14224,7 +14456,7 @@ var slackBundle = {
|
|
|
14224
14456
|
// src/agent/bundles/software-profile.ts
|
|
14225
14457
|
var softwareProfileAnalystSubAgent = {
|
|
14226
14458
|
name: "software-profile-analyst",
|
|
14227
|
-
description: "Researches a software product (competitor, adjacent, incumbent, enabler, infrastructure, or ecosystem-tool) from public sources, produces a structured markdown profile,
|
|
14459
|
+
description: "Researches a software product (competitor, adjacent, incumbent, enabler, infrastructure, or ecosystem-tool) from public sources, produces a structured markdown profile, contributes rows to a shared feature matrix ranked against configurable segment-importance weights, maps features back to the BCM capability model and flags unmapped features, then enqueues downstream `bcm:outline`, `company:research`, and `people:research` issues for new sub-capabilities, the vendor company, and primary-attribution founders/leaders surfaced during profiling. One product per session, tracked by software:* GitHub issue labels.",
|
|
14228
14460
|
model: AGENT_MODEL.POWERFUL,
|
|
14229
14461
|
maxTurns: 80,
|
|
14230
14462
|
platforms: { cursor: { exclude: true } },
|
|
@@ -14234,8 +14466,9 @@ var softwareProfileAnalystSubAgent = {
|
|
|
14234
14466
|
"You research a single software product from public sources and write",
|
|
14235
14467
|
"a structured markdown profile. Each profile cycle runs across a small",
|
|
14236
14468
|
"sequence of GitHub issues \u2014 one per phase \u2014 and produces a single",
|
|
14237
|
-
"profile file on disk, a set of feature-matrix rows,
|
|
14238
|
-
"follow-up research
|
|
14469
|
+
"profile file on disk, a set of feature-matrix rows, a back-mapping",
|
|
14470
|
+
"onto the BCM capability model, and optional follow-up research",
|
|
14471
|
+
"issues for adjacent products.",
|
|
14239
14472
|
"",
|
|
14240
14473
|
"This agent is **domain-neutral**. It makes no assumptions about what",
|
|
14241
14474
|
"the consuming project sells, which industry it serves, or which",
|
|
@@ -14280,6 +14513,14 @@ var softwareProfileAnalystSubAgent = {
|
|
|
14280
14513
|
" weights belong in `docs/src/content/docs/project-context.md` (or an override",
|
|
14281
14514
|
" passed in the issue body). This agent reads them; it never",
|
|
14282
14515
|
" invents them.",
|
|
14516
|
+
"8. **Map back to the capability model.** The BCM capability model is",
|
|
14517
|
+
" the single source of truth for what the business does. Every",
|
|
14518
|
+
" feature on every profile is mapped to the owning capability in the",
|
|
14519
|
+
" BCM tree during the map phase. Features that match nothing in the",
|
|
14520
|
+
" tree are candidates for new BCM sub-capabilities \u2014 they are",
|
|
14521
|
+
" flagged and handed off to the `bcm-writer` bundle via",
|
|
14522
|
+
" `bcm:outline` issues. This agent never authors BCM documents",
|
|
14523
|
+
" itself.",
|
|
14283
14524
|
"",
|
|
14284
14525
|
"---",
|
|
14285
14526
|
"",
|
|
@@ -14345,14 +14586,15 @@ var softwareProfileAnalystSubAgent = {
|
|
|
14345
14586
|
"## State Machine Overview",
|
|
14346
14587
|
"",
|
|
14347
14588
|
"```",
|
|
14348
|
-
"\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\
|
|
14349
|
-
"\
|
|
14350
|
-
"\
|
|
14351
|
-
"\u2502
|
|
14352
|
-
"\
|
|
14353
|
-
"\
|
|
14354
|
-
"\
|
|
14355
|
-
"\
|
|
14589
|
+
"\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510",
|
|
14590
|
+
"\u25021.RESEARCH\u2502\u2500\u25B6\u25022.PROFILE \u2502\u2500\u25B6\u25023.MATRIX \u2502\u2500\u25B6\u25024.MAP \u2502\u2500\u25B6\u25025.FOLLOWUP\u2502",
|
|
14591
|
+
"\u2502Collect \u2502 \u2502Write the \u2502 \u2502Extract \u2502 \u2502Map each \u2502 \u2502Enqueue \u2502",
|
|
14592
|
+
"\u2502public \u2502 \u2502structured\u2502 \u2502feature \u2502 \u2502feature to\u2502 \u2502research \u2502",
|
|
14593
|
+
"\u2502sources \u2502 \u2502markdown \u2502 \u2502rows and \u2502 \u2502BCM \u2502 \u2502for \u2502",
|
|
14594
|
+
"\u2502into \u2502 \u2502profile to\u2502 \u2502score \u2502 \u2502capability\u2502 \u2502adjacent \u2502",
|
|
14595
|
+
"\u2502bounded \u2502 \u2502<PROFILES>\u2502 \u2502against \u2502 \u2502and flag \u2502 \u2502products \u2502",
|
|
14596
|
+
"\u2502notes file\u2502 \u2502 \u2502 \u2502weights \u2502 \u2502gaps \u2502 \u2502surfaced \u2502",
|
|
14597
|
+
"\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518",
|
|
14356
14598
|
"```",
|
|
14357
14599
|
"",
|
|
14358
14600
|
"**Issue labels encode the phase:**",
|
|
@@ -14361,20 +14603,22 @@ var softwareProfileAnalystSubAgent = {
|
|
|
14361
14603
|
"|-------|-------|-------------|",
|
|
14362
14604
|
"| `software:research` | 1. Research | Gather public sources. Write a bounded research-notes file. Create the profile issue. |",
|
|
14363
14605
|
"| `software:profile` | 2. Profile | Read the research notes. Write the structured profile to `<PROFILES_DIR>`. Create the matrix issue. |",
|
|
14364
|
-
"| `software:matrix` | 3. Matrix | Read the profile. Extract feature rows into `<MATRIX_FILE>`. Score against segment weights. Create the
|
|
14365
|
-
"| `software:
|
|
14606
|
+
"| `software:matrix` | 3. Matrix | Read the profile. Extract feature rows into `<MATRIX_FILE>`. Score against segment weights. Create the map issue. |",
|
|
14607
|
+
"| `software:map` | 4. Map | Read the profile and matrix rows. Map each feature to the owning BCM capability. Write the mapping back onto the profile. Enqueue `bcm:outline` follow-ups for unmapped features above the configured threshold. Create the followup issue. |",
|
|
14608
|
+
"| `software:followup` | 5. Followup | Read the profile. Enqueue software-research issues for adjacent products surfaced in the profile. |",
|
|
14366
14609
|
"",
|
|
14367
14610
|
"All issues also carry `type:software-profile` and a `status:*` label.",
|
|
14368
14611
|
"",
|
|
14369
14612
|
"**Issue count per product cycle:** 1 research + 1 profile + 1 matrix +",
|
|
14370
|
-
"0\u20131 followup = **
|
|
14371
|
-
"the profile did not surface any adjacent product worth
|
|
14613
|
+
"1 map + 0\u20131 followup = **4\u20135 sessions**. The followup phase is",
|
|
14614
|
+
"skipped when the profile did not surface any adjacent product worth",
|
|
14615
|
+
"researching.",
|
|
14372
14616
|
"",
|
|
14373
14617
|
"**Shortened paths:**",
|
|
14374
14618
|
"- Research phase determines the product is out of scope (not",
|
|
14375
14619
|
" relevant, insufficient public material) \u2192 research issue closes",
|
|
14376
14620
|
" with a justification and no downstream issues are created \u2192 **1 session**.",
|
|
14377
|
-
"- Narrow product with no adjacent candidates \u2192 **
|
|
14621
|
+
"- Narrow product with no adjacent candidates \u2192 **4 sessions**.",
|
|
14378
14622
|
"",
|
|
14379
14623
|
"---",
|
|
14380
14624
|
"",
|
|
@@ -14393,11 +14637,25 @@ var softwareProfileAnalystSubAgent = {
|
|
|
14393
14637
|
"| `<PRODUCT_SLUG>` | Short kebab-case slug identifying the product | derived from the product name |",
|
|
14394
14638
|
"| `<COMPANY_PROFILES_DIR>` | Where existing company profiles live (for duplicate detection during followup) | `docs/companies/profiles/` |",
|
|
14395
14639
|
"| `<PEOPLE_PROFILES_DIR>` | Where existing people profiles live (for duplicate detection during followup) | `docs/people/profiles/` |",
|
|
14640
|
+
`| \`<BCM_DOC_ROOT>\` | Root folder for BCM capability-model documents (used by Phase 4 to locate capabilities) | \`${DEFAULT_AGENT_PATHS.bcmRoot}/\` |`,
|
|
14641
|
+
"| `<BCM_CAPABILITY_MAP>` | Capability-map file that lists the L1/L2/L3 hierarchy | `<BCM_DOC_ROOT>/capability-map.md` |",
|
|
14642
|
+
"| `<UNMAPPED_THRESHOLD>` | Minimum number of unmapped features on a single profile that triggers a `bcm:outline` follow-up for that feature cluster | `1` (every unmapped feature triggers a `bcm:outline`) |",
|
|
14396
14643
|
"",
|
|
14397
14644
|
"If `docs/src/content/docs/project-context.md` specifies a different software-research",
|
|
14398
14645
|
"tree (for example by reusing the research-pipeline deliverables",
|
|
14399
14646
|
"folder), prefer that. Otherwise fall back to the defaults above.",
|
|
14400
14647
|
"",
|
|
14648
|
+
"The `<BCM_DOC_ROOT>` default above is sourced from configulator's",
|
|
14649
|
+
"`DEFAULT_AGENT_PATHS.bcmRoot`. If the consuming project's capability",
|
|
14650
|
+
"model lives somewhere else, pass an override in the invoking issue",
|
|
14651
|
+
"body or extend this rule in `agentConfig.rules` \u2014 reading",
|
|
14652
|
+
"`agentConfig.paths.bcmRoot` directly is not currently wired through",
|
|
14653
|
+
"to rule content at synth time. Override `<UNMAPPED_THRESHOLD>` the",
|
|
14654
|
+
"same way when the default (one `bcm:outline` per unmapped feature)",
|
|
14655
|
+
"is too noisy \u2014 for example, raise it to `3` to require at least",
|
|
14656
|
+
"three unmapped features on a single profile before any follow-ups",
|
|
14657
|
+
"are filed.",
|
|
14658
|
+
"",
|
|
14401
14659
|
"---",
|
|
14402
14660
|
"",
|
|
14403
14661
|
"## Agent Loop",
|
|
@@ -14406,7 +14664,7 @@ var softwareProfileAnalystSubAgent = {
|
|
|
14406
14664
|
"",
|
|
14407
14665
|
"1. Claim one open `type:software-profile` issue using phase priority:",
|
|
14408
14666
|
" `software:research` > `software:profile` > `software:matrix` >",
|
|
14409
|
-
" `software:followup`.",
|
|
14667
|
+
" `software:map` > `software:followup`.",
|
|
14410
14668
|
"2. Transition `status:ready` \u2192 `status:in-progress` and create the",
|
|
14411
14669
|
" branch per your project's branch-naming convention.",
|
|
14412
14670
|
"3. Execute the phase handler that matches the issue's `software:*`",
|
|
@@ -14541,7 +14799,12 @@ var softwareProfileAnalystSubAgent = {
|
|
|
14541
14799
|
"",
|
|
14542
14800
|
" ## Features",
|
|
14543
14801
|
" <grouped bullet list of notable features, each cited. These become",
|
|
14544
|
-
" the rows in the feature matrix during Phase 3
|
|
14802
|
+
" the rows in the feature matrix during Phase 3 and the rows of the",
|
|
14803
|
+
" capability mapping during Phase 4.>",
|
|
14804
|
+
"",
|
|
14805
|
+
" ## Capability Mapping",
|
|
14806
|
+
" _To be filled in during Phase 4 (Map). Leave as",
|
|
14807
|
+
" `_Pending capability mapping \u2014 filled in Phase 4._` until then._",
|
|
14545
14808
|
"",
|
|
14546
14809
|
" ## Technology Signals",
|
|
14547
14810
|
" <stack hints from docs, integrations, and public engineering",
|
|
@@ -14647,18 +14910,141 @@ var softwareProfileAnalystSubAgent = {
|
|
|
14647
14910
|
"",
|
|
14648
14911
|
"5. **Update the matrix front-matter** (`updated: YYYY-MM-DD`).",
|
|
14649
14912
|
"",
|
|
14650
|
-
"6. **
|
|
14651
|
-
" `
|
|
14652
|
-
"
|
|
14653
|
-
"
|
|
14654
|
-
"
|
|
14913
|
+
"6. **Create the `software:map` issue** with",
|
|
14914
|
+
" `Depends on: #<matrix-issue>`. Its body references the profile",
|
|
14915
|
+
" path, the matrix file path, the BCM document root",
|
|
14916
|
+
" (`<BCM_DOC_ROOT>`), the capability map file",
|
|
14917
|
+
" (`<BCM_CAPABILITY_MAP>` if it exists), and the unmapped-feature",
|
|
14918
|
+
" threshold (`<UNMAPPED_THRESHOLD>`). The map phase always runs \u2014",
|
|
14919
|
+
" every profile is mapped back to the capability model regardless",
|
|
14920
|
+
" of whether any adjacent products were surfaced.",
|
|
14655
14921
|
"",
|
|
14656
14922
|
"7. **Commit and push** the matrix file (and any profile updates).",
|
|
14657
14923
|
" Close the matrix issue.",
|
|
14658
14924
|
"",
|
|
14659
14925
|
"---",
|
|
14660
14926
|
"",
|
|
14661
|
-
"## Phase 4:
|
|
14927
|
+
"## Phase 4: Map (`software:map`)",
|
|
14928
|
+
"",
|
|
14929
|
+
"**Goal:** Map each feature on the profile back to the owning",
|
|
14930
|
+
"capability in the BCM capability model, write the mapping onto the",
|
|
14931
|
+
"profile, and enqueue `bcm:outline` follow-ups for features that do",
|
|
14932
|
+
"not match any existing capability.",
|
|
14933
|
+
"",
|
|
14934
|
+
"**Budget:** No new web searches. Read the profile, matrix, and BCM",
|
|
14935
|
+
"tree; write the mapping section onto the profile; open",
|
|
14936
|
+
"`bcm:outline` issues for the gaps.",
|
|
14937
|
+
"",
|
|
14938
|
+
"### Capability Mapping Format",
|
|
14939
|
+
"",
|
|
14940
|
+
"The mapping lives in the `## Capability Mapping` section of the",
|
|
14941
|
+
"profile file. It is a table with one row per feature and explicit",
|
|
14942
|
+
"evidence for each mapping decision:",
|
|
14943
|
+
"",
|
|
14944
|
+
"```markdown",
|
|
14945
|
+
"## Capability Mapping",
|
|
14946
|
+
"",
|
|
14947
|
+
"_Mapped against `<BCM_CAPABILITY_MAP>` on YYYY-MM-DD._",
|
|
14948
|
+
"",
|
|
14949
|
+
"| feature | capability (id \xB7 name) | tier | confidence | notes |",
|
|
14950
|
+
"|---------|-----------------------|------|------------|-------|",
|
|
14951
|
+
"| <feature> | <bcm-id> \xB7 <capability name> | L1/L2/L3 | high/medium/low | <evidence or rationale> |",
|
|
14952
|
+
"| <feature> | _unmapped_ | \u2014 | \u2014 | Candidate for new BCM sub-capability. Tracked in #<bcm-outline-issue> |",
|
|
14953
|
+
"```",
|
|
14954
|
+
"",
|
|
14955
|
+
"Confidence levels:",
|
|
14956
|
+
"",
|
|
14957
|
+
"- **high** \u2014 the feature's jobs-to-be-done clearly match the",
|
|
14958
|
+
" capability's definition and business object.",
|
|
14959
|
+
"- **medium** \u2014 the feature plausibly maps to the capability, but the",
|
|
14960
|
+
" match is partial (e.g. the feature covers only one facet of the",
|
|
14961
|
+
" capability, or the capability's definition is broader than the",
|
|
14962
|
+
" feature).",
|
|
14963
|
+
"- **low** \u2014 the feature overlaps the capability only tangentially.",
|
|
14964
|
+
" Prefer `_unmapped_` over a low-confidence match when the feature",
|
|
14965
|
+
" is a genuine capability gap rather than a near-miss.",
|
|
14966
|
+
"",
|
|
14967
|
+
"### Steps",
|
|
14968
|
+
"",
|
|
14969
|
+
"1. **Load the BCM tree.** Read `<BCM_CAPABILITY_MAP>` if it exists,",
|
|
14970
|
+
" otherwise walk `<BCM_DOC_ROOT>/` for capability-model documents.",
|
|
14971
|
+
" Build an in-session index of `{ id, name, tier, business_object }`",
|
|
14972
|
+
" entries. If the tree is empty (no BCM documents yet), note the",
|
|
14973
|
+
" gap in the profile's `## Risks / Open Questions`, skip the",
|
|
14974
|
+
" per-feature mapping, and mark **every** feature as a candidate",
|
|
14975
|
+
" for a new sub-capability \u2014 subject to `<UNMAPPED_THRESHOLD>`.",
|
|
14976
|
+
"",
|
|
14977
|
+
"2. **Read the profile file** and extract the `## Features` bullets.",
|
|
14978
|
+
" Each bullet is one row in the mapping table.",
|
|
14979
|
+
"",
|
|
14980
|
+
"3. **Map each feature to the best-fit capability.** Preferred",
|
|
14981
|
+
" algorithm:",
|
|
14982
|
+
" - Match against the capability's **business object** first (the",
|
|
14983
|
+
" thing the capability acts on).",
|
|
14984
|
+
" - Then match against the capability's **definition** and",
|
|
14985
|
+
" jobs-to-be-done.",
|
|
14986
|
+
" - Tie-break in favor of the most specific (deepest tier)",
|
|
14987
|
+
" capability \u2014 an L3 match beats an L2 match that covers it.",
|
|
14988
|
+
"",
|
|
14989
|
+
"4. **Record low-confidence mappings explicitly** \u2014 never hide a weak",
|
|
14990
|
+
" match behind a high-confidence label. If the best available",
|
|
14991
|
+
" match is low-confidence, mark the feature `_unmapped_` instead",
|
|
14992
|
+
" and describe the near-miss in the `notes` column.",
|
|
14993
|
+
"",
|
|
14994
|
+
"5. **Count unmapped features.** If the count meets or exceeds",
|
|
14995
|
+
" `<UNMAPPED_THRESHOLD>` (default `1`), open one `bcm:outline`",
|
|
14996
|
+
" issue per unmapped feature. The issue must carry:",
|
|
14997
|
+
"",
|
|
14998
|
+
" - `type:bcm-document`",
|
|
14999
|
+
" - `bcm:outline`",
|
|
15000
|
+
" - `priority:medium`",
|
|
15001
|
+
" - `status:ready`",
|
|
15002
|
+
"",
|
|
15003
|
+
" The issue body must include:",
|
|
15004
|
+
" - A **discovery source** line naming this software profile",
|
|
15005
|
+
" (`Discovered while mapping: <product name>`)",
|
|
15006
|
+
" - A link to the software profile path",
|
|
15007
|
+
" (`Software profile: <PROFILES_DIR>/<PRODUCT_SLUG>.md`)",
|
|
15008
|
+
" - The feature name, its one-line description from the profile,",
|
|
15009
|
+
" and a candidate capability name framed as a noun (BIZBOK-aligned)",
|
|
15010
|
+
" - Enough identifying metadata that the `bcm-writer` agent can",
|
|
15011
|
+
" begin the outline phase without revisiting this software",
|
|
15012
|
+
" profile",
|
|
15013
|
+
"",
|
|
15014
|
+
"6. **Avoid duplicate `bcm:outline` issues.** Before opening one,",
|
|
15015
|
+
" scan `<BCM_DOC_ROOT>/` for an existing capability that covers",
|
|
15016
|
+
" the feature (in case the tree grew between the matrix and map",
|
|
15017
|
+
" phases) and scan open issues carrying `bcm:outline` so this",
|
|
15018
|
+
" phase never re-queues a capability that is already being",
|
|
15019
|
+
" outlined. If a match is found, reuse it as a cross-reference in",
|
|
15020
|
+
" the mapping table instead of opening a new issue.",
|
|
15021
|
+
"",
|
|
15022
|
+
"7. **Write the `## Capability Mapping` section** back onto the",
|
|
15023
|
+
" profile file, replacing the `_Pending capability mapping \u2014 filled",
|
|
15024
|
+
" in Phase 4._` placeholder. Preserve every other section of the",
|
|
15025
|
+
" profile verbatim \u2014 this phase only rewrites the mapping section.",
|
|
15026
|
+
"",
|
|
15027
|
+
"8. **Create the `software:followup` issue** with",
|
|
15028
|
+
" `Depends on: #<map-issue>`. Its body references the profile path",
|
|
15029
|
+
" and lists any adjacent products the profile's Follow-up",
|
|
15030
|
+
" Candidates section identified. Skip creating the followup issue",
|
|
15031
|
+
" only when the profile lists zero adjacent products, zero",
|
|
15032
|
+
" primary-attribution people, and the vendor already has a",
|
|
15033
|
+
" company profile \u2014 note the skip in the map issue's closing",
|
|
15034
|
+
" comment.",
|
|
15035
|
+
"",
|
|
15036
|
+
"9. **Assume the peer is present.** This phase assumes the",
|
|
15037
|
+
" `bcm-writer` bundle is enabled in the consuming project. If the",
|
|
15038
|
+
" bundle has been disabled, flag the map issue with",
|
|
15039
|
+
" `status:needs-attention` and list the unmapped features that",
|
|
15040
|
+
" could not be routed \u2014 never invent an alternative label",
|
|
15041
|
+
" taxonomy.",
|
|
15042
|
+
"",
|
|
15043
|
+
"10. **Commit and push** the updated profile. Close the map issue.",
|
|
15044
|
+
"",
|
|
15045
|
+
"---",
|
|
15046
|
+
"",
|
|
15047
|
+
"## Phase 5: Followup (`software:followup`)",
|
|
14662
15048
|
"",
|
|
14663
15049
|
"**Goal:** Create downstream research issues for the adjacent products,",
|
|
14664
15050
|
"vendor company, and primary-attribution people surfaced in the",
|
|
@@ -14778,10 +15164,15 @@ var softwareProfileAnalystSubAgent = {
|
|
|
14778
15164
|
"",
|
|
14779
15165
|
"- `<NOTES_DIR>/` \u2014 research-notes files (Phase 1)",
|
|
14780
15166
|
"- `<PROFILES_DIR>/` \u2014 software profiles (Phase 2, updated in later",
|
|
14781
|
-
" phases)",
|
|
15167
|
+
" phases including the `## Capability Mapping` section in Phase 4)",
|
|
14782
15168
|
"- `<MATRIX_FILE>` \u2014 shared feature matrix (Phase 3)",
|
|
14783
15169
|
"",
|
|
14784
|
-
"In Phase 4, this agent
|
|
15170
|
+
"In Phase 4, this agent **creates `bcm:outline` issues** for every",
|
|
15171
|
+
"unmapped feature that meets the `<UNMAPPED_THRESHOLD>` so the",
|
|
15172
|
+
"`bcm-writer` bundle can author the new sub-capability. It never",
|
|
15173
|
+
"authors BCM capability-model documents itself.",
|
|
15174
|
+
"",
|
|
15175
|
+
"In Phase 5, this agent also **creates `company:research` and",
|
|
14785
15176
|
"`people:research` issues** for the vendor company and primary-",
|
|
14786
15177
|
"attribution people surfaced in the profile that are not already",
|
|
14787
15178
|
"tracked under `<COMPANY_PROFILES_DIR>/` or `<PEOPLE_PROFILES_DIR>/`.",
|
|
@@ -14790,15 +15181,18 @@ var softwareProfileAnalystSubAgent = {
|
|
|
14790
15181
|
"`people-profile-analyst` agents, which pick up the issues this",
|
|
14791
15182
|
"pipeline creates.",
|
|
14792
15183
|
"",
|
|
14793
|
-
"The pipeline produces **software profiles, notes, and
|
|
14794
|
-
"
|
|
14795
|
-
"
|
|
14796
|
-
"
|
|
14797
|
-
"
|
|
15184
|
+
"The pipeline produces **software profiles, notes, matrix rows, and capability mappings**.",
|
|
15185
|
+
"Deeper research on adjacent products is delegated to new cycles of",
|
|
15186
|
+
"this same pipeline via `software:research` issues. New BCM",
|
|
15187
|
+
"sub-capabilities for unmapped features are delegated to the",
|
|
15188
|
+
"`bcm-writer` bundle via `bcm:outline` issues. Deeper research on",
|
|
15189
|
+
"the vendor company and primary-attribution people is delegated to",
|
|
15190
|
+
"the `company-profile` and `people-profile` bundles via",
|
|
14798
15191
|
"`company:research` and `people:research` issues. This agent never",
|
|
14799
|
-
"writes company profiles, person profiles, formal
|
|
14800
|
-
"documents, or comparative long-form analyses itself.
|
|
14801
|
-
"boundary clean so the software-profile pipeline stays
|
|
15192
|
+
"writes BCM documents, company profiles, person profiles, formal",
|
|
15193
|
+
"requirement documents, or comparative long-form analyses itself.",
|
|
15194
|
+
"Keep this boundary clean so the software-profile pipeline stays",
|
|
15195
|
+
"generic.",
|
|
14802
15196
|
"",
|
|
14803
15197
|
"---",
|
|
14804
15198
|
"",
|
|
@@ -14813,31 +15207,41 @@ var softwareProfileAnalystSubAgent = {
|
|
|
14813
15207
|
" `docs/src/content/docs/project-context.md` or an explicit issue-body override. If",
|
|
14814
15208
|
" neither is available, fall back to the single-segment default and",
|
|
14815
15209
|
" flag the gap \u2014 never guess.",
|
|
14816
|
-
"- **Delegate, don't duplicate.**
|
|
14817
|
-
"
|
|
14818
|
-
"
|
|
14819
|
-
"
|
|
14820
|
-
"
|
|
14821
|
-
"
|
|
14822
|
-
"
|
|
14823
|
-
"
|
|
14824
|
-
"
|
|
15210
|
+
"- **Delegate, don't duplicate.** Unmapped capabilities are handed off",
|
|
15211
|
+
" to the `bcm-writer` bundle via `bcm:outline` issues in Phase 4.",
|
|
15212
|
+
" The vendor company and primary-attribution people surfaced during",
|
|
15213
|
+
" profiling are handed off to the `company-profile` and",
|
|
15214
|
+
" `people-profile` bundles via `company:research` and",
|
|
15215
|
+
" `people:research` issues in Phase 5 \u2014 never inlined as BCM",
|
|
15216
|
+
" documents, company profiles, or person profiles in this pipeline.",
|
|
15217
|
+
"- **Check before enqueueing.** Before opening a `bcm:outline`,",
|
|
15218
|
+
" `company:research`, or `people:research` issue, verify no existing",
|
|
15219
|
+
" document or open issue already covers the candidate. Reuse",
|
|
15220
|
+
" existing BCM documents and profiles as cross-references rather",
|
|
15221
|
+
" than re-queuing work.",
|
|
15222
|
+
"- **Respect the threshold.** Phase 4 opens `bcm:outline` issues only",
|
|
15223
|
+
" when the count of unmapped features on a single profile meets or",
|
|
15224
|
+
" exceeds `<UNMAPPED_THRESHOLD>`. The default is `1` \u2014 one unmapped",
|
|
15225
|
+
" feature triggers one outline issue. Raise the threshold in the",
|
|
15226
|
+
" invoking issue body or in the consuming project's",
|
|
15227
|
+
" `agentConfig.rules` when the default is too noisy.",
|
|
14825
15228
|
"- **Restrain the queue \u2014 people only.** The vendor company always",
|
|
14826
15229
|
" qualifies (duplicate check aside). For people, only enqueue",
|
|
14827
15230
|
" research for those with **primary attribution** \u2014 founders, the",
|
|
14828
15231
|
" current CEO, principal creators, lead maintainers, or the head of",
|
|
14829
15232
|
" product. Do not open issues for every name on the vendor's about",
|
|
14830
15233
|
" page, every investor, or every advisor.",
|
|
14831
|
-
"- **Produce profiles
|
|
14832
|
-
" documents
|
|
14833
|
-
"
|
|
14834
|
-
"
|
|
14835
|
-
"
|
|
15234
|
+
"- **Produce profiles, matrix rows, and capability mappings \u2014 not",
|
|
15235
|
+
" BCM documents, requirement documents, or evaluation documents.**",
|
|
15236
|
+
" Do not open `type:requirement` or formal evaluation issues from",
|
|
15237
|
+
" this pipeline, and never author BCM capability-model documents",
|
|
15238
|
+
" inline. Follow-up work is scoped through `software:research`,",
|
|
15239
|
+
" `bcm:outline`, `company:research`, and `people:research` only."
|
|
14836
15240
|
].join("\n")
|
|
14837
15241
|
};
|
|
14838
15242
|
var profileSoftwareSkill = {
|
|
14839
15243
|
name: "profile-software",
|
|
14840
|
-
description: "Kick off a software-profile pipeline. Creates a software:research issue for the given product and dispatches Phase 1 (Research) in the software-profile-analyst agent. Phase 4 (Followup) enqueues downstream `company:research` and `people:research` issues for the vendor company and primary-attribution founders/leaders surfaced in the profile.",
|
|
15244
|
+
description: "Kick off a software-profile pipeline. Creates a software:research issue for the given product and dispatches Phase 1 (Research) in the software-profile-analyst agent. Phase 4 (Map) writes a BCM capability mapping onto the profile and enqueues `bcm:outline` issues for unmapped features. Phase 5 (Followup) enqueues downstream `company:research` and `people:research` issues for the vendor company and primary-attribution founders/leaders surfaced in the profile.",
|
|
14841
15245
|
disableModelInvocation: true,
|
|
14842
15246
|
userInvocable: true,
|
|
14843
15247
|
context: "fork",
|
|
@@ -14864,6 +15268,9 @@ var profileSoftwareSkill = {
|
|
|
14864
15268
|
"- `weights: <table>` \u2014 override the segment-importance weights for",
|
|
14865
15269
|
" this profile cycle (otherwise loaded from",
|
|
14866
15270
|
" `docs/src/content/docs/project-context.md`)",
|
|
15271
|
+
"- `unmapped_threshold: <n>` \u2014 override the Phase 4 threshold for",
|
|
15272
|
+
" opening `bcm:outline` issues (default `1` \u2014 one unmapped feature",
|
|
15273
|
+
" triggers one outline issue)",
|
|
14867
15274
|
"- `sources: <list>` \u2014 additional authorized sources beyond public web",
|
|
14868
15275
|
"",
|
|
14869
15276
|
"## Default Paths",
|
|
@@ -14883,16 +15290,20 @@ var profileSoftwareSkill = {
|
|
|
14883
15290
|
"2. Execute Phase 1 (Research) of the software-profile-analyst",
|
|
14884
15291
|
" agent.",
|
|
14885
15292
|
"3. Phase 1 creates the `software:profile` issue. Phase 2 creates",
|
|
14886
|
-
" the `software:matrix` issue. Phase 3
|
|
14887
|
-
" `software:followup` issue
|
|
14888
|
-
"
|
|
15293
|
+
" the `software:matrix` issue. Phase 3 creates the `software:map`",
|
|
15294
|
+
" issue. Phase 4 creates the `software:followup` issue (unless the",
|
|
15295
|
+
" profile surfaced zero follow-ups). Each downstream issue",
|
|
15296
|
+
" declares its `Depends on:` predecessor.",
|
|
14889
15297
|
"",
|
|
14890
15298
|
"## Output",
|
|
14891
15299
|
"",
|
|
14892
15300
|
"- A research-notes file under the project's notes directory",
|
|
14893
|
-
"- A single software profile under the profiles directory",
|
|
15301
|
+
"- A single software profile under the profiles directory, including",
|
|
15302
|
+
" a `## Capability Mapping` section written in Phase 4",
|
|
14894
15303
|
"- One or more rows appended to the shared feature-matrix file,",
|
|
14895
15304
|
" scored against the configured segment weights",
|
|
15305
|
+
"- `bcm:outline` issues for each unmapped feature above the",
|
|
15306
|
+
" configured threshold (handed off to the `bcm-writer` bundle)",
|
|
14896
15307
|
"- Optional follow-up `software:research` issues for adjacent",
|
|
14897
15308
|
" products surfaced in the profile",
|
|
14898
15309
|
"- `company:research` issue for the vendor company (handed off to",
|
|
@@ -14900,46 +15311,132 @@ var profileSoftwareSkill = {
|
|
|
14900
15311
|
"- `people:research` issues for primary-attribution founders, CEOs,",
|
|
14901
15312
|
" or principal creators (handed off to the `people-profile`",
|
|
14902
15313
|
" bundle)",
|
|
14903
|
-
"- This pipeline produces **software profiles, notes,
|
|
14904
|
-
"
|
|
14905
|
-
" profiles, or formal requirement
|
|
15314
|
+
"- This pipeline produces **software profiles, notes, matrix rows,",
|
|
15315
|
+
" and capability mappings** \u2014 it does not write BCM documents,",
|
|
15316
|
+
" company profiles, person profiles, or formal requirement",
|
|
15317
|
+
" documents itself."
|
|
15318
|
+
].join("\n")
|
|
15319
|
+
};
|
|
15320
|
+
var mapSoftwareSkill = {
|
|
15321
|
+
name: "map-software",
|
|
15322
|
+
description: "Kick off a standalone software-capability mapping session. Creates a software:map issue for an already-profiled product and dispatches Phase 4 (Map) in the software-profile-analyst agent. Produces the `## Capability Mapping` section on the profile and enqueues `bcm:outline` issues for unmapped features above the configured threshold.",
|
|
15323
|
+
disableModelInvocation: true,
|
|
15324
|
+
userInvocable: true,
|
|
15325
|
+
context: "fork",
|
|
15326
|
+
agent: "software-profile-analyst",
|
|
15327
|
+
platforms: { cursor: { exclude: true } },
|
|
15328
|
+
instructions: [
|
|
15329
|
+
"# Map Software",
|
|
15330
|
+
"",
|
|
15331
|
+
"Kick off a standalone `software:map` session for a product that",
|
|
15332
|
+
"already has a profile file and matrix rows on disk. Creates a",
|
|
15333
|
+
"`software:map` issue carrying the profile path and dispatches Phase",
|
|
15334
|
+
"4 (Map) in the software-profile-analyst agent.",
|
|
15335
|
+
"",
|
|
15336
|
+
"Use this skill when:",
|
|
15337
|
+
"",
|
|
15338
|
+
"- A profile was written before the map phase existed and is still",
|
|
15339
|
+
" carrying the `_Pending capability mapping \u2014 filled in Phase 4._`",
|
|
15340
|
+
" placeholder.",
|
|
15341
|
+
"- The BCM tree has grown enough that a previously-mapped profile",
|
|
15342
|
+
" should be re-mapped against the updated capability model.",
|
|
15343
|
+
"- A profile's features were edited after the map phase ran and the",
|
|
15344
|
+
" mapping table is now out of date.",
|
|
15345
|
+
"",
|
|
15346
|
+
"## Usage",
|
|
15347
|
+
"",
|
|
15348
|
+
"/map-software <product-slug-or-profile-path>",
|
|
15349
|
+
"",
|
|
15350
|
+
"Optional extensions in the issue body:",
|
|
15351
|
+
"- `unmapped_threshold: <n>` \u2014 override the threshold for opening",
|
|
15352
|
+
" `bcm:outline` issues (default `1`)",
|
|
15353
|
+
"- `bcm_doc_root: <path>` \u2014 override the BCM document root",
|
|
15354
|
+
" (otherwise the configulator default at",
|
|
15355
|
+
" `DEFAULT_AGENT_PATHS.bcmRoot`)",
|
|
15356
|
+
"- `capability_map: <path>` \u2014 override the capability-map file",
|
|
15357
|
+
" (otherwise `<BCM_DOC_ROOT>/capability-map.md`)",
|
|
15358
|
+
"",
|
|
15359
|
+
"## Default Paths",
|
|
15360
|
+
"",
|
|
15361
|
+
"If the project has no override in `docs/src/content/docs/project-context.md` or",
|
|
15362
|
+
"`agentConfig.rules`, the mapping reads from:",
|
|
15363
|
+
"",
|
|
15364
|
+
`- \`${DEFAULT_AGENT_PATHS.bcmRoot}/\` \u2014 BCM capability-model documents`,
|
|
15365
|
+
`- \`${DEFAULT_AGENT_PATHS.bcmRoot}/capability-map.md\` \u2014 capability map`,
|
|
15366
|
+
"",
|
|
15367
|
+
"and writes back to `docs/software/profiles/<slug>.md` under the",
|
|
15368
|
+
"`## Capability Mapping` section only. No other section of the",
|
|
15369
|
+
"profile is rewritten.",
|
|
15370
|
+
"",
|
|
15371
|
+
"## Steps",
|
|
15372
|
+
"",
|
|
15373
|
+
"1. Create a `software:map` issue with `type:software-profile`,",
|
|
15374
|
+
" `priority:medium`, and `status:ready`. Body must include the",
|
|
15375
|
+
" profile path and any overrides.",
|
|
15376
|
+
"2. Execute Phase 4 (Map) of the software-profile-analyst agent.",
|
|
15377
|
+
"3. Phase 4 writes the `## Capability Mapping` section, enqueues",
|
|
15378
|
+
" `bcm:outline` issues for unmapped features above the threshold,",
|
|
15379
|
+
" and \u2014 when the profile lists adjacent products or",
|
|
15380
|
+
" primary-attribution people \u2014 creates the `software:followup`",
|
|
15381
|
+
" issue.",
|
|
15382
|
+
"",
|
|
15383
|
+
"## Output",
|
|
15384
|
+
"",
|
|
15385
|
+
"- An updated `## Capability Mapping` section on the target profile",
|
|
15386
|
+
"- `bcm:outline` issues for each unmapped feature above the",
|
|
15387
|
+
" configured threshold (handed off to the `bcm-writer` bundle)",
|
|
15388
|
+
"- An optional `software:followup` issue when the profile surfaced",
|
|
15389
|
+
" adjacent products, a vendor company without an existing profile,",
|
|
15390
|
+
" or primary-attribution people",
|
|
15391
|
+
"- This skill does not run Phase 1\u20133 \u2014 it assumes the profile and",
|
|
15392
|
+
" matrix rows already exist on disk."
|
|
14906
15393
|
].join("\n")
|
|
14907
15394
|
};
|
|
14908
15395
|
var softwareProfileBundle = {
|
|
14909
15396
|
name: "software-profile",
|
|
14910
|
-
description: "Software research, profiling,
|
|
15397
|
+
description: "Software research, profiling, feature-matrix, and capability-mapping pipeline: research, profile, matrix, map, followup. Enabled by default; domain-neutral; filesystem-durable between phases; ranks features against configurable segment-importance weights and maps features back to the BCM capability model. Phase 4 (Map) hands unmapped features off to the `bcm-writer` bundle via `bcm:outline` issues. Phase 5 (Followup) hands the vendor company and primary-attribution founders/leaders off to the `company-profile` and `people-profile` bundles via `company:research` and `people:research` issues.",
|
|
14911
15398
|
appliesWhen: () => true,
|
|
14912
15399
|
rules: [
|
|
14913
15400
|
{
|
|
14914
15401
|
name: "software-profile-workflow",
|
|
14915
|
-
description: "Describes the
|
|
15402
|
+
description: "Describes the 5-phase software-profile pipeline, the software:* label taxonomy, the generic software-type taxonomy, the segment-weights convention that drives feature-matrix scoring, and the capability-mapping hand-off to the bcm-writer bundle.",
|
|
14916
15403
|
scope: AGENT_RULE_SCOPE.ALWAYS,
|
|
14917
15404
|
content: [
|
|
14918
15405
|
"# Software Profile Workflow",
|
|
14919
15406
|
"",
|
|
14920
15407
|
"Use `/profile-software <product-name>` to kick off a software",
|
|
14921
|
-
"research, profiling,
|
|
14922
|
-
"runs in up to
|
|
14923
|
-
"each tracked by its own GitHub
|
|
14924
|
-
"`software:research`, `software:profile`,
|
|
14925
|
-
"`software:
|
|
14926
|
-
"",
|
|
14927
|
-
"
|
|
14928
|
-
"
|
|
14929
|
-
"
|
|
14930
|
-
"
|
|
14931
|
-
"
|
|
14932
|
-
"
|
|
14933
|
-
"
|
|
14934
|
-
"
|
|
14935
|
-
"
|
|
14936
|
-
"
|
|
14937
|
-
"
|
|
15408
|
+
"research, profiling, feature-matrix, and capability-mapping",
|
|
15409
|
+
"pipeline. The pipeline runs in up to 5 phases \u2014 research,",
|
|
15410
|
+
"profile, matrix, map, followup \u2014 each tracked by its own GitHub",
|
|
15411
|
+
"issue labeled `software:research`, `software:profile`,",
|
|
15412
|
+
"`software:matrix`, `software:map`, or `software:followup`. All",
|
|
15413
|
+
"issues carry `type:software-profile`.",
|
|
15414
|
+
"",
|
|
15415
|
+
"The pipeline produces **software profiles, research notes, rows",
|
|
15416
|
+
"in a shared feature matrix, and capability mappings onto the",
|
|
15417
|
+
"BCM tree**. Features are ranked against segment-importance",
|
|
15418
|
+
"weights declared in `docs/src/content/docs/project-context.md`",
|
|
15419
|
+
"under a `## Segment Weights` section. Features that do not map",
|
|
15420
|
+
"to any existing capability in the BCM tree are flagged during",
|
|
15421
|
+
"the map phase as candidates for new BCM sub-capabilities and",
|
|
15422
|
+
"handed off to the `bcm-writer` bundle via `bcm:outline` issues",
|
|
15423
|
+
"(subject to a configurable threshold). Deeper research on",
|
|
15424
|
+
"adjacent products surfaced in a profile is delegated to new",
|
|
15425
|
+
"cycles of this same pipeline via `software:followup` issues.",
|
|
15426
|
+
"Deeper research on the vendor company and primary-attribution",
|
|
15427
|
+
"founders/product leaders is delegated to the `company-profile`",
|
|
15428
|
+
"and `people-profile` bundles via `company:research` and",
|
|
15429
|
+
"`people:research` issues opened during Phase 5 (Followup).",
|
|
15430
|
+
"",
|
|
15431
|
+
"Use `/map-software <product-slug>` to kick off a standalone",
|
|
15432
|
+
"`software:map` session for a profile that already exists on",
|
|
15433
|
+
"disk \u2014 for example, when the BCM tree has grown enough that a",
|
|
15434
|
+
"previously-mapped profile should be re-mapped.",
|
|
14938
15435
|
"",
|
|
14939
15436
|
"See the `software-profile-analyst` agent definition for full",
|
|
14940
15437
|
"workflow details, default paths, the software-type taxonomy,",
|
|
14941
|
-
"the segment-weights convention,
|
|
14942
|
-
"instructions."
|
|
15438
|
+
"the segment-weights convention, the capability-mapping format,",
|
|
15439
|
+
"and phase-by-phase instructions."
|
|
14943
15440
|
].join("\n"),
|
|
14944
15441
|
platforms: {
|
|
14945
15442
|
cursor: { exclude: true }
|
|
@@ -14947,13 +15444,13 @@ var softwareProfileBundle = {
|
|
|
14947
15444
|
tags: ["workflow"]
|
|
14948
15445
|
}
|
|
14949
15446
|
],
|
|
14950
|
-
skills: [profileSoftwareSkill],
|
|
15447
|
+
skills: [profileSoftwareSkill, mapSoftwareSkill],
|
|
14951
15448
|
subAgents: [softwareProfileAnalystSubAgent],
|
|
14952
15449
|
labels: [
|
|
14953
15450
|
{
|
|
14954
15451
|
name: "type:software-profile",
|
|
14955
15452
|
color: "0E8A16",
|
|
14956
|
-
description: "Work that produces or maintains a software profile, research notes,
|
|
15453
|
+
description: "Work that produces or maintains a software profile, research notes, feature-matrix rows, or capability mappings"
|
|
14957
15454
|
},
|
|
14958
15455
|
{
|
|
14959
15456
|
name: "software:research",
|
|
@@ -14970,10 +15467,15 @@ var softwareProfileBundle = {
|
|
|
14970
15467
|
color: "D4C5F9",
|
|
14971
15468
|
description: "Phase 3: extract feature rows into the shared feature matrix and score them against segment weights"
|
|
14972
15469
|
},
|
|
15470
|
+
{
|
|
15471
|
+
name: "software:map",
|
|
15472
|
+
color: "A2EEEF",
|
|
15473
|
+
description: "Phase 4: map each feature back to the BCM capability model, write the mapping onto the profile, and enqueue `bcm:outline` issues for unmapped features above the configured threshold"
|
|
15474
|
+
},
|
|
14973
15475
|
{
|
|
14974
15476
|
name: "software:followup",
|
|
14975
15477
|
color: "FBCA04",
|
|
14976
|
-
description: "Phase
|
|
15478
|
+
description: "Phase 5: enqueue follow-up research issues for adjacent products, the vendor company, and primary-attribution people surfaced in the profile"
|
|
14977
15479
|
}
|
|
14978
15480
|
]
|
|
14979
15481
|
};
|