@angelmsger/fx 0.14.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +4 -0
  3. package/defaults/tools.yaml +17 -0
  4. package/dist/adapters/channel/wecom-channel-cli/provider.js +27 -0
  5. package/dist/adapters/channel/wecom-channel-cli/provider.js.map +1 -0
  6. package/dist/adapters/git/system-git.js +24 -4
  7. package/dist/adapters/git/system-git.js.map +1 -1
  8. package/dist/adapters/im/wecom-chat-cli/provider.js +52 -0
  9. package/dist/adapters/im/wecom-chat-cli/provider.js.map +1 -0
  10. package/dist/adapters/manifest-source/git-repo.js +8 -5
  11. package/dist/adapters/manifest-source/git-repo.js.map +1 -1
  12. package/dist/application/manifest/lint.js +6 -1
  13. package/dist/application/manifest/lint.js.map +1 -1
  14. package/dist/application/member/list.js +4 -23
  15. package/dist/application/member/list.js.map +1 -1
  16. package/dist/application/member/show.js +9 -2
  17. package/dist/application/member/show.js.map +1 -1
  18. package/dist/application/skill/tool-skills.js +1 -1
  19. package/dist/application/skill/tool-skills.js.map +1 -1
  20. package/dist/application/sync/index.js +29 -15
  21. package/dist/application/sync/index.js.map +1 -1
  22. package/dist/application/workspace/health.js +3 -0
  23. package/dist/application/workspace/health.js.map +1 -1
  24. package/dist/cli/commands/member/list.js +10 -5
  25. package/dist/cli/commands/member/list.js.map +1 -1
  26. package/dist/cli/commands/member/scope-flags.js +10 -0
  27. package/dist/cli/commands/member/scope-flags.js.map +1 -0
  28. package/dist/cli/commands/member/show.js +11 -3
  29. package/dist/cli/commands/member/show.js.map +1 -1
  30. package/dist/cli/render/exceptional.js +1 -0
  31. package/dist/cli/render/exceptional.js.map +1 -1
  32. package/dist/cli/render/tone.js +1 -0
  33. package/dist/cli/render/tone.js.map +1 -1
  34. package/dist/composition/registry.js +4 -0
  35. package/dist/composition/registry.js.map +1 -1
  36. package/dist/domain/capability.js +2 -0
  37. package/dist/domain/capability.js.map +1 -1
  38. package/dist/domain/fuzzy.js +13 -4
  39. package/dist/domain/fuzzy.js.map +1 -1
  40. package/dist/domain/manifest/members.schema.js +37 -0
  41. package/dist/domain/manifest/members.schema.js.map +1 -1
  42. package/dist/domain/manifest/rules/member-classifications.js +112 -0
  43. package/dist/domain/manifest/rules/member-classifications.js.map +1 -0
  44. package/dist/domain/manifest/rules/members.js +2 -1
  45. package/dist/domain/manifest/rules/members.js.map +1 -1
  46. package/dist/domain/manifest/tools.schema.js +2 -2
  47. package/dist/domain/manifest/tools.schema.js.map +1 -1
  48. package/dist/domain/manifest/versioning.js +1 -1
  49. package/dist/domain/manifest/versioning.js.map +1 -1
  50. package/dist/domain/members/account-collisions.js +37 -0
  51. package/dist/domain/members/account-collisions.js.map +1 -0
  52. package/dist/domain/members/classify.js +158 -0
  53. package/dist/domain/members/classify.js.map +1 -0
  54. package/dist/domain/members/owners.js +2 -0
  55. package/dist/domain/members/owners.js.map +1 -1
  56. package/dist/domain/members/resolve.js +27 -13
  57. package/dist/domain/members/resolve.js.map +1 -1
  58. package/dist/domain/semver.js +3 -28
  59. package/dist/domain/semver.js.map +1 -1
  60. package/dist/domain/toolchain/resolve.js +1 -1
  61. package/dist/domain/toolchain/resolve.js.map +1 -1
  62. package/dist/domain/workspace/state.js +11 -1
  63. package/dist/domain/workspace/state.js.map +1 -1
  64. package/dist/ports/git.js +2 -1
  65. package/dist/ports/git.js.map +1 -1
  66. package/package.json +1 -1
  67. package/skills/fx-workspace/SKILL.md +1 -1
  68. package/skills/fx-workspace/references/commands.md +4 -1
  69. package/skills/fx-workspace/references/workspace-tasks.md +3 -0
@@ -0,0 +1,112 @@
1
+ // Schema 2 adds stable business selectors and dated, evidence-backed edges.
2
+ // Check references by scope so a scenario in another area cannot satisfy an assignment.
3
+ import { atLeast } from '../../semver.js';
4
+ export function classificationRules(doc) {
5
+ const problems = [];
6
+ const add = (path, message) => {
7
+ problems.push({ path, message });
8
+ };
9
+ const register = (set, id, path) => {
10
+ if (set.has(id))
11
+ add(path, 'duplicate identifier');
12
+ set.add(id);
13
+ };
14
+ const areas = doc.areas ?? [];
15
+ if (doc.schema_version === 1) {
16
+ checkLegacy(doc, add);
17
+ return problems;
18
+ }
19
+ if (!atLeast(doc.min_cli ?? '', '0.16.0'))
20
+ add('min_cli', 'members schema 2 requires a floor of at least 0.16.0');
21
+ const teams = new Set();
22
+ const functions = new Set();
23
+ doc.teams?.forEach((entry, i) => register(teams, entry.id, `teams[${i}].id`));
24
+ doc.functions?.forEach((entry, i) => register(functions, entry.id, `functions[${i}].id`));
25
+ const people = new Set(doc.people.map((p) => p.id));
26
+ doc.people.forEach((p, i) => {
27
+ if (p.id === 'all')
28
+ add(`people[${i}].id`, 'reserved collective id');
29
+ });
30
+ const areaSelectors = new Set();
31
+ const scenariosByArea = new Map();
32
+ const checkScope = (scope, path, ids) => {
33
+ if (!scope.id)
34
+ add(`${path}.id`, 'required in members schema 2');
35
+ else
36
+ register(ids, scope.id, `${path}.id`);
37
+ const seen = new Set();
38
+ scope.responsible_teams?.forEach((team, i) => {
39
+ const at = `${path}.responsible_teams[${i}]`;
40
+ if (!teams.has(team))
41
+ add(at, 'unknown team id');
42
+ register(seen, team, at);
43
+ });
44
+ };
45
+ areas.forEach((area, i) => {
46
+ const at = `areas[${i}]`;
47
+ checkScope(area, at, areaSelectors);
48
+ if (area.group !== area.id)
49
+ register(areaSelectors, area.group, `${at}.group`);
50
+ const scenarios = new Set();
51
+ if (area.id)
52
+ scenariosByArea.set(area.id, scenarios);
53
+ area.scenarios?.forEach((s, j) => checkScope(s, `${at}.scenarios[${j}]`, scenarios));
54
+ });
55
+ checkRelationships(doc, { people, teams, functions, scenariosByArea }, add);
56
+ return problems;
57
+ }
58
+ function checkLegacy(doc, add) {
59
+ for (const key of ['teams', 'functions', 'memberships', 'assignments'])
60
+ if (doc[key] !== undefined)
61
+ add(key, 'requires members schema 2');
62
+ doc.areas?.forEach((area, i) => {
63
+ for (const [path, scope] of [
64
+ [`areas[${i}]`, area],
65
+ ...(area.scenarios ?? []).map((s, j) => [`areas[${i}].scenarios[${j}]`, s]),
66
+ ])
67
+ for (const key of ['id', 'responsible_teams'])
68
+ if (scope[key] !== undefined)
69
+ add(`${path}.${key}`, 'requires members schema 2');
70
+ });
71
+ }
72
+ function checkRelationships(doc, vocabulary, add) {
73
+ const { people, teams, functions, scenariosByArea } = vocabulary;
74
+ for (const kind of ['memberships', 'assignments']) {
75
+ const seen = new Set();
76
+ doc[kind]?.forEach((r, i) => {
77
+ const at = `${kind}[${i}]`;
78
+ if (!people.has(r.person) && !(kind === 'assignments' && r.person === 'all'))
79
+ add(`${at}.person`, 'unknown person id');
80
+ if (r.person === 'all' && !r.team)
81
+ add(`${at}.team`, 'a collective assignment needs an explicit team');
82
+ if (!r.team && !r.function)
83
+ add(at, 'declare a team or function');
84
+ if (r.team && !teams.has(r.team))
85
+ add(`${at}.team`, 'unknown team id');
86
+ if (r.function && !functions.has(r.function))
87
+ add(`${at}.function`, 'unknown function id');
88
+ if (r.status === 'confirmed' && !r.verified_at)
89
+ add(`${at}.verified_at`, 'required for a confirmed relationship');
90
+ if (r.valid_from && r.valid_until && r.valid_from >= r.valid_until)
91
+ add(`${at}.valid_until`, 'must follow valid_from');
92
+ const scope = kind === 'assignments' ? doc.assignments?.[i] : undefined;
93
+ if (scope && !scenariosByArea.has(scope.area))
94
+ add(`${at}.area`, 'unknown area id');
95
+ if (scope?.scenario && !scenariosByArea.get(scope.area)?.has(scope.scenario))
96
+ add(`${at}.scenario`, 'unknown scenario in this area');
97
+ const key = JSON.stringify([
98
+ r.person,
99
+ r.team,
100
+ r.function,
101
+ scope?.area,
102
+ scope?.scenario,
103
+ r.valid_from,
104
+ r.valid_until,
105
+ ]);
106
+ if (seen.has(key))
107
+ add(at, 'duplicate relationship for the same validity interval');
108
+ seen.add(key);
109
+ });
110
+ }
111
+ }
112
+ //# sourceMappingURL=member-classifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"member-classifications.js","sourceRoot":"","sources":["../../../../src/domain/manifest/rules/member-classifications.ts"],"names":[],"mappings":"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"}
@@ -2,9 +2,10 @@
2
2
  // reference to a person resolves. The reserved id "all" means the whole
3
3
  // team and is never listed under people.
4
4
  import { isSemver } from '../../semver.js';
5
+ import { classificationRules } from './member-classifications.js';
5
6
  const ALL = 'all';
6
7
  export function membersRules(doc) {
7
- const problems = [];
8
+ const problems = classificationRules(doc);
8
9
  if (doc.min_cli !== undefined && !isSemver(doc.min_cli)) {
9
10
  problems.push({ path: 'min_cli', message: 'must be a semantic version' });
10
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"members.js","sourceRoot":"","sources":["../../../../src/domain/manifest/rules/members.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,wEAAwE;AACxE,yCAAyC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,MAAM,GAAG,GAAG,KAAK,CAAC;AAElB,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACxD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,KAAK,KAAK,SAAS;YACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,qBAAqB,KAAK,GAAG,EAAE,CAAC,CAAC;;YAChF,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAsB,EAAQ,EAAE;QAC3D,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACnD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,oCAAoC,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC,CAAC;IACF,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACpC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE;YAC7C,MAAM,EAAE,GAAG,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC;YACzC,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;gBAClE,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"members.js","sourceRoot":"","sources":["../../../../src/domain/manifest/rules/members.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,wEAAwE;AACxE,yCAAyC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,GAAG,GAAG,KAAK,CAAC;AAElB,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,MAAM,QAAQ,GAAc,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACrD,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACxD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,KAAK,KAAK,SAAS;YACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,qBAAqB,KAAK,GAAG,EAAE,CAAC,CAAC;;YAChF,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAsB,EAAQ,EAAE;QAC3D,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACnD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,oCAAoC,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC,CAAC;IACF,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACpC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE;YAC7C,MAAM,EAAE,GAAG,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC;YACzC,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;gBAClE,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -20,7 +20,7 @@ export const installMethod = z
20
20
  .describe('one way to install a tool');
21
21
  export const skillCommand = z
22
22
  .strictObject({
23
- command: commandVector.describe('arguments that install the companion Skill; empty means it ships none'),
23
+ command: commandVector.describe('arguments that install the companion Skill; empty disables automatic Skill installation'),
24
24
  agent_flag: z
25
25
  .string()
26
26
  .optional()
@@ -33,7 +33,7 @@ export const skillCommand = z
33
33
  .describe('how a tool installs its own companion Skill');
34
34
  export const authCommand = z
35
35
  .strictObject({
36
- command: commandVector.describe('arguments that report credential status; empty means no credentials are needed'),
36
+ command: commandVector.describe('arguments that report credential status; empty disables the standalone credential check'),
37
37
  json: jsonExpectation
38
38
  .optional()
39
39
  .describe('a JSON result the status must also report; exit zero alone is otherwise enough'),
@@ -1 +1 @@
1
- {"version":3,"file":"tools.schema.js","sourceRoot":"","sources":["../../../src/domain/manifest/tools.schema.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,yEAAyE;AAEzE,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE3F,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAU,CAAC;AAEnE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC;KAC3B,YAAY,CAAC;IACZ,GAAG,EAAE,CAAC;SACH,IAAI,CAAC,UAAU,CAAC;SAChB,QAAQ,CAAC,wEAAwE,CAAC;IACrF,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,4FAA4F,CAC7F;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,wDAAwD,CAAC;CACtE,CAAC;KACD,QAAQ,CAAC,2BAA2B,CAAC,CAAC;AAEzC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC;KAC1B,YAAY,CAAC;IACZ,OAAO,EAAE,aAAa,CAAC,QAAQ,CAC7B,uEAAuE,CACxE;IACD,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,iFAAiF,CAAC;IAC9F,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,4EAA4E,CAAC;CAC1F,CAAC;KACD,QAAQ,CAAC,6CAA6C,CAAC,CAAC;AAE3D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC;KACzB,YAAY,CAAC;IACZ,OAAO,EAAE,aAAa,CAAC,QAAQ,CAC7B,gFAAgF,CACjF;IACD,IAAI,EAAE,eAAe;SAClB,QAAQ,EAAE;SACV,QAAQ,CAAC,gFAAgF,CAAC;IAC7F,KAAK,EAAE,aAAa;SACjB,QAAQ,EAAE;SACV,QAAQ,CACP,0GAA0G,CAC3G;IACH,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;CACvE,CAAC;KACD,QAAQ,CAAC,iDAAiD,CAAC,CAAC;AAE/D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC;KACzB,KAAK,CAAC;IACL,CAAC,CAAC,YAAY,CAAC;QACb,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,8CAA8C,CAAC;QAC/E,IAAI,EAAE,eAAe;aAClB,QAAQ,EAAE;aACV,QAAQ,CAAC,6EAA6E,CAAC;KAC3F,CAAC;IACF,CAAC,CAAC,YAAY,CAAC;QACb,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,CACP,2FAA2F,CAC5F;KACJ,CAAC;IACF,CAAC,CAAC,YAAY,CAAC;QACb,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACjF,CAAC;CACH,CAAC;KACD,QAAQ,CAAC,sDAAsD,CAAC,CAAC;AAEpE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC;KACvB,YAAY,CAAC;IACZ,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sDAAsD,CAAC;IACtF,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;SAC/B,QAAQ,CACP,oFAAoF,CACrF;IACH,KAAK,EAAE,CAAC;SACL,IAAI,CAAC,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;SACjC,QAAQ,EAAE;SACV,QAAQ,CACP,wGAAwG,CACzG;IACH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC5D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACpE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IACvE,GAAG,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IACtF,OAAO,EAAE,CAAC;SACP,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC,EAAE,CAAC;SACpF,QAAQ,EAAE;SACV,QAAQ,CAAC,2CAA2C,CAAC;IACxD,MAAM,EAAE,WAAW;IACnB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;CACvF,CAAC;KACD,QAAQ,CAAC,yDAAyD,CAAC,CAAC;AAEvE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC;KACxB,YAAY,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IAClF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IACjF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAC9E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACvE,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,mEAAmE,CAAC;IAChF,QAAQ,EAAE,CAAC;SACR,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,qDAAqD,CAAC;IAClE,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,wEAAwE,CAAC;IACrF,YAAY,EAAE,aAAa;SACxB,QAAQ,EAAE;SACV,QAAQ,CACP,oFAAoF,CACrF;IACH,eAAe,EAAE,CAAC;SACf,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,0FAA0F,CAC3F;IACH,OAAO,EAAE,CAAC;SACP,KAAK,CAAC,aAAa,CAAC;SACpB,QAAQ,EAAE;SACV,QAAQ,CAAC,6EAA6E,CAAC;IAC1F,KAAK,EAAE,YAAY,CAAC,QAAQ,EAAE;IAC9B,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE;IAC5B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;CACrF,CAAC;KACD,QAAQ,CAAC,oBAAoB,CAAC,CAAC;AAElC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC;KACzB,YAAY,CAAC;IACZ,cAAc,EAAE,aAAa;IAC7B,OAAO,EAAE,MAAM;IACf,QAAQ,EAAE,CAAC;SACR,YAAY,CAAC;QACZ,YAAY,EAAE,aAAa;aACxB,QAAQ,EAAE;aACV,QAAQ,CAAC,8CAA8C,CAAC;QAC3D,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,uEAAuE,CAAC;QACpF,OAAO,EAAE,CAAC;aACP,KAAK,CAAC,aAAa,CAAC;aACpB,QAAQ,EAAE;aACV,QAAQ,CAAC,+CAA+C,CAAC;QAC5D,KAAK,EAAE,YAAY,CAAC,QAAQ,EAAE;QAC9B,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE;QAC5B,eAAe,EAAE,CAAC;aACf,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,wEAAwE,CAAC;KACtF,CAAC;SACD,QAAQ,EAAE;SACV,QAAQ,CAAC,0DAA0D,CAAC;IACvE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC;CACjF,CAAC;KACD,QAAQ,CACP,mGAAmG,CACpG,CAAC"}
1
+ {"version":3,"file":"tools.schema.js","sourceRoot":"","sources":["../../../src/domain/manifest/tools.schema.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ export const SUPPORTED = {
8
8
  environments: [1, 2],
9
9
  tools: [3],
10
10
  harness: [2],
11
- members: [1],
11
+ members: [1, 2],
12
12
  };
13
13
  export function negotiate(header, cliVersion, supported) {
14
14
  const schema = Number.isInteger(header.schema_version)
@@ -1 +1 @@
1
- {"version":3,"file":"versioning.js","sourceRoot":"","sources":["../../../src/domain/manifest/versioning.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,qFAAqF;AACrF,mFAAmF;AAEnF,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAI5D,MAAM,CAAC,MAAM,SAAS,GAAsD;IAC1E,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACjB,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACpB,KAAK,EAAE,CAAC,CAAC,CAAC;IACV,OAAO,EAAE,CAAC,CAAC,CAAC;IACZ,OAAO,EAAE,CAAC,CAAC,CAAC;CACb,CAAC;AAOF,MAAM,UAAU,SAAS,CACvB,MAAc,EACd,UAAkB,EAClB,SAA4B;IAE5B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC;QACpD,CAAC,CAAE,MAAM,CAAC,cAAyB;QACnC,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC;AACvF,CAAC;AAED,SAAS,SAAS,CAChB,MAA0B,EAC1B,MAA0B,EAC1B,UAAkB,EAClB,SAA4B;IAE5B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;QAAE,OAAO,gBAAgB,CAAC;IAC7D,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;QAAE,OAAO,gBAAgB,CAAC;IAC7D,IACE,MAAM,KAAK,SAAS;QACpB,QAAQ,CAAC,MAAM,CAAC;QAChB,SAAS,CAAC,UAAU,CAAC;QACrB,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC;QAE5B,OAAO,aAAa,CAAC;IACvB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,aAAa,GAAG,CAAC,0BAA0B,EAAE,cAAc,CAAC,CAAC;AAEnE,MAAM,UAAU,gBAAgB,CAC9B,IAAU,EACV,CAAc,EACd,UAAkB;IAElB,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC9C,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;IACnD,MAAM,OAAO,GAAG;QACd,cAAc,EAAE,GAAG,IAAI,iCAAiC,CAAC,CAAC,MAAM,cAAc,UAAU,kBAAkB;QAC1G,cAAc,EAAE,GAAG,IAAI,iCAAiC,CAAC,CAAC,MAAM,cAAc,UAAU,0BAA0B;QAClH,WAAW,EAAE,GAAG,IAAI,yBAAyB,CAAC,CAAC,MAAM,0BAA0B,UAAU,EAAE;KAC5F,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACb,MAAM,SAAS,GACb,CAAC,CAAC,OAAO,KAAK,gBAAgB;QAC5B,CAAC,CAAC;YACE,2EAA2E;YAC3E,GAAG,aAAa;SACjB;QACH,CAAC,CAAC,aAAa,CAAC;IACpB,MAAM,cAAc,GAAG,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,gBAAgB,CAAC;IAC1E,OAAO,IAAI,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE;QAC9C,IAAI,EAAE,cAAc;YAClB,CAAC,CAAC,kKAAkK;YACpK,CAAC,CAAC,sEAAsE;QAC1E,SAAS,EAAE,cAAc;YACvB,CAAC,CAAC;gBACE,iCAAiC;gBACjC,0DAA0D;gBAC1D,sEAAsE;aACvE;YACH,CAAC,CAAC,SAAS;KACd,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"versioning.js","sourceRoot":"","sources":["../../../src/domain/manifest/versioning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export function accountCollisions(doc) {
2
+ const systems = new Map();
3
+ const findings = [];
4
+ doc.people.forEach((p, person) => {
5
+ for (const [system, account] of Object.entries(p.accounts ?? {})) {
6
+ const buckets = systems.get(system) ?? new Map();
7
+ systems.set(system, buckets);
8
+ const { username, id } = typeof account === 'string' ? { username: account, id: undefined } : account;
9
+ const shared = new Set();
10
+ for (const [value, opaque] of [
11
+ [username, false],
12
+ [id, true],
13
+ ]) {
14
+ if (value === undefined)
15
+ continue;
16
+ const key = value.toLowerCase();
17
+ const previous = buckets.get(key) ?? [];
18
+ for (const h of previous) {
19
+ if (h.person !== person &&
20
+ (!opaque || !h.opaque || h.value === value || doc.schema_version === 1))
21
+ shared.add(h.person);
22
+ }
23
+ previous.push({ value, opaque, person });
24
+ buckets.set(key, previous);
25
+ }
26
+ for (const first of shared)
27
+ findings.push({
28
+ kind: 'members',
29
+ code: 'AMBIGUOUS_ACCOUNT',
30
+ path: `people[${person}].accounts`,
31
+ message: `A handle in the same system also matches people[${first}].`,
32
+ });
33
+ }
34
+ });
35
+ return findings;
36
+ }
37
+ //# sourceMappingURL=account-collisions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-collisions.js","sourceRoot":"","sources":["../../../src/domain/members/account-collisions.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiC,CAAC;IACzD,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QAC/B,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;YACjE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,EAAoB,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC7B,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,GACpB,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/E,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;YACjC,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI;gBAC5B,CAAC,QAAQ,EAAE,KAAK,CAAC;gBACjB,CAAC,EAAE,EAAE,IAAI,CAAC;aACF,EAAE,CAAC;gBACX,IAAI,KAAK,KAAK,SAAS;oBAAE,SAAS;gBAClC,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;gBAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBACxC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;oBACzB,IACE,CAAC,CAAC,MAAM,KAAK,MAAM;wBACnB,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,GAAG,CAAC,cAAc,KAAK,CAAC,CAAC;wBAEvE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBACzB,CAAC;gBACD,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC7B,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,MAAM;gBACxB,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,mBAAmB;oBACzB,IAAI,EAAE,UAAU,MAAM,YAAY;oBAClC,OAAO,EAAE,mDAAmD,KAAK,IAAI;iBACtE,CAAC,CAAC;QACP,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,158 @@
1
+ // Resolve business selectors once per query. Each result carries the original
2
+ // evidence and interval from the single edge that satisfied all selectors.
3
+ import { DevkitError } from '../errors.js';
4
+ import { nearest, suggestionHint } from '../fuzzy.js';
5
+ function checkSelector(kind, value, choices) {
6
+ if (value === undefined || choices.includes(value))
7
+ return;
8
+ throw new DevkitError('not_found', `${kind.toUpperCase()}_NOT_FOUND`, `Unknown ${kind} "${value}"`, {
9
+ hint: suggestionHint(nearest(value, choices), `Available ${kind} selectors: ${choices.join(', ') || '(none configured)'}.`),
10
+ nextSteps: ['fx member list --help'],
11
+ });
12
+ }
13
+ function scopeOf(doc, input, today) {
14
+ const areas = doc.areas ?? [];
15
+ checkSelector('area', input.area, areas.flatMap((a) => (a.id ? [a.id, a.group] : [a.group])));
16
+ const area = areas.find((a) => input.area !== undefined && (a.id === input.area || a.group === input.area));
17
+ if (input.scenario && !area)
18
+ throw new DevkitError('usage', 'SCENARIO_REQUIRES_AREA', '--scenario requires --area', {
19
+ nextSteps: ['fx member list --help'],
20
+ });
21
+ const scenarios = area?.scenarios ?? [];
22
+ checkSelector('scenario', input.scenario, scenarios.map((s) => s.id ?? s.name));
23
+ const scenario = scenarios.find((s) => (s.id ?? s.name) === input.scenario);
24
+ checkSelector('team', input.team, (doc.teams ?? []).map((t) => t.id));
25
+ checkSelector('function', input.function, (doc.functions ?? []).map((f) => f.id));
26
+ const asOf = input.asOf ?? today;
27
+ const date = new Date(asOf + 'T00:00:00Z');
28
+ if (!/^\d{4}-\d{2}-\d{2}$/.test(asOf) ||
29
+ Number.isNaN(date.getTime()) ||
30
+ !date.toISOString().startsWith(asOf + 'T'))
31
+ throw new DevkitError('usage', 'INVALID_AS_OF', 'Expected a calendar date in YYYY-MM-DD form', {
32
+ nextSteps: ['fx member show --help'],
33
+ });
34
+ return { area, scenario, asOf };
35
+ }
36
+ function responsibilities(areas) {
37
+ return areas.flatMap((area) => {
38
+ const areaId = area.id ?? area.group;
39
+ const records = (person, role, scope) => person === undefined ? [] : [{ person, role, area: areaId, scenario: scope }];
40
+ return [
41
+ ...records(area.lead, 'lead', null),
42
+ ...(area.scenarios ?? []).flatMap((s) => {
43
+ const id = s.id ?? s.name;
44
+ return [
45
+ ...records(s.dev_lead, 'dev_lead', id),
46
+ ...Object.entries(s.roles ?? {}).flatMap(([role, people]) => people.flatMap((p) => records(p, role, id))),
47
+ ];
48
+ }),
49
+ ];
50
+ });
51
+ }
52
+ function prepareView(doc, input, today) {
53
+ const { area, scenario, asOf } = scopeOf(doc, input, today);
54
+ const teamNames = new Map(doc.teams?.map((t) => [t.id, t.name]));
55
+ const functionNames = new Map(doc.functions?.map((f) => [f.id, f.name]));
56
+ const context = {
57
+ area: area?.id ?? area?.group ?? null,
58
+ scenario: scenario?.id ?? scenario?.name ?? null,
59
+ as_of: asOf,
60
+ };
61
+ const applies = (r) => (!r.valid_from || r.valid_from <= asOf) && (!r.valid_until || asOf < r.valid_until);
62
+ const label = (r) => ({
63
+ ...r,
64
+ team_name: teamNames.get(r.team ?? '') ?? null,
65
+ function_name: functionNames.get(r.function ?? '') ?? null,
66
+ });
67
+ const memberships = (doc.memberships ?? [])
68
+ .filter(applies)
69
+ .map((r) => ({ kind: 'membership', ...label(r) }));
70
+ const inScope = (r) => (!area || r.area === area.id) && (!scenario || !r.scenario || r.scenario === scenario.id);
71
+ const activeAssignments = (doc.assignments ?? []).filter(applies);
72
+ const assignments = activeAssignments
73
+ .filter(inScope)
74
+ .map((r) => ({ kind: 'assignment', ...label(r) }));
75
+ const allRoles = responsibilities(doc.areas ?? []);
76
+ const roles = allRoles.filter((r) => (!area || r.area === context.area) &&
77
+ (!scenario || r.scenario === null || r.scenario === context.scenario));
78
+ const collective = {
79
+ roles: roles.filter((r) => r.person === 'all'),
80
+ assignments: assignments.filter((r) => r.person === 'all'),
81
+ };
82
+ const responsibleTeams = (scope, level) => (scope?.responsible_teams ?? []).map((team) => ({
83
+ team,
84
+ name: teamNames.get(team),
85
+ level,
86
+ scope: scope?.id,
87
+ }));
88
+ const owners = [...responsibleTeams(area, 'area'), ...responsibleTeams(scenario, 'scenario')];
89
+ return {
90
+ context,
91
+ memberships,
92
+ assignments,
93
+ activeAssignments,
94
+ roles,
95
+ allRoles,
96
+ owners,
97
+ collective,
98
+ };
99
+ }
100
+ function classificationState(assignments, configured, ambiguous) {
101
+ if (ambiguous)
102
+ return 'identity_ambiguous';
103
+ const affiliations = assignments.filter((r) => r.team !== undefined);
104
+ if (affiliations.some((r) => r.status === 'confirmed'))
105
+ return 'confirmed';
106
+ const candidates = new Set(affiliations.map((r) => JSON.stringify([r.team, r.function, r.area, r.scenario])));
107
+ if (candidates.size > 1)
108
+ return 'multiple_candidates';
109
+ if (candidates.size === 1)
110
+ return 'candidate';
111
+ return configured ? 'not_covered' : 'not_configured';
112
+ }
113
+ function describePerson(facts, id, configured, ambiguous) {
114
+ const assignments = facts.assignments.filter((r) => r.person === id);
115
+ return {
116
+ context: facts.context,
117
+ memberships: facts.memberships.filter((r) => r.person === id),
118
+ responsible_teams: facts.owners,
119
+ assignments,
120
+ classification: classificationState(assignments, configured, ambiguous),
121
+ legacy_roles: facts.roles.filter((r) => r.person === id),
122
+ collective: facts.collective,
123
+ };
124
+ }
125
+ function listPerson(doc, facts, input, person) {
126
+ const { memberships, assignments, roles, allRoles, context, activeAssignments } = facts;
127
+ const matches = (r) => (!input.team || r.team === input.team) && (!input.function || r.function === input.function);
128
+ const personal = memberships.filter((r) => r.person === person.id);
129
+ const collaboration = assignments.filter((r) => r.person === person.id);
130
+ const relationships = [...(context.area !== null ? [] : personal), ...collaboration].filter(matches);
131
+ const legacy = roles.filter((r) => r.person === person.id);
132
+ if (input.status && input.status !== (person.status ?? 'active'))
133
+ return undefined;
134
+ if ((input.team || input.function) && !relationships.length)
135
+ return undefined;
136
+ if (context.area !== null && !relationships.length && !legacy.length)
137
+ return undefined;
138
+ return {
139
+ id: person.id,
140
+ display: person.display ?? null,
141
+ status: person.status ?? 'active',
142
+ areas: (doc.areas ?? [])
143
+ .filter((a) => allRoles.some((r) => r.person === person.id && r.area === (a.id ?? a.group)) ||
144
+ activeAssignments.some((r) => r.person === person.id && r.area === a.id))
145
+ .map((a) => a.group),
146
+ ...(doc.schema_version === 1 && !input.asOf && !input.scenario
147
+ ? {}
148
+ : { context, relationships }),
149
+ };
150
+ }
151
+ export function memberView(doc, input, today) {
152
+ const facts = prepareView(doc, input, today);
153
+ return {
154
+ describe: (id, ambiguous) => describePerson(facts, id, doc.assignments !== undefined, ambiguous),
155
+ list: (person) => listPerson(doc, facts, input, person),
156
+ };
157
+ }
158
+ //# sourceMappingURL=classify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.js","sourceRoot":"","sources":["../../../src/domain/members/classify.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,8 @@ export function ownersOf(members, repo) {
13
13
  continue;
14
14
  owners.push({
15
15
  area: area.group,
16
+ ...(area.id ? { area_id: area.id } : {}),
17
+ ...(scenario.id ? { scenario_id: scenario.id } : {}),
16
18
  lead: area.lead === undefined ? null : ref(area.lead),
17
19
  scenario: scenario.name,
18
20
  devLead: scenario.dev_lead === undefined ? null : ref(scenario.dev_lead),
@@ -1 +1 @@
1
- {"version":3,"file":"owners.js","sourceRoot":"","sources":["../../../src/domain/members/owners.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"owners.js","sourceRoot":"","sources":["../../../src/domain/members/owners.ts"],"names":[],"mappings":"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"}
@@ -1,35 +1,46 @@
1
1
  // Who is meant by a name. Identifiers are matched exactly and in a fixed
2
2
  // order of trust — an email address is unambiguous, a display name is not —
3
3
  // and only when nothing matches exactly does spelling distance get a say.
4
- import { nearest } from '../fuzzy.js';
4
+ import { nearest, nearestMatches } from '../fuzzy.js';
5
5
  const ORDER = ['email', 'id', 'account', 'display', 'git_name'];
6
- export function findPeople(members, query) {
6
+ export function findPeople(members, query, system) {
7
7
  const q = query.trim().toLowerCase();
8
8
  const matches = [];
9
9
  for (const person of members.people) {
10
- const hit = exactMatch(person, q);
10
+ if (system !== undefined) {
11
+ const account = person.accounts?.[system];
12
+ if (account !== undefined && accountMatches(account, query.trim(), false))
13
+ matches.push({ person, matchedBy: 'account', via: system });
14
+ continue;
15
+ }
16
+ const hit = exactMatch(person, query.trim(), members.schema_version === 1);
11
17
  if (hit !== undefined)
12
18
  matches.push(hit);
13
19
  }
14
20
  if (matches.length > 0)
15
21
  return matches.sort((a, b) => ORDER.indexOf(a.matchedBy) - ORDER.indexOf(b.matchedBy));
22
+ if (system !== undefined)
23
+ return [];
16
24
  const candidates = members.people.flatMap((p) => [
17
25
  p.id,
18
26
  ...(p.display === undefined ? [] : [p.display]),
19
27
  ]);
20
- const near = nearest(q, candidates.map((c) => c.toLowerCase()), 2);
21
- if (near === undefined)
22
- return [];
23
- const person = members.people.find((p) => p.id.toLowerCase() === near || p.display?.toLowerCase() === near);
24
- return person === undefined ? [] : [{ person, matchedBy: 'fuzzy', via: near }];
28
+ const near = new Set(nearestMatches(q, candidates.map((c) => c.toLowerCase()), 2));
29
+ return members.people.flatMap((person) => {
30
+ const via = [person.id, person.display].find((name) => name !== undefined && near.has(name.toLowerCase()));
31
+ return via === undefined
32
+ ? []
33
+ : [{ person, matchedBy: 'fuzzy', via: via.toLowerCase() }];
34
+ });
25
35
  }
26
- function exactMatch(person, q) {
36
+ function exactMatch(person, query, legacy) {
37
+ const q = query.toLowerCase();
27
38
  if (person.email?.toLowerCase() === q)
28
39
  return { person, matchedBy: 'email' };
29
40
  if (person.id.toLowerCase() === q)
30
41
  return { person, matchedBy: 'id' };
31
42
  for (const [system, account] of Object.entries(person.accounts ?? {})) {
32
- if (handlesOf(account).some((h) => h.toLowerCase() === q))
43
+ if (accountMatches(account, query, legacy))
33
44
  return { person, matchedBy: 'account', via: system };
34
45
  }
35
46
  if (person.display !== undefined && person.display.toLowerCase().includes(q))
@@ -39,10 +50,13 @@ function exactMatch(person, q) {
39
50
  return { person, matchedBy: 'git_name', via: gitName };
40
51
  return undefined;
41
52
  }
42
- function handlesOf(account) {
53
+ function accountMatches(account, query, legacy) {
54
+ const username = typeof account === 'string' ? account : account.username;
55
+ if (username?.toLowerCase() === query.toLowerCase())
56
+ return true;
43
57
  if (typeof account === 'string')
44
- return [account];
45
- return [account.username, account.id].filter((h) => h !== undefined);
58
+ return false;
59
+ return legacy ? account.id?.toLowerCase() === query.toLowerCase() : account.id === query;
46
60
  }
47
61
  // A commit author is attributed only on an exact git name or display
48
62
  // name; there is no fuzzy step, and two people sharing a name means nobody.
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/domain/members/resolve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/domain/members/resolve.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,8 @@
1
- // @ts-check
2
1
  // Just enough semver for version floors: parse, compare, and tell a release
3
2
  // from a development build. A prerelease or 0.0.0 is a development build.
4
- // JavaScript, because the release gate runs it before there is a build.
5
- /**
6
- * @typedef {{ major: number, minor: number, patch: number, prerelease?: string }} Semver
7
- */
3
+ // Lenient on purpose: tools print `v1.2.3` or `1.2.3+build`. The release gate
4
+ // does not use it, because a release tag must be exactly `v<version>`.
8
5
  const PATTERN = /^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;
9
- /**
10
- * @param {string} text
11
- * @returns {Semver | undefined}
12
- */
13
6
  export function parseSemver(text) {
14
7
  const m = PATTERN.exec(text.trim());
15
8
  if (m === null)
@@ -17,20 +10,11 @@ export function parseSemver(text) {
17
10
  const base = { major: Number(m[1]), minor: Number(m[2]), patch: Number(m[3]) };
18
11
  return m[4] === undefined ? base : { ...base, prerelease: m[4] };
19
12
  }
20
- /**
21
- * @param {string} text
22
- * @returns {boolean}
23
- */
24
13
  export function isSemver(text) {
25
14
  return parseSemver(text) !== undefined;
26
15
  }
27
- /**
28
- * @param {Semver} a
29
- * @param {Semver} b
30
- * @returns {number}
31
- */
32
16
  export function compareSemver(a, b) {
33
- for (const part of /** @type {const} */ (['major', 'minor', 'patch'])) {
17
+ for (const part of ['major', 'minor', 'patch']) {
34
18
  if (a[part] !== b[part])
35
19
  return a[part] < b[part] ? -1 : 1;
36
20
  }
@@ -42,19 +26,10 @@ export function compareSemver(a, b) {
42
26
  return -1;
43
27
  return a.prerelease < b.prerelease ? -1 : 1;
44
28
  }
45
- /**
46
- * @param {string} text
47
- * @returns {boolean}
48
- */
49
29
  export function isRelease(text) {
50
30
  const v = parseSemver(text);
51
31
  return v !== undefined && v.prerelease === undefined && (v.major | v.minor | v.patch) !== 0;
52
32
  }
53
- /**
54
- * @param {string} version
55
- * @param {string} floor
56
- * @returns {boolean}
57
- */
58
33
  export function atLeast(version, floor) {
59
34
  const v = parseSemver(version);
60
35
  const f = parseSemver(floor);