projscan 3.0.2 → 3.0.4

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 (93) hide show
  1. package/README.md +39 -25
  2. package/dist/cli/commands/dataflow.js +2 -0
  3. package/dist/cli/commands/dataflow.js.map +1 -1
  4. package/dist/cli/commands/evidencePack.js +6 -0
  5. package/dist/cli/commands/evidencePack.js.map +1 -1
  6. package/dist/cli/commands/init.js +143 -1
  7. package/dist/cli/commands/init.js.map +1 -1
  8. package/dist/cli/commands/mcp.js +67 -3
  9. package/dist/cli/commands/mcp.js.map +1 -1
  10. package/dist/cli/commands/review.js +5 -23
  11. package/dist/cli/commands/review.js.map +1 -1
  12. package/dist/cli/commands/start.d.ts +1 -0
  13. package/dist/cli/commands/start.js +79 -0
  14. package/dist/cli/commands/start.js.map +1 -0
  15. package/dist/cli/commands/workplan.js +17 -11
  16. package/dist/cli/commands/workplan.js.map +1 -1
  17. package/dist/cli/index.js +2 -0
  18. package/dist/cli/index.js.map +1 -1
  19. package/dist/core/adoption.d.ts +86 -0
  20. package/dist/core/adoption.js +441 -0
  21. package/dist/core/adoption.js.map +1 -1
  22. package/dist/core/ast.d.ts +8 -0
  23. package/dist/core/ast.js +69 -4
  24. package/dist/core/ast.js.map +1 -1
  25. package/dist/core/bugHunt.js +16 -7
  26. package/dist/core/bugHunt.js.map +1 -1
  27. package/dist/core/dataflow.d.ts +2 -0
  28. package/dist/core/dataflow.js +3 -1
  29. package/dist/core/dataflow.js.map +1 -1
  30. package/dist/core/dataflowFilters.d.ts +1 -0
  31. package/dist/core/dataflowFilters.js +8 -9
  32. package/dist/core/dataflowFilters.js.map +1 -1
  33. package/dist/core/frameworkSources.d.ts +2 -0
  34. package/dist/core/frameworkSources.js +33 -0
  35. package/dist/core/frameworkSources.js.map +1 -0
  36. package/dist/core/indexCache.js +4 -1
  37. package/dist/core/indexCache.js.map +1 -1
  38. package/dist/core/ownership.js +58 -0
  39. package/dist/core/ownership.js.map +1 -1
  40. package/dist/core/pathClassifiers.d.ts +2 -0
  41. package/dist/core/pathClassifiers.js +23 -0
  42. package/dist/core/pathClassifiers.js.map +1 -0
  43. package/dist/core/preflight.js +24 -4
  44. package/dist/core/preflight.js.map +1 -1
  45. package/dist/core/releaseEvidence.d.ts +5 -1
  46. package/dist/core/releaseEvidence.js +332 -4
  47. package/dist/core/releaseEvidence.js.map +1 -1
  48. package/dist/core/review.d.ts +2 -0
  49. package/dist/core/review.js +90 -16
  50. package/dist/core/review.js.map +1 -1
  51. package/dist/core/reviewDataflow.d.ts +10 -2
  52. package/dist/core/reviewDataflow.js +15 -11
  53. package/dist/core/reviewDataflow.js.map +1 -1
  54. package/dist/core/start.d.ts +8 -0
  55. package/dist/core/start.js +156 -0
  56. package/dist/core/start.js.map +1 -0
  57. package/dist/core/taint.js +3 -1
  58. package/dist/core/taint.js.map +1 -1
  59. package/dist/core/workplan.d.ts +2 -1
  60. package/dist/core/workplan.js +77 -3
  61. package/dist/core/workplan.js.map +1 -1
  62. package/dist/index.d.ts +6 -5
  63. package/dist/index.js +4 -3
  64. package/dist/index.js.map +1 -1
  65. package/dist/mcp/tools/adoption.js +7 -3
  66. package/dist/mcp/tools/adoption.js.map +1 -1
  67. package/dist/mcp/tools/dataflow.js +5 -0
  68. package/dist/mcp/tools/dataflow.js.map +1 -1
  69. package/dist/mcp/tools/evidencePack.js +5 -0
  70. package/dist/mcp/tools/evidencePack.js.map +1 -1
  71. package/dist/mcp/tools/review.js +3 -23
  72. package/dist/mcp/tools/review.js.map +1 -1
  73. package/dist/mcp/tools/start.d.ts +2 -0
  74. package/dist/mcp/tools/start.js +58 -0
  75. package/dist/mcp/tools/start.js.map +1 -0
  76. package/dist/mcp/tools.js +2 -0
  77. package/dist/mcp/tools.js.map +1 -1
  78. package/dist/projscan-sbom.cdx.json +6 -6
  79. package/dist/tool-manifest.json +52 -5
  80. package/dist/types.d.ts +119 -0
  81. package/dist/utils/baseline.js +41 -1
  82. package/dist/utils/baseline.js.map +1 -1
  83. package/dist/utils/formatSupport.d.ts +5 -0
  84. package/dist/utils/formatSupport.js +5 -0
  85. package/dist/utils/formatSupport.js.map +1 -1
  86. package/docs/PLUGIN-GALLERY.md +25 -0
  87. package/docs/examples/plugins/api-route-ownership.mjs +60 -0
  88. package/docs/examples/plugins/api-route-ownership.projscan-plugin.json +8 -0
  89. package/docs/examples/plugins/monorepo-boundary.mjs +37 -0
  90. package/docs/examples/plugins/monorepo-boundary.projscan-plugin.json +8 -0
  91. package/docs/examples/plugins/security-sensitive-files.mjs +18 -0
  92. package/docs/examples/plugins/security-sensitive-files.projscan-plugin.json +8 -0
  93. package/package.json +2 -2
@@ -3,6 +3,11 @@ import fs from 'node:fs/promises';
3
3
  import path from 'node:path';
4
4
  import { promisify } from 'node:util';
5
5
  import { PLUGIN_PREVIEW_FLAG, discoverPluginManifests } from './plugins.js';
6
+ import { analyzeHotspots } from './hotspotAnalyzer.js';
7
+ import { collectIssues } from './issueEngine.js';
8
+ import { scanRepository } from './repositoryScanner.js';
9
+ import { saveBaseline } from '../utils/baseline.js';
10
+ import { applyConfigToIssues, loadConfig } from '../utils/config.js';
6
11
  const execFileAsync = promisify(execFile);
7
12
  export const MCP_CLIENT_IDS = [
8
13
  'all',
@@ -16,6 +21,7 @@ export const MCP_CLIENT_IDS = [
16
21
  'zed',
17
22
  'gemini',
18
23
  ];
24
+ export const POLICY_STARTER_TEAMS = ['frontend', 'platform', 'security', 'monorepo'];
19
25
  const INSTALL = {
20
26
  command: 'npm install -g projscan',
21
27
  runWithoutInstall: 'npx projscan',
@@ -133,6 +139,32 @@ export function getWorkflowRecipes() {
133
139
  mcpTools: ['projscan_preflight', 'projscan_workplan'],
134
140
  handoff: 'If preflight returns caution or block, follow suggestedNextActions before editing.',
135
141
  },
142
+ {
143
+ id: 'team_bootstrap',
144
+ name: 'Team Bootstrap',
145
+ useWhen: 'Adopt projscan for a team or new repository.',
146
+ outcome: 'A team policy, PR workflow, ownership starter, baseline memory, MCP setup check, and first start report that make adoption repeatable.',
147
+ commands: [
148
+ 'projscan init team --team platform',
149
+ 'projscan start --mode before_edit --format json',
150
+ 'projscan mcp doctor --client codex --format json',
151
+ ],
152
+ mcpTools: ['projscan_adoption', 'projscan_start'],
153
+ handoff: 'Run init team once, commit the generated policy/workflow/ownership/baseline files, then tune thresholds after the first PR.',
154
+ },
155
+ {
156
+ id: 'pr_automation',
157
+ name: 'PR Automation',
158
+ useWhen: 'Put projscan evidence directly in pull request review.',
159
+ outcome: 'Pull requests receive an approval comment and fail CI only when preflight returns block.',
160
+ commands: [
161
+ 'projscan init github-action',
162
+ 'projscan preflight --mode before_merge --format json',
163
+ 'projscan evidence-pack --pr-comment',
164
+ ],
165
+ mcpTools: ['projscan_preflight', 'projscan_evidence_pack'],
166
+ handoff: 'Treat block as a hard CI failure; use PR comment next actions for caution-level follow-up.',
167
+ },
136
168
  {
137
169
  id: 'bug_hunt',
138
170
  name: 'Bug Hunt',
@@ -389,4 +421,413 @@ async function git(rootPath, args) {
389
421
  maxBuffer: 1024 * 1024,
390
422
  });
391
423
  }
424
+ export function isPolicyStarterTeam(value) {
425
+ return typeof value === 'string' && POLICY_STARTER_TEAMS.includes(value);
426
+ }
427
+ export function getPolicyStarterKit(team) {
428
+ const kit = POLICY_KITS[team];
429
+ return {
430
+ schemaVersion: 1,
431
+ team,
432
+ label: kit.label,
433
+ config: cloneConfig(kit.config),
434
+ nextCommands: [...kit.nextCommands],
435
+ rationale: [...kit.rationale],
436
+ };
437
+ }
438
+ export async function writePolicyStarterKit(rootPath, team, options = {}) {
439
+ const target = path.join(rootPath, '.projscanrc.json');
440
+ const kit = getPolicyStarterKit(team);
441
+ try {
442
+ await fs.access(target);
443
+ if (options.force !== true) {
444
+ return {
445
+ ...kit,
446
+ target,
447
+ created: false,
448
+ reason: '.projscanrc.json already exists; pass --force to overwrite it.',
449
+ };
450
+ }
451
+ }
452
+ catch {
453
+ // file does not exist
454
+ }
455
+ await fs.writeFile(target, `${JSON.stringify(kit.config, null, 2)}\n`, 'utf-8');
456
+ return {
457
+ ...kit,
458
+ target,
459
+ created: true,
460
+ };
461
+ }
462
+ export async function writeTeamStarterKit(rootPath, team, options = {}) {
463
+ const policy = await writePolicyStarterKit(rootPath, team, options);
464
+ const action = await writeGithubActionStarter(rootPath, options);
465
+ const codeowners = await writeCodeownersStarter(rootPath, team, options);
466
+ const baseline = await writeInitialBaseline(rootPath, options);
467
+ return {
468
+ schemaVersion: 1,
469
+ team,
470
+ created: {
471
+ policy: policy.created,
472
+ githubAction: action.created,
473
+ codeowners: codeowners.created,
474
+ baseline: baseline.created,
475
+ },
476
+ files: {
477
+ policy: policy.target,
478
+ githubAction: action.target,
479
+ codeowners: codeowners.target,
480
+ baseline: baseline.target,
481
+ },
482
+ nextCommands: [
483
+ 'projscan start --mode before_edit --format json',
484
+ 'projscan mcp doctor --client codex --format json',
485
+ 'projscan evidence-pack --pr-comment',
486
+ ],
487
+ rationale: [
488
+ 'Bootstraps policy, PR evidence automation, ownership routing, and baseline memory in one command.',
489
+ 'The generated PR workflow posts evidence before enforcing block-only preflight failure.',
490
+ ],
491
+ reasons: [policy.reason, action.reason, codeowners.reason, baseline.reason].filter((item) => typeof item === 'string'),
492
+ onboarding: buildTeamOnboarding(team),
493
+ };
494
+ }
495
+ function buildTeamOnboarding(team) {
496
+ return [
497
+ {
498
+ id: 'review-generated-files',
499
+ title: 'Review generated starter files',
500
+ why: 'Confirm policy thresholds, PR workflow behavior, CODEOWNERS handles, and baseline memory before committing the bootstrap.',
501
+ command: 'git diff -- .projscanrc.json .github/workflows/projscan.yml .github/CODEOWNERS .projscan-baseline.json',
502
+ files: ['.projscanrc.json', '.github/workflows/projscan.yml', '.github/CODEOWNERS', '.projscan-baseline.json'],
503
+ },
504
+ {
505
+ id: 'verify-mcp-setup',
506
+ title: 'Verify MCP setup',
507
+ why: 'Make sure the coding agent can start projscan before the first team PR depends on MCP evidence.',
508
+ command: 'projscan mcp doctor --client codex --format json',
509
+ },
510
+ {
511
+ id: 'open-first-pr',
512
+ title: 'Open the first PR with evidence',
513
+ why: 'The first PR should show the verdict, trust calibration, owner routing, baseline trend, and next commands in one reviewer surface.',
514
+ command: 'projscan evidence-pack --pr-comment',
515
+ },
516
+ {
517
+ id: 'tune-after-baseline',
518
+ title: `Tune the ${team} policy after the first baseline`,
519
+ why: 'Treat cautions as calibration data first; tighten thresholds only after the first real team review.',
520
+ command: 'projscan preflight --mode before_merge --format json',
521
+ },
522
+ ];
523
+ }
524
+ async function writeCodeownersStarter(rootPath, team, options) {
525
+ const target = path.join(rootPath, '.github', 'CODEOWNERS');
526
+ try {
527
+ await fs.access(target);
528
+ if (options.force !== true)
529
+ return { target, created: false, reason: '.github/CODEOWNERS already exists; pass --force to overwrite it.' };
530
+ }
531
+ catch {
532
+ // file does not exist
533
+ }
534
+ await fs.mkdir(path.dirname(target), { recursive: true });
535
+ await fs.writeFile(target, buildCodeownersStarter(team), 'utf-8');
536
+ return { target, created: true };
537
+ }
538
+ function buildCodeownersStarter(team) {
539
+ const owner = TEAM_OWNER_HANDLES[team];
540
+ return [
541
+ '# Generated by projscan init team. Replace these handles with your real owners.',
542
+ `* ${owner}`,
543
+ `src/** ${owner}`,
544
+ `docs/** ${owner}`,
545
+ `.github/** ${owner}`,
546
+ '',
547
+ ].join('\n');
548
+ }
549
+ const TEAM_OWNER_HANDLES = {
550
+ frontend: '@frontend-team',
551
+ platform: '@platform-team',
552
+ security: '@security-team',
553
+ monorepo: '@monorepo-team',
554
+ };
555
+ async function writeInitialBaseline(rootPath, options) {
556
+ const target = path.join(rootPath, '.projscan-baseline.json');
557
+ try {
558
+ await fs.access(target);
559
+ if (options.force !== true)
560
+ return { target, created: false, reason: '.projscan-baseline.json already exists; pass --force to overwrite it.' };
561
+ }
562
+ catch {
563
+ // file does not exist
564
+ }
565
+ const configResult = await loadConfig(rootPath).catch(() => ({ config: { ignore: [] } }));
566
+ const scan = await scanRepository(rootPath, { ignore: configResult.config.ignore });
567
+ const issues = applyConfigToIssues(await collectIssues(rootPath, scan.files), configResult.config);
568
+ const hotspotReport = await analyzeHotspots(rootPath, scan.files, issues, { limit: 20 });
569
+ await saveBaseline(rootPath, issues, hotspotReport);
570
+ return { target, created: true };
571
+ }
572
+ export async function computeMcpSetupDoctor(rootPath, client = 'all') {
573
+ const guide = getMcpConfigGuide(client);
574
+ const configText = guide.client === 'all'
575
+ ? guide.configs.map((entry) => `# ${entry.displayName}\n${entry.configText}`).join('\n\n')
576
+ : guide.configText;
577
+ const whereToPaste = guide.client === 'all'
578
+ ? 'Use the matching client-specific config block.'
579
+ : guide.whereToPaste;
580
+ const checks = [
581
+ checkNodeVersion(),
582
+ {
583
+ id: 'server-command',
584
+ status: 'pass',
585
+ summary: 'MCP server command uses local stdio startup.',
586
+ detail: INSTALL.mcpServerCommand,
587
+ },
588
+ {
589
+ id: 'config-shape',
590
+ status: configText.includes('projscan') && configText.includes('npx') ? 'pass' : 'fail',
591
+ summary: 'Config snippet includes the projscan stdio server.',
592
+ detail: whereToPaste,
593
+ },
594
+ await checkProjectMcpConfig(rootPath, client),
595
+ ];
596
+ const status = checks.some((check) => check.status === 'fail') ? 'fail' : checks.some((check) => check.status === 'warn') ? 'warn' : 'pass';
597
+ return {
598
+ schemaVersion: 1,
599
+ client,
600
+ status,
601
+ summary: `${status}: ${client} MCP setup uses ${INSTALL.mcpServerCommand}`,
602
+ expected: {
603
+ command: INSTALL.mcpServerCommand,
604
+ runWithoutInstall: INSTALL.runWithoutInstall,
605
+ install: INSTALL.command,
606
+ },
607
+ whereToPaste,
608
+ configText,
609
+ checks,
610
+ nextCommands: ['projscan init mcp --client all', `projscan mcp doctor --client ${client} --format json`, 'npx -y projscan mcp'],
611
+ };
612
+ }
613
+ async function checkProjectMcpConfig(rootPath, client) {
614
+ const candidates = clientConfigCandidates(client);
615
+ for (const candidate of candidates) {
616
+ try {
617
+ const raw = await fs.readFile(path.join(rootPath, candidate), 'utf-8');
618
+ return {
619
+ id: 'project-config',
620
+ status: raw.includes('projscan') ? 'pass' : 'warn',
621
+ summary: raw.includes('projscan') ? `Found projscan in ${candidate}.` : `Found ${candidate}, but it does not mention projscan.`,
622
+ detail: candidate,
623
+ };
624
+ }
625
+ catch {
626
+ // try next
627
+ }
628
+ }
629
+ return {
630
+ id: 'project-config',
631
+ status: 'info',
632
+ summary: 'No project-local MCP config found; paste the snippet into the client settings if needed.',
633
+ };
634
+ }
635
+ function clientConfigCandidates(client) {
636
+ if (client === 'cursor')
637
+ return ['.cursor/mcp.json'];
638
+ if (client === 'continue')
639
+ return ['.continue/config.json'];
640
+ if (client === 'codex')
641
+ return ['.codex/config.toml'];
642
+ if (client === 'all')
643
+ return ['.cursor/mcp.json', '.continue/config.json', '.codex/config.toml'];
644
+ return [];
645
+ }
646
+ const POLICY_KITS = {
647
+ frontend: {
648
+ label: 'Frontend team policy',
649
+ config: {
650
+ minScore: 75,
651
+ hotspots: { limit: 12, since: '90 days ago' },
652
+ ignore: ['.next', 'dist', 'build', 'coverage', 'storybook-static'],
653
+ disableRules: [],
654
+ severityOverrides: {
655
+ 'test-missing': 'warning',
656
+ },
657
+ },
658
+ nextCommands: [
659
+ 'projscan start --mode before_edit --format json',
660
+ 'projscan preflight --mode before_edit --format json',
661
+ 'projscan quality-scorecard --format json',
662
+ ],
663
+ rationale: [
664
+ 'Frontend teams need fast feedback on generated build directories and test readiness.',
665
+ 'The starter keeps generated output quiet while still surfacing changed-code risk.',
666
+ ],
667
+ },
668
+ platform: {
669
+ label: 'Platform team policy',
670
+ config: {
671
+ minScore: 80,
672
+ baseRef: 'main',
673
+ hotspots: { limit: 15, since: '120 days ago' },
674
+ ignore: ['dist', 'build', 'coverage', '.turbo', '.cache'],
675
+ disableRules: [],
676
+ },
677
+ nextCommands: [
678
+ 'projscan start --mode before_edit --format json',
679
+ 'projscan workplan --mode before_merge --format json',
680
+ 'projscan regression-plan --level focused --format json',
681
+ ],
682
+ rationale: [
683
+ 'Platform teams usually care about stable merge gates and broad blast radius.',
684
+ 'This starter pins the base ref and keeps hotspot windows wide enough for infrastructure churn.',
685
+ ],
686
+ },
687
+ security: {
688
+ label: 'Security team policy',
689
+ config: {
690
+ minScore: 90,
691
+ baseRef: 'main',
692
+ hotspots: { limit: 20, since: '180 days ago' },
693
+ ignore: ['dist', 'build', 'coverage'],
694
+ disableRules: [],
695
+ severityOverrides: {
696
+ 'unused-dependency': 'warning',
697
+ },
698
+ taint: {
699
+ sources: ['req.body', 'request.json', 'process.env', 'cookies', 'headers'],
700
+ sinks: ['exec', 'eval', 'spawn', 'query', 'raw', 'innerHTML'],
701
+ },
702
+ },
703
+ nextCommands: [
704
+ 'projscan preflight --mode before_edit --format json',
705
+ 'projscan dataflow --format json',
706
+ 'projscan audit --format sarif',
707
+ ],
708
+ rationale: [
709
+ 'Security teams need stricter score thresholds and project-specific taint names.',
710
+ 'The starter keeps custom source/sink expansion explicit and reviewable in git.',
711
+ ],
712
+ },
713
+ monorepo: {
714
+ label: 'Monorepo team policy',
715
+ config: {
716
+ minScore: 80,
717
+ baseRef: 'main',
718
+ hotspots: { limit: 20, since: '120 days ago' },
719
+ ignore: ['dist', 'build', 'coverage', '.turbo', '.nx', '.next'],
720
+ disableRules: [],
721
+ monorepo: {
722
+ importPolicy: [{ from: '*', allow: ['*'] }],
723
+ },
724
+ },
725
+ nextCommands: [
726
+ 'projscan workspaces --format json',
727
+ 'projscan start --mode before_edit --format json',
728
+ 'projscan review --package <name> --format json',
729
+ ],
730
+ rationale: [
731
+ 'Monorepos need package ownership and import boundaries to be visible early.',
732
+ 'The starter makes the policy block explicit so teams can tighten it package by package.',
733
+ ],
734
+ },
735
+ };
736
+ function cloneConfig(config) {
737
+ return JSON.parse(JSON.stringify(config));
738
+ }
739
+ export function getGithubActionStarter() {
740
+ return {
741
+ schemaVersion: 1,
742
+ filename: '.github/workflows/projscan.yml',
743
+ workflow: GITHUB_ACTION_WORKFLOW,
744
+ nextCommands: [
745
+ 'git add .github/workflows/projscan.yml',
746
+ 'git commit -m "ci: add projscan PR workflow"',
747
+ ],
748
+ rationale: [
749
+ 'Runs projscan where review decisions already happen: the pull request.',
750
+ 'Posts the same concise approval evidence that `projscan evidence-pack --pr-comment` prints locally.',
751
+ 'Validates the generated PR comment before posting so the first review surface keeps verdict, trust calibration, routing, and commands intact.',
752
+ 'Fails CI only when the machine-readable preflight verdict is block.',
753
+ 'Keeps the workflow tool-only: no source upload, no API key, no embedded LLM.',
754
+ ],
755
+ };
756
+ }
757
+ export async function writeGithubActionStarter(rootPath, options = {}) {
758
+ const starter = getGithubActionStarter();
759
+ const target = path.join(rootPath, starter.filename);
760
+ try {
761
+ await fs.access(target);
762
+ if (options.force !== true) {
763
+ return {
764
+ ...starter,
765
+ target,
766
+ created: false,
767
+ reason: '.github/workflows/projscan.yml already exists; pass --force to overwrite it.',
768
+ };
769
+ }
770
+ }
771
+ catch {
772
+ // file does not exist
773
+ }
774
+ await fs.mkdir(path.dirname(target), { recursive: true });
775
+ await fs.writeFile(target, starter.workflow, 'utf-8');
776
+ return {
777
+ ...starter,
778
+ target,
779
+ created: true,
780
+ };
781
+ }
782
+ const GITHUB_ACTION_WORKFLOW = `name: projscan
783
+
784
+ on:
785
+ pull_request:
786
+ types: [opened, synchronize, reopened, ready_for_review]
787
+
788
+ permissions:
789
+ contents: read
790
+ pull-requests: write
791
+
792
+ jobs:
793
+ review:
794
+ name: projscan PR evidence
795
+ runs-on: ubuntu-latest
796
+ steps:
797
+ - name: Checkout
798
+ uses: actions/checkout@v5
799
+ with:
800
+ fetch-depth: 0
801
+
802
+ - name: Setup Node.js
803
+ uses: actions/setup-node@v5
804
+ with:
805
+ node-version: 22
806
+
807
+ - name: Orient workflow
808
+ run: npx -y projscan start --mode before_merge --format json --quiet > projscan-start.json
809
+
810
+ - name: Run preflight gate
811
+ run: npx -y projscan preflight --mode before_merge --format json --quiet > projscan-preflight.json
812
+
813
+ - name: Build PR comment
814
+ run: npx -y projscan evidence-pack --pr-comment --quiet > projscan-comment.md
815
+
816
+ - name: Validate PR comment
817
+ run: >
818
+ node -e "const fs = require('node:fs'); const body = fs.readFileSync('projscan-comment.md', 'utf8'); const required = ['## projscan approval evidence', '### Verdict', '### Trust Calibration', '### Baseline Trend', '### Top Risks', '### Team Routing', '### Verification', '### Next Commands']; const missing = required.filter((section) => !body.includes(section)); if (missing.length > 0 || body.length > 65536 || /undefined|\\[object Object\\]/.test(body)) { console.error('Invalid projscan PR comment: ' + missing.join(', ')); process.exit(1); }"
819
+
820
+ - name: Publish PR comment
821
+ if: github.event_name == 'pull_request'
822
+ env:
823
+ GH_TOKEN: \${{ github.token }}
824
+ run: |
825
+ if ! gh pr comment "\${{ github.event.pull_request.number }}" --body-file projscan-comment.md --edit-last; then
826
+ gh pr comment "\${{ github.event.pull_request.number }}" --body-file projscan-comment.md
827
+ fi
828
+
829
+ - name: Enforce preflight verdict
830
+ run: >
831
+ node -e "const fs = require('node:fs'); const r = JSON.parse(fs.readFileSync('projscan-preflight.json', 'utf8')); if (r.verdict === 'block') { console.error(r.summary || 'projscan preflight blocked this change'); process.exit(1); }"
832
+ `;
392
833
  //# sourceMappingURL=adoption.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"adoption.js","sourceRoot":"","sources":["../../src/core/adoption.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adoption.js","sourceRoot":"","sources":["../../src/core/adoption.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,14 @@ export interface FunctionInfo {
40
40
  * language adapter's per-function walker.
41
41
  */
42
42
  callSites?: string[];
43
+ /**
44
+ * Qualified member call sites for JavaScript/TypeScript functions, such as
45
+ * `request.json` or `db.query`. Bare `callSites` remains the stable
46
+ * cross-language field; this keeps receiver-sensitive checks precise.
47
+ */
48
+ memberCallSites?: string[];
49
+ /** Function parameter names when the adapter can recover them. */
50
+ parameters?: string[];
43
51
  /**
44
52
  * Per-function fan-out (1.2.0+): count of distinct callee names from
45
53
  * `callSites`, restricted to names that are defined as functions
package/dist/core/ast.js CHANGED
@@ -148,8 +148,18 @@ function collectFunctions(node, parentClassName, bindingName, out) {
148
148
  const name = nameForFunctionNode(node, parentClassName, bindingName);
149
149
  const line = node.loc?.start.line ?? 0;
150
150
  const endLine = node.loc?.end.line ?? line;
151
- const { cc, callSites, references } = analyzeBabelBody(node);
152
- out.push({ name, line, endLine, cyclomaticComplexity: cc, callSites, references });
151
+ const { cc, callSites, memberCallSites, references } = analyzeBabelBody(node);
152
+ const parameters = functionParamNames(node);
153
+ out.push({
154
+ name,
155
+ line,
156
+ endLine,
157
+ cyclomaticComplexity: cc,
158
+ callSites,
159
+ memberCallSites,
160
+ parameters,
161
+ references,
162
+ });
153
163
  // Recurse into nested functions so they emit their own entries. The body
154
164
  // walker (`countCcInBody`) skips nested functions for CC, but we still need
155
165
  // to descend the whole tree to find all functions.
@@ -251,9 +261,10 @@ function nameForFunctionNode(node, parentClassName, bindingName) {
251
261
  function analyzeBabelBody(fnNode) {
252
262
  const body = fnNode.body;
253
263
  if (!body)
254
- return { cc: 1, callSites: [], references: [] };
264
+ return { cc: 1, callSites: [], memberCallSites: [], references: [] };
255
265
  let decisions = 0;
256
266
  const calls = new Set();
267
+ const memberCalls = new Set();
257
268
  const refs = new Set();
258
269
  // MemberExpression nodes that ARE in callee position get their rightmost
259
270
  // identifier added to callSites instead of references — track them here so
@@ -269,6 +280,9 @@ function analyzeBabelBody(fnNode) {
269
280
  const name = babelCalleeName(callee);
270
281
  if (name)
271
282
  calls.add(name);
283
+ const memberName = babelQualifiedMemberName(callee);
284
+ if (memberName)
285
+ memberCalls.add(memberName);
272
286
  if (callee && (callee.type === 'MemberExpression' || callee.type === 'OptionalMemberExpression')) {
273
287
  calleeMembers.add(callee);
274
288
  }
@@ -279,7 +293,35 @@ function analyzeBabelBody(fnNode) {
279
293
  collectMemberReadIdents(n, refs);
280
294
  }
281
295
  });
282
- return { cc: decisions + 1, callSites: [...calls], references: [...refs] };
296
+ return {
297
+ cc: decisions + 1,
298
+ callSites: [...calls],
299
+ memberCallSites: [...memberCalls],
300
+ references: [...refs],
301
+ };
302
+ }
303
+ function functionParamNames(fnNode) {
304
+ const params = fnNode.params ?? [];
305
+ const out = new Set();
306
+ for (const param of params) {
307
+ const name = bindingIdentifierName(param);
308
+ if (name)
309
+ out.add(name);
310
+ }
311
+ return [...out];
312
+ }
313
+ function bindingIdentifierName(node) {
314
+ if (!node)
315
+ return null;
316
+ if (node.type === 'Identifier')
317
+ return node.name ?? null;
318
+ if (node.type === 'AssignmentPattern') {
319
+ return bindingIdentifierName(node.left);
320
+ }
321
+ if (node.type === 'RestElement') {
322
+ return bindingIdentifierName(node.argument);
323
+ }
324
+ return null;
283
325
  }
284
326
  /**
285
327
  * Walk a member-expression chain (`a.b.c`, `req.body.x`, `process.env.SECRET`)
@@ -311,6 +353,29 @@ function babelCalleeName(node) {
311
353
  }
312
354
  return null;
313
355
  }
356
+ function babelQualifiedMemberName(node) {
357
+ if (!node || (node.type !== 'MemberExpression' && node.type !== 'OptionalMemberExpression')) {
358
+ return null;
359
+ }
360
+ const member = node;
361
+ if (member.computed || !member.object || !member.property)
362
+ return null;
363
+ const objectName = babelMemberObjectName(member.object);
364
+ const propertyName = babelMemberPropertyName(member.property);
365
+ return objectName && propertyName ? `${objectName}.${propertyName}` : null;
366
+ }
367
+ function babelMemberObjectName(node) {
368
+ if (node.type === 'Identifier' || node.type === 'ThisExpression')
369
+ return babelCalleeName(node);
370
+ return babelQualifiedMemberName(node);
371
+ }
372
+ function babelMemberPropertyName(node) {
373
+ if (node.type === 'Identifier')
374
+ return node.name ?? null;
375
+ if (node.type === 'StringLiteral')
376
+ return node.value ?? null;
377
+ return null;
378
+ }
314
379
  function walkChildren(node, visit) {
315
380
  if (!node || typeof node !== 'object')
316
381
  return;