@codedrifters/configulator 0.0.215 → 0.0.217

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.mjs CHANGED
@@ -1629,7 +1629,7 @@ var bcmWriterBundle = {
1629
1629
  // src/agent/bundles/company-profile.ts
1630
1630
  var companyProfileAnalystSubAgent = {
1631
1631
  name: "company-profile-analyst",
1632
- description: "Researches an external company (competitor, vendor, partner, customer, etc.) from public sources and produces a structured markdown profile. Optionally enqueues follow-up people and software research tasks. One company per session, tracked by company:* GitHub issue labels.",
1632
+ description: "Researches an external company (competitor, vendor, partner, customer, etc.) from public sources and produces a structured markdown profile, then enqueues downstream `people:research` and `software:research` issues for notable people and software products surfaced during profiling. One company per session, tracked by company:* GitHub issue labels.",
1633
1633
  model: AGENT_MODEL.POWERFUL,
1634
1634
  maxTurns: 80,
1635
1635
  platforms: { cursor: { exclude: true } },
@@ -1672,7 +1672,10 @@ var companyProfileAnalystSubAgent = {
1672
1672
  "6. **Follow-up, don't widen scope.** If the session turns up adjacent",
1673
1673
  " research questions (a key person worth profiling, a product worth",
1674
1674
  " evaluating), emit a follow-up issue rather than expanding the",
1675
- " profile beyond its scope.",
1675
+ " profile beyond its scope. Notable people are handed off to the",
1676
+ " `people-profile` bundle via `people:research` issues; software",
1677
+ " products are handed off to the `software-profile` bundle via",
1678
+ " `software:research` issues.",
1676
1679
  "",
1677
1680
  "---",
1678
1681
  "",
@@ -1743,6 +1746,8 @@ var companyProfileAnalystSubAgent = {
1743
1746
  "| `<PROFILES_DIR>` | Final company profile files | `<COMPANY_ROOT>/profiles/` |",
1744
1747
  "| `<NOTES_DIR>` | Research-notes files from Phase 1 | `<COMPANY_ROOT>/notes/` |",
1745
1748
  "| `<COMPANY_SLUG>` | Short kebab-case slug identifying the company | derived from the company name |",
1749
+ "| `<PEOPLE_PROFILES_DIR>` | Where existing people profiles live (for duplicate detection during followup) | `docs/people/profiles/` |",
1750
+ "| `<SOFTWARE_PROFILES_DIR>` | Where existing software profiles live (for duplicate detection during followup) | `docs/software/profiles/` |",
1746
1751
  "",
1747
1752
  "If `docs/project-context.md` specifies a different company-research",
1748
1753
  "tree (for example by reusing the research-pipeline deliverables",
@@ -1924,30 +1929,91 @@ var companyProfileAnalystSubAgent = {
1924
1929
  "## Phase 3: Followup (`company:followup`)",
1925
1930
  "",
1926
1931
  "**Goal:** Create downstream research issues for the people and",
1927
- "products surfaced in the profile.",
1932
+ "software products surfaced in the profile. Hand the candidates off to",
1933
+ "the `people-profile` and `software-profile` bundles so they can be",
1934
+ "researched independently.",
1928
1935
  "",
1929
1936
  "**Budget:** No new research. Read the profile, enqueue issues, close",
1930
- "the phase.",
1937
+ "the phase. Markdown cross-references in the profile's",
1938
+ "`## Follow-up Candidates` section are preserved \u2014 issue creation is",
1939
+ "**additive** on top of the existing notes-only behavior.",
1931
1940
  "",
1932
1941
  "### Steps",
1933
1942
  "",
1934
1943
  "1. **Read the profile file** referenced in the issue body.",
1935
1944
  "",
1936
- "2. **Enqueue people-profile issues** for each entry under",
1937
- " `Follow-up Candidates > People to profile`. Use the consuming",
1938
- " project's people-research pipeline if one exists; otherwise, open",
1939
- " a generic `type:research` issue describing what to learn about the",
1940
- " person and linking back to the company profile.",
1941
- "",
1942
- "3. **Enqueue software-evaluation issues** for each entry under",
1943
- " `Follow-up Candidates > Products / software to evaluate`. Again,",
1944
- " use a project-specific pipeline if configured, otherwise a generic",
1945
- " `type:research` issue.",
1946
- "",
1947
- "4. **Cross-link** \u2014 update the profile's `## Follow-up Candidates`",
1948
- " section so each entry references its newly-created issue number.",
1949
- "",
1950
- "5. **Commit and push** (if the profile was updated). Close the",
1945
+ "2. **Enqueue a `people:research` issue per candidate** under",
1946
+ " `Follow-up Candidates > People to profile` that is worth",
1947
+ " downstream research. Each issue must carry:",
1948
+ "",
1949
+ " - `type:people-profile`",
1950
+ " - `people:research`",
1951
+ " - `priority:medium`",
1952
+ " - `status:ready`",
1953
+ "",
1954
+ " The issue body must include:",
1955
+ " - A **discovery source** line naming this company profile",
1956
+ " (`Discovered while profiling: <company name>`)",
1957
+ " - A link to the company profile path (`Company profile: <PROFILES_DIR>/<COMPANY_SLUG>.md`)",
1958
+ " - Enough identifying metadata \u2014 full name, role/title, and",
1959
+ " employing company \u2014 that the `people-profile-analyst` agent can",
1960
+ " begin research without revisiting this company profile",
1961
+ "",
1962
+ "3. **Enqueue a `software:research` issue per candidate** under",
1963
+ " `Follow-up Candidates > Products / software to evaluate` that is",
1964
+ " worth downstream research. Each issue must carry:",
1965
+ "",
1966
+ " - `type:software-profile`",
1967
+ " - `software:research`",
1968
+ " - `priority:medium`",
1969
+ " - `status:ready`",
1970
+ "",
1971
+ " The issue body must include:",
1972
+ " - A **discovery source** line naming this company profile",
1973
+ " (`Discovered while profiling: <company name>`)",
1974
+ " - A link to the company profile path (`Company profile: <PROFILES_DIR>/<COMPANY_SLUG>.md`)",
1975
+ " - Enough identifying metadata \u2014 product name and vendor (usually",
1976
+ " this company if it builds the product, otherwise the upstream",
1977
+ " vendor) \u2014 that the `software-profile-analyst` agent can begin",
1978
+ " research without revisiting this company profile",
1979
+ "",
1980
+ "4. **Avoid duplicates.** Before opening a `people:research` or",
1981
+ " `software:research` issue, verify no existing profile covers the",
1982
+ " candidate:",
1983
+ "",
1984
+ " - People: check `<PEOPLE_PROFILES_DIR>/` for a matching profile",
1985
+ " file (by derived slug or by searching the directory for the",
1986
+ " person's name). If a profile exists, reuse it as a cross-reference",
1987
+ " only \u2014 **do not** open a new `people:research` issue.",
1988
+ " - Software: check `<SOFTWARE_PROFILES_DIR>/` the same way. If a",
1989
+ " profile exists, reuse it as a cross-reference only \u2014 **do not**",
1990
+ " open a new `software:research` issue.",
1991
+ " - Also scan open issues carrying the matching `people:research` or",
1992
+ " `software:research` label so this phase never re-opens research",
1993
+ " that is already queued.",
1994
+ "",
1995
+ "5. **Exercise restraint.** Only create downstream issues for people",
1996
+ " and software products that are **genuinely relevant** to the",
1997
+ " framing of this profile \u2014 executives, founders, and decision-makers",
1998
+ " for people; products the company builds or materially depends on",
1999
+ " for software. Do **not** open issues for every name mentioned in",
2000
+ " passing, every SaaS tool listed in a job ad, or every tangential",
2001
+ " partner. When in doubt, leave the candidate as a markdown",
2002
+ " cross-reference in the profile and skip the downstream issue.",
2003
+ "",
2004
+ "6. **Assume the peers are present.** This pipeline assumes the",
2005
+ " `people-profile` and `software-profile` bundles are enabled in the",
2006
+ " consuming project. If a consuming project has disabled one of",
2007
+ " them, flag the followup issue with `status:needs-attention` and",
2008
+ " list the candidates that could not be routed \u2014 never invent an",
2009
+ " alternative label taxonomy.",
2010
+ "",
2011
+ "7. **Cross-link** \u2014 update the profile's `## Follow-up Candidates`",
2012
+ " section so each entry references its newly-created issue number",
2013
+ " (or the existing profile path, for candidates that were skipped",
2014
+ " because a profile already exists).",
2015
+ "",
2016
+ "8. **Commit and push** (if the profile was updated). Close the",
1951
2017
  " followup issue.",
1952
2018
  "",
1953
2019
  "---",
@@ -1959,9 +2025,17 @@ var companyProfileAnalystSubAgent = {
1959
2025
  "- `<NOTES_DIR>/` \u2014 research-notes files (Phase 1)",
1960
2026
  "- `<PROFILES_DIR>/` \u2014 company profiles (Phase 2, updated in Phase 3)",
1961
2027
  "",
1962
- "The pipeline produces **profiles and notes only**. Deeper research on",
1963
- "people or products is delegated to downstream research pipelines via",
1964
- "follow-up issues \u2014 this agent never writes person profiles, product",
2028
+ "In Phase 3, this agent also **creates `people:research` and",
2029
+ "`software:research` issues** for people and software products",
2030
+ "surfaced in the profile. It never writes the downstream profiles",
2031
+ "themselves \u2014 those are the responsibility of the",
2032
+ "`people-profile-analyst` and `software-profile-analyst` agents, which",
2033
+ "pick up the issues this pipeline creates.",
2034
+ "",
2035
+ "The pipeline produces **company profiles and notes only**. Deeper",
2036
+ "research on people or products is delegated to downstream research",
2037
+ "pipelines via `people:research` and `software:research` issues \u2014 this",
2038
+ "agent never writes person profiles, software profiles, product",
1965
2039
  "evaluations, or comparative analyses itself. Keep this boundary clean",
1966
2040
  "so the company-profile pipeline stays generic.",
1967
2041
  "",
@@ -1977,10 +2051,23 @@ var companyProfileAnalystSubAgent = {
1977
2051
  "- **No assumed competition.** Never call a company a competitor unless",
1978
2052
  " the invoking issue body or the consuming project's configuration",
1979
2053
  " says so.",
1980
- "- **Produce profiles, not downstream work.** Do not open",
1981
- " `type:requirement` or formal evaluation issues from this pipeline.",
1982
- " Follow-up work is scoped through `company:followup` or delegated to",
1983
- " downstream research agents."
2054
+ "- **Delegate, don't duplicate.** People and software products",
2055
+ " surfaced during profiling are handed off to the `people-profile`",
2056
+ " and `software-profile` bundles via `people:research` and",
2057
+ " `software:research` issues in Phase 3 \u2014 never inlined as person or",
2058
+ " software profiles in this pipeline.",
2059
+ "- **Check before enqueueing.** Before opening a `people:research` or",
2060
+ " `software:research` issue, verify no existing profile or open",
2061
+ " research issue already covers the candidate. Reuse existing",
2062
+ " profiles as cross-references rather than re-queuing research.",
2063
+ "- **Restrain the queue.** Only enqueue downstream research for people",
2064
+ " and products that are genuinely relevant to the framing of this",
2065
+ " profile. Do not open issues for every name or product mentioned in",
2066
+ " passing.",
2067
+ "- **Produce profiles, not requirement or evaluation documents.** Do",
2068
+ " not open `type:requirement` or formal evaluation issues from this",
2069
+ " pipeline. Follow-up research is scoped through `people:research`",
2070
+ " and `software:research` only."
1984
2071
  ].join("\n")
1985
2072
  };
1986
2073
  var profileCompanySkill = {
@@ -2032,15 +2119,18 @@ var profileCompanySkill = {
2032
2119
  "",
2033
2120
  "- A research-notes file under the project's notes directory",
2034
2121
  "- A single company profile under the profiles directory",
2035
- "- Optional follow-up research issues for key people and products",
2036
- " surfaced in the profile",
2037
- "- This pipeline produces **profiles only** \u2014 it does not write person",
2038
- " profiles, product evaluations, or comparative analyses itself."
2122
+ "- `people:research` issues for notable people surfaced in the profile",
2123
+ " (handed off to the `people-profile` bundle)",
2124
+ "- `software:research` issues for software products surfaced in the",
2125
+ " profile (handed off to the `software-profile` bundle)",
2126
+ "- This pipeline produces **company profiles only** \u2014 it does not",
2127
+ " write person profiles, software profiles, product evaluations, or",
2128
+ " comparative analyses itself."
2039
2129
  ].join("\n")
2040
2130
  };
2041
2131
  var companyProfileBundle = {
2042
2132
  name: "company-profile",
2043
- description: "Company research and profiling pipeline: research, draft profile, followup. Enabled by default; domain-neutral; filesystem-durable between phases.",
2133
+ description: "Company research and profiling pipeline: research, draft profile, followup. Enabled by default; domain-neutral; filesystem-durable between phases. Phase 3 (Followup) hands surfaced people and software products off to the `people-profile` and `software-profile` bundles via `people:research` and `software:research` issues.",
2044
2134
  appliesWhen: () => true,
2045
2135
  rules: [
2046
2136
  {
@@ -2057,8 +2147,10 @@ var companyProfileBundle = {
2057
2147
  "`company:followup`. All issues carry `type:company-profile`.",
2058
2148
  "",
2059
2149
  "The pipeline produces **company profiles only**. Deeper research",
2060
- "on people or products surfaced in a profile is delegated to",
2061
- "downstream research pipelines via `company:followup` issues.",
2150
+ "on notable people and software products surfaced while profiling",
2151
+ "is delegated to the `people-profile` and `software-profile`",
2152
+ "bundles via `people:research` and `software:research` issues",
2153
+ "opened during Phase 3 (Followup).",
2062
2154
  "",
2063
2155
  "See the `company-profile-analyst` agent definition for full",
2064
2156
  "workflow details, default paths, the company-type taxonomy, and",
@@ -4372,7 +4464,7 @@ var orchestratorBundle = {
4372
4464
  // src/agent/bundles/people-profile.ts
4373
4465
  var peopleProfileAnalystSubAgent = {
4374
4466
  name: "people-profile-analyst",
4375
- description: "Researches an individual person (colleague, customer contact, vendor contact, partner contact, industry expert, or connector) from public sources and produces a structured markdown profile cross-linked to companies, software, and meeting notes. One person per session, tracked by people:* GitHub issue labels.",
4467
+ description: "Researches an individual person (colleague, customer contact, vendor contact, partner contact, industry expert, or connector) from public sources and produces a structured markdown profile cross-linked to companies, software, and meeting notes, then enqueues downstream `company:research` and `software:research` issues for unprofiled companies and software products surfaced during profiling. One person per session, tracked by people:* GitHub issue labels.",
4376
4468
  model: AGENT_MODEL.POWERFUL,
4377
4469
  maxTurns: 80,
4378
4470
  platforms: { cursor: { exclude: true } },
@@ -4422,8 +4514,16 @@ var peopleProfileAnalystSubAgent = {
4422
4514
  "7. **Cross-reference, don't duplicate.** When the profile mentions a",
4423
4515
  " company, software product, or meeting already tracked by the",
4424
4516
  " consuming project, link to the existing artifact rather than",
4425
- " duplicating its content. Do not create downstream research",
4426
- " issues for these cross-references \u2014 only link.",
4517
+ " duplicating its content.",
4518
+ "8. **Follow-up, don't widen scope.** If the session turns up adjacent",
4519
+ " research questions (a significant employer worth profiling, a",
4520
+ " software product the person created or leads), emit a follow-up",
4521
+ " issue rather than expanding the profile beyond its scope.",
4522
+ " Companies are handed off to the `company-profile` bundle via",
4523
+ " `company:research` issues; software products are handed off to",
4524
+ " the `software-profile` bundle via `software:research` issues.",
4525
+ " Meeting notes remain link-only \u2014 this agent never creates",
4526
+ " meeting-research issues.",
4427
4527
  "",
4428
4528
  "---",
4429
4529
  "",
@@ -4451,13 +4551,13 @@ var peopleProfileAnalystSubAgent = {
4451
4551
  "## State Machine Overview",
4452
4552
  "",
4453
4553
  "```",
4454
- "\u250C\u2500\u2500\u2500\u2500\u2500\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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510",
4455
- "\u2502 1. RESEARCH \u2502\u2500\u2500\u2500\u2500\u25B6\u2502 2. DRAFT PROFILE \u2502\u2500\u2500\u2500\u2500\u25B6\u2502 3. FOLLOWUP \u2502",
4456
- "\u2502 Collect public \u2502 \u2502 Write the structured \u2502 \u2502 Cross-link the \u2502",
4457
- "\u2502 sources into a \u2502 \u2502 markdown profile to \u2502 \u2502 profile to existing\u2502",
4458
- "\u2502 bounded notes \u2502 \u2502 the configured path \u2502 \u2502 companies, software\u2502",
4459
- "\u2502 file \u2502 \u2502 \u2502 \u2502 and meeting notes \u2502",
4460
- "\u2514\u2500\u2500\u2500\u2500\u2500\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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518",
4554
+ "\u250C\u2500\u2500\u2500\u2500\u2500\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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510",
4555
+ "\u2502 1. RESEARCH \u2502\u2500\u2500\u2500\u2500\u25B6\u2502 2. DRAFT PROFILE \u2502\u2500\u2500\u2500\u2500\u25B6\u2502 3. FOLLOWUP \u2502",
4556
+ "\u2502 Collect public \u2502 \u2502 Write the structured \u2502 \u2502 Cross-link existing\u2502",
4557
+ "\u2502 sources into a \u2502 \u2502 markdown profile to \u2502 \u2502 artifacts; enqueue \u2502",
4558
+ "\u2502 bounded notes \u2502 \u2502 the configured path \u2502 \u2502 company/software \u2502",
4559
+ "\u2502 file \u2502 \u2502 \u2502 \u2502 research issues \u2502",
4560
+ "\u2514\u2500\u2500\u2500\u2500\u2500\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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518",
4461
4561
  "```",
4462
4562
  "",
4463
4563
  "**Issue labels encode the phase:**",
@@ -4466,19 +4566,21 @@ var peopleProfileAnalystSubAgent = {
4466
4566
  "|-------|-------|-------------|",
4467
4567
  "| `people:research` | 1. Research | Gather public sources. Write a bounded research-notes file. Create the draft issue. |",
4468
4568
  "| `people:draft` | 2. Draft | Read the research notes. Write the structured profile to `<PROFILES_DIR>`. Create the followup issue if warranted. |",
4469
- "| `people:followup` | 3. Followup | Read the profile. Update cross-references to existing companies, software, and meeting notes. No new downstream issues. |",
4569
+ "| `people:followup` | 3. Followup | Read the profile. Update cross-references to existing companies, software, and meeting notes. Enqueue `company:research` and `software:research` issues for unprofiled, genuinely-relevant entities surfaced in the profile. |",
4470
4570
  "",
4471
4571
  "All issues also carry `type:people-profile` and a `status:*` label.",
4472
4572
  "",
4473
4573
  "**Issue count per person cycle:** 1 research + 1 draft + 0\u20131 followup =",
4474
4574
  "**2\u20133 sessions**. The followup phase is skipped when the profile did",
4475
- "not surface any cross-references worth linking.",
4575
+ "not surface any cross-references worth linking and no companies or",
4576
+ "software products warrant downstream research.",
4476
4577
  "",
4477
4578
  "**Shortened paths:**",
4478
4579
  "- Research phase determines the person is out of scope (not",
4479
4580
  " relevant, insufficient public material) \u2192 research issue closes",
4480
4581
  " with a justification and no downstream issues are created \u2192 **1 session**.",
4481
- "- Short profile with no cross-references needed \u2192 **2 sessions**.",
4582
+ "- Short profile with no cross-references and no downstream",
4583
+ " candidates \u2192 **2 sessions**.",
4482
4584
  "",
4483
4585
  "---",
4484
4586
  "",
@@ -4494,8 +4596,8 @@ var peopleProfileAnalystSubAgent = {
4494
4596
  "| `<PROFILES_DIR>` | Final person profile files | `<PEOPLE_ROOT>/profiles/` |",
4495
4597
  "| `<NOTES_DIR>` | Research-notes files from Phase 1 | `<PEOPLE_ROOT>/notes/` |",
4496
4598
  "| `<PERSON_SLUG>` | Short kebab-case slug identifying the person | derived from the person's name |",
4497
- "| `<COMPANIES_DIR>` | Where existing company profiles live (for cross-references) | `docs/companies/profiles/` |",
4498
- "| `<SOFTWARE_DIR>` | Where existing software profiles live (for cross-references) | `docs/software/profiles/` |",
4599
+ "| `<COMPANIES_DIR>` | Where existing company profiles live (for cross-references and duplicate detection during followup) | `docs/companies/profiles/` |",
4600
+ "| `<SOFTWARE_DIR>` | Where existing software profiles live (for cross-references and duplicate detection during followup) | `docs/software/profiles/` |",
4499
4601
  "| `<MEETINGS_DIR>` | Where meeting notes live (for cross-references) | `docs/meetings/` |",
4500
4602
  "",
4501
4603
  "If `docs/project-context.md` specifies a different people-research",
@@ -4709,11 +4811,13 @@ var peopleProfileAnalystSubAgent = {
4709
4811
  " ```",
4710
4812
  "",
4711
4813
  "4. **Decide whether a followup issue is warranted.** Create a",
4712
- " `people:followup` issue (depending on this draft issue) only if",
4713
- " the profile's Candidate Cross-References lists at least one",
4714
- " company, software product, or meeting already tracked by the",
4715
- " consuming project. Otherwise, note in the draft issue's closing",
4716
- " comment that no followup is needed.",
4814
+ " `people:followup` issue (depending on this draft issue) if the",
4815
+ " profile's Candidate Cross-References lists at least one company,",
4816
+ " software product, or meeting \u2014 whether or not the entity is",
4817
+ " already profiled. The followup phase links what exists and",
4818
+ " enqueues downstream research for what doesn't. Only skip the",
4819
+ " followup when the profile surfaced no cross-reference candidates",
4820
+ " at all; note this in the draft issue's closing comment.",
4717
4821
  "",
4718
4822
  "5. **Commit and push** the profile file. Close the draft issue.",
4719
4823
  "",
@@ -4723,11 +4827,17 @@ var peopleProfileAnalystSubAgent = {
4723
4827
  "",
4724
4828
  "**Goal:** Populate the profile's `## Cross-References` section with",
4725
4829
  "links to existing artifacts \u2014 companies, software, meetings \u2014 that",
4726
- "the consuming project already tracks.",
4727
- "",
4728
- "**Budget:** No new web searches. No new downstream research issues.",
4729
- "Read the candidate cross-references, resolve them against the",
4730
- "configured directories, update the profile.",
4830
+ "the consuming project already tracks, **and** enqueue downstream",
4831
+ "`company:research` and `software:research` issues for unprofiled,",
4832
+ "genuinely-relevant companies and software products surfaced in the",
4833
+ "profile. Hand the candidates off to the `company-profile` and",
4834
+ "`software-profile` bundles so they can be researched independently.",
4835
+ "",
4836
+ "**Budget:** No new web searches. Read the candidate cross-references,",
4837
+ "resolve them against the configured directories, update the profile,",
4838
+ "and enqueue downstream research issues where warranted. Markdown",
4839
+ "cross-references in the profile are preserved \u2014 issue creation is",
4840
+ "**additive** on top of the existing cross-reference behavior.",
4731
4841
  "",
4732
4842
  "### Steps",
4733
4843
  "",
@@ -4736,24 +4846,108 @@ var peopleProfileAnalystSubAgent = {
4736
4846
  "2. **Resolve company cross-references.** For each company named in",
4737
4847
  " the profile's research notes or body text, look for a matching",
4738
4848
  " file under `<COMPANIES_DIR>/`. If found, link it under",
4739
- " `## Cross-References > Companies`. If not found, leave a TODO",
4740
- " comment naming the company \u2014 the invoking project's team decides",
4741
- " whether to kick off a separate company-profile pipeline.",
4849
+ " `## Cross-References > Companies` and do **not** open a",
4850
+ " `company:research` issue for it \u2014 the profile already exists.",
4742
4851
  "",
4743
4852
  "3. **Resolve software cross-references.** Same pattern against",
4744
- " `<SOFTWARE_DIR>/`. Link what matches; leave TODOs for what",
4745
- " doesn't.",
4853
+ " `<SOFTWARE_DIR>/`. If found, link under `## Cross-References >",
4854
+ " Software` and do **not** open a `software:research` issue.",
4746
4855
  "",
4747
4856
  "4. **Resolve meeting cross-references.** For meetings the person",
4748
4857
  " participated in, look for a matching file under `<MEETINGS_DIR>/`",
4749
- " by date or slug. Link matches; leave TODOs otherwise.",
4750
- "",
4751
- "5. **Do not open downstream issues.** This pipeline emits no",
4752
- " `company:research`, `research:scope`, or similar issues. Cross-",
4753
- " references are link-only; downstream research is a separate",
4754
- " human decision.",
4755
- "",
4756
- "6. **Commit and push** the updated profile. Close the followup issue.",
4858
+ " by date or slug. Link matches; leave TODOs otherwise. Meeting",
4859
+ " notes are **always link-only** \u2014 this agent never opens",
4860
+ " meeting-research issues.",
4861
+ "",
4862
+ "5. **Enqueue a `company:research` issue per unprofiled, genuinely-",
4863
+ " relevant company.** For each company named in the profile that",
4864
+ " has no matching file under `<COMPANIES_DIR>/`, decide whether it",
4865
+ " warrants a downstream company profile (see restraint guidance",
4866
+ " below). If so, open an issue carrying:",
4867
+ "",
4868
+ " - `type:company-profile`",
4869
+ " - `company:research`",
4870
+ " - `priority:medium`",
4871
+ " - `status:ready`",
4872
+ "",
4873
+ " The issue body must include:",
4874
+ " - A **discovery source** line naming this person profile",
4875
+ " (`Discovered while profiling: <person name>`)",
4876
+ " - A link to the person profile path (`Person profile: <PROFILES_DIR>/<PERSON_SLUG>.md`)",
4877
+ " - Enough identifying metadata \u2014 company name and primary domain/",
4878
+ " website \u2014 that the `company-profile-analyst` agent can begin",
4879
+ " research without revisiting this person profile",
4880
+ "",
4881
+ "6. **Enqueue a `software:research` issue per unprofiled software",
4882
+ " product the person has primary attribution for.** For each",
4883
+ " software product named in the profile with no matching file under",
4884
+ " `<SOFTWARE_DIR>/`, decide whether it warrants a downstream",
4885
+ " software profile (see restraint guidance below). If so, open an",
4886
+ " issue carrying:",
4887
+ "",
4888
+ " - `type:software-profile`",
4889
+ " - `software:research`",
4890
+ " - `priority:medium`",
4891
+ " - `status:ready`",
4892
+ "",
4893
+ " The issue body must include:",
4894
+ " - A **discovery source** line naming this person profile",
4895
+ " (`Discovered while profiling: <person name>`)",
4896
+ " - A link to the person profile path (`Person profile: <PROFILES_DIR>/<PERSON_SLUG>.md`)",
4897
+ " - Enough identifying metadata \u2014 product name and vendor (the",
4898
+ " company that builds or maintains the product) \u2014 that the",
4899
+ " `software-profile-analyst` agent can begin research without",
4900
+ " revisiting this person profile",
4901
+ "",
4902
+ "7. **Avoid duplicates.** Before opening a `company:research` or",
4903
+ " `software:research` issue, verify no existing profile or open",
4904
+ " research issue already covers the candidate:",
4905
+ "",
4906
+ " - Companies: check `<COMPANIES_DIR>/` for a matching profile",
4907
+ " file (by derived slug or by searching the directory for the",
4908
+ " company's name). If a profile exists, reuse it as a cross-",
4909
+ " reference only \u2014 **do not** open a new `company:research` issue.",
4910
+ " - Software: check `<SOFTWARE_DIR>/` the same way. If a profile",
4911
+ " exists, reuse it as a cross-reference only \u2014 **do not** open a",
4912
+ " new `software:research` issue.",
4913
+ " - Also scan open issues carrying the matching `company:research`",
4914
+ " or `software:research` label so this phase never re-opens",
4915
+ " research that is already queued.",
4916
+ "",
4917
+ "8. **Exercise restraint.** Only create downstream issues for",
4918
+ " entities **genuinely relevant** to the person's professional",
4919
+ " identity:",
4920
+ "",
4921
+ " - **Companies:** open an issue for the person's current",
4922
+ " employer, significant past employers (roles of real tenure or",
4923
+ " leadership influence), companies where they sit on the board",
4924
+ " or act as an advisor, and companies they co-founded. Do **not**",
4925
+ " open an issue for every company on their LinkedIn, short",
4926
+ " consulting engagements, or employers tangential to the framing",
4927
+ " of this profile.",
4928
+ " - **Software:** open an issue only for products where the person",
4929
+ " has **primary attribution** \u2014 creator, maintainer, lead PM,",
4930
+ " founding engineer, or otherwise materially influenced the",
4931
+ " product. Do **not** open an issue for software the person",
4932
+ " merely uses, endorses in passing, or lists in a stack. When",
4933
+ " in doubt, leave the candidate as a markdown cross-reference",
4934
+ " and skip the downstream issue.",
4935
+ "",
4936
+ "9. **Assume the peers are present.** This pipeline assumes the",
4937
+ " `company-profile` and `software-profile` bundles are enabled in",
4938
+ " the consuming project. If a consuming project has disabled one",
4939
+ " of them, flag the followup issue with `status:needs-attention`",
4940
+ " and list the candidates that could not be routed \u2014 never invent",
4941
+ " an alternative label taxonomy.",
4942
+ "",
4943
+ "10. **Cross-link** \u2014 update the profile's `## Cross-References`",
4944
+ " section so each company or software entry references either",
4945
+ " the linked profile path (for existing profiles) or the newly-",
4946
+ " created downstream issue number (for candidates that were",
4947
+ " enqueued for research).",
4948
+ "",
4949
+ "11. **Commit and push** the updated profile. Close the followup",
4950
+ " issue.",
4757
4951
  "",
4758
4952
  "---",
4759
4953
  "",
@@ -4764,12 +4958,22 @@ var peopleProfileAnalystSubAgent = {
4764
4958
  "- `<NOTES_DIR>/` \u2014 research-notes files (Phase 1)",
4765
4959
  "- `<PROFILES_DIR>/` \u2014 person profiles (Phase 2, updated in Phase 3)",
4766
4960
  "",
4767
- "The pipeline produces **profiles and notes only**. It does not",
4768
- "create new companies, software evaluations, meeting notes, or any",
4769
- "other downstream artifacts \u2014 it only links to those that already",
4770
- "exist under the configured cross-reference directories. Keep this",
4771
- "boundary clean so the people-profile pipeline stays generic and",
4772
- "cheap to run.",
4961
+ "In Phase 3, this agent also **creates `company:research` and",
4962
+ "`software:research` issues** for companies and software products",
4963
+ "surfaced in the profile that are not already tracked under",
4964
+ "`<COMPANIES_DIR>/` or `<SOFTWARE_DIR>/`. It never writes the",
4965
+ "downstream profiles themselves \u2014 those are the responsibility of the",
4966
+ "`company-profile-analyst` and `software-profile-analyst` agents,",
4967
+ "which pick up the issues this pipeline creates. Meeting notes",
4968
+ "remain link-only across all phases.",
4969
+ "",
4970
+ "The pipeline produces **person profiles and notes only**. Deeper",
4971
+ "research on companies and software products is delegated to",
4972
+ "downstream research pipelines via `company:research` and",
4973
+ "`software:research` issues \u2014 this agent never writes company",
4974
+ "profiles, software profiles, product evaluations, or comparative",
4975
+ "analyses itself. Keep this boundary clean so the people-profile",
4976
+ "pipeline stays generic.",
4773
4977
  "",
4774
4978
  "---",
4775
4979
  "",
@@ -4785,15 +4989,35 @@ var peopleProfileAnalystSubAgent = {
4785
4989
  " encountered in a public source.",
4786
4990
  "- **Cross-reference, don't duplicate.** Link to existing company,",
4787
4991
  " software, and meeting artifacts rather than re-describing them.",
4788
- "- **No downstream issue creation.** Phase 3 emits no new research,",
4789
- " profile, or requirement issues. Only link.",
4992
+ "- **Delegate, don't duplicate.** Unprofiled companies and software",
4993
+ " products surfaced during profiling are handed off to the",
4994
+ " `company-profile` and `software-profile` bundles via",
4995
+ " `company:research` and `software:research` issues in Phase 3 \u2014",
4996
+ " never inlined as company or software profiles in this pipeline.",
4997
+ "- **Check before enqueueing.** Before opening a `company:research`",
4998
+ " or `software:research` issue, verify no existing profile or open",
4999
+ " research issue already covers the candidate. Reuse existing",
5000
+ " profiles as cross-references rather than re-queuing research.",
5001
+ "- **Restrain the queue.** Only enqueue downstream research for",
5002
+ " companies that are a current employer, significant past employer,",
5003
+ " board/advisor role, or co-founded venture \u2014 not every company on",
5004
+ " the person's r\xE9sum\xE9. Only enqueue software research for products",
5005
+ " the person has **primary attribution** for (creator, maintainer,",
5006
+ " lead PM), not products they merely use.",
5007
+ "- **Meetings stay link-only.** Phase 3 never opens meeting-research",
5008
+ " or any other meeting-related issues. Meetings are cross-",
5009
+ " referenced only.",
5010
+ "- **Produce profiles, not requirement or evaluation documents.** Do",
5011
+ " not open `type:requirement` or formal evaluation issues from this",
5012
+ " pipeline. Follow-up research is scoped through `company:research`",
5013
+ " and `software:research` only.",
4790
5014
  "- **Refresh, don't fork.** When a profile exists and is past its",
4791
5015
  " cadence, update in place rather than creating a new slug."
4792
5016
  ].join("\n")
4793
5017
  };
4794
5018
  var profilePersonSkill = {
4795
5019
  name: "profile-person",
4796
- description: "Kick off a people-profile pipeline. Creates a people:research issue for the given person and dispatches Phase 1 (Research) in the people-profile-analyst agent.",
5020
+ description: "Kick off a people-profile pipeline. Creates a people:research issue for the given person and dispatches Phase 1 (Research) in the people-profile-analyst agent. Phase 3 (Followup) enqueues downstream `company:research` and `software:research` issues for unprofiled, genuinely-relevant entities surfaced in the profile.",
4797
5021
  disableModelInvocation: true,
4798
5022
  userInvocable: true,
4799
5023
  context: "fork",
@@ -4855,13 +5079,19 @@ var profilePersonSkill = {
4855
5079
  "- A single person profile under the profiles directory",
4856
5080
  "- Cross-references to existing companies, software, and meetings",
4857
5081
  " tracked elsewhere in the project",
4858
- "- This pipeline produces **profiles only** \u2014 it does not create",
4859
- " companies, software, meetings, or any other downstream artifacts."
5082
+ "- `company:research` issues for unprofiled companies surfaced in",
5083
+ " the profile (handed off to the `company-profile` bundle)",
5084
+ "- `software:research` issues for software products the person has",
5085
+ " primary attribution for (handed off to the `software-profile`",
5086
+ " bundle)",
5087
+ "- This pipeline produces **person profiles only** \u2014 it does not",
5088
+ " write company profiles, software profiles, meeting notes, or any",
5089
+ " other downstream artifacts itself."
4860
5090
  ].join("\n")
4861
5091
  };
4862
5092
  var peopleProfileBundle = {
4863
5093
  name: "people-profile",
4864
- description: "People research and profiling pipeline: research, draft profile, followup. Enabled by default; domain-neutral; filesystem-durable between phases; cross-references existing companies, software, and meeting notes without creating new downstream issues.",
5094
+ description: "People research and profiling pipeline: research, draft profile, followup. Enabled by default; domain-neutral; filesystem-durable between phases. Cross-references existing companies, software, and meeting notes, and Phase 3 (Followup) hands unprofiled, genuinely-relevant companies and software products off to the `company-profile` and `software-profile` bundles via `company:research` and `software:research` issues.",
4865
5095
  appliesWhen: () => true,
4866
5096
  rules: [
4867
5097
  {
@@ -4877,10 +5107,12 @@ var peopleProfileBundle = {
4877
5107
  "GitHub issue labeled `people:research`, `people:draft`, or",
4878
5108
  "`people:followup`. All issues carry `type:people-profile`.",
4879
5109
  "",
4880
- "The pipeline produces **person profiles only**. Cross-references",
4881
- "to companies, software products, and meeting notes are link-only",
4882
- "\u2014 the followup phase never creates new downstream research,",
4883
- "profile, or requirement issues.",
5110
+ "The pipeline produces **person profiles only**. Deeper research",
5111
+ "on companies and software products surfaced while profiling is",
5112
+ "delegated to the `company-profile` and `software-profile`",
5113
+ "bundles via `company:research` and `software:research` issues",
5114
+ "opened during Phase 3 (Followup). Meeting notes remain link-",
5115
+ "only \u2014 the pipeline never creates meeting-research issues.",
4884
5116
  "",
4885
5117
  "See the `people-profile-analyst` agent definition for full",
4886
5118
  "workflow details, default paths, the person-role taxonomy, the",
@@ -4913,7 +5145,7 @@ var peopleProfileBundle = {
4913
5145
  {
4914
5146
  name: "people:followup",
4915
5147
  color: "D4C5F9",
4916
- description: "Phase 3: cross-link the profile to existing companies, software, and meeting notes"
5148
+ description: "Phase 3: cross-link the profile to existing companies, software, and meeting notes, and enqueue follow-up research issues for unprofiled companies and software products"
4917
5149
  }
4918
5150
  ]
4919
5151
  };