projscan 4.9.3 → 4.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -8
- package/dist/analyzers/securityCheck.js +33 -15
- package/dist/analyzers/securityCheck.js.map +1 -1
- package/dist/analyzers/supplyChainCheck.js +9 -2
- package/dist/analyzers/supplyChainCheck.js.map +1 -1
- package/dist/cli/commands/assess.d.ts +3 -0
- package/dist/cli/commands/assess.js +143 -0
- package/dist/cli/commands/assess.js.map +1 -0
- package/dist/cli/commands/bugHunt.js +3 -1
- package/dist/cli/commands/bugHunt.js.map +1 -1
- package/dist/cli/commands/ci.js +29 -13
- package/dist/cli/commands/ci.js.map +1 -1
- package/dist/cli/commands/dogfood.js +2 -0
- package/dist/cli/commands/dogfood.js.map +1 -1
- package/dist/cli/commands/feedback.js +21 -2
- package/dist/cli/commands/feedback.js.map +1 -1
- package/dist/cli/commands/init.js +3 -0
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/route.js +3 -2
- package/dist/cli/commands/route.js.map +1 -1
- package/dist/cli/commands/simulate.d.ts +3 -0
- package/dist/cli/commands/simulate.js +125 -0
- package/dist/cli/commands/simulate.js.map +1 -0
- package/dist/cli/registerCommands.js +4 -0
- package/dist/cli/registerCommands.js.map +1 -1
- package/dist/core/adoption.js +50 -21
- package/dist/core/adoption.js.map +1 -1
- package/dist/core/agentBrief.js +2 -1
- package/dist/core/agentBrief.js.map +1 -1
- package/dist/core/assess.d.ts +9 -0
- package/dist/core/assess.js +119 -0
- package/dist/core/assess.js.map +1 -0
- package/dist/core/bugHunt.js +51 -22
- package/dist/core/bugHunt.js.map +1 -1
- package/dist/core/bugHuntHotspotFindings.js +2 -1
- package/dist/core/bugHuntHotspotFindings.js.map +1 -1
- package/dist/core/ciGate.d.ts +10 -0
- package/dist/core/ciGate.js +21 -0
- package/dist/core/ciGate.js.map +1 -0
- package/dist/core/dogfood.d.ts +1 -0
- package/dist/core/dogfood.js +42 -20
- package/dist/core/dogfood.js.map +1 -1
- package/dist/core/dogfoodDiscovery.d.ts +8 -0
- package/dist/core/dogfoodDiscovery.js +119 -0
- package/dist/core/dogfoodDiscovery.js.map +1 -0
- package/dist/core/feedback.js +73 -5
- package/dist/core/feedback.js.map +1 -1
- package/dist/core/fileInspectionReport.js +37 -0
- package/dist/core/fileInspectionReport.js.map +1 -1
- package/dist/core/intentRouterArchitectureKeywordWeights.d.ts +1 -0
- package/dist/core/intentRouterArchitectureKeywordWeights.js +69 -0
- package/dist/core/intentRouterArchitectureKeywordWeights.js.map +1 -0
- package/dist/core/intentRouterCatalog.js +85 -31
- package/dist/core/intentRouterCatalog.js.map +1 -1
- package/dist/core/intentRouterDependencyKeywordWeights.d.ts +1 -0
- package/dist/core/intentRouterDependencyKeywordWeights.js +100 -0
- package/dist/core/intentRouterDependencyKeywordWeights.js.map +1 -0
- package/dist/core/intentRouterFileImpactKeywordWeights.d.ts +1 -0
- package/dist/core/intentRouterFileImpactKeywordWeights.js +92 -0
- package/dist/core/intentRouterFileImpactKeywordWeights.js.map +1 -0
- package/dist/core/intentRouterKeywordEarlyGuards.js +8 -3
- package/dist/core/intentRouterKeywordEarlyGuards.js.map +1 -1
- package/dist/core/intentRouterKeywordSearchGuards.js +28 -24
- package/dist/core/intentRouterKeywordSearchGuards.js.map +1 -1
- package/dist/core/intentRouterKeywordToolGuards.js +43 -0
- package/dist/core/intentRouterKeywordToolGuards.js.map +1 -1
- package/dist/core/intentRouterKeywordWeights.js +40 -1222
- package/dist/core/intentRouterKeywordWeights.js.map +1 -1
- package/dist/core/intentRouterOperationalKeywordWeights.d.ts +1 -0
- package/dist/core/intentRouterOperationalKeywordWeights.js +203 -0
- package/dist/core/intentRouterOperationalKeywordWeights.js.map +1 -0
- package/dist/core/intentRouterPlanningSignals.js +4 -1
- package/dist/core/intentRouterPlanningSignals.js.map +1 -1
- package/dist/core/intentRouterPrDiffKeywords.d.ts +4 -0
- package/dist/core/intentRouterPrDiffKeywords.js +64 -0
- package/dist/core/intentRouterPrDiffKeywords.js.map +1 -0
- package/dist/core/intentRouterPrDiffSignals.js +6 -0
- package/dist/core/intentRouterPrDiffSignals.js.map +1 -1
- package/dist/core/intentRouterProductImprovementSignals.d.ts +1 -0
- package/dist/core/intentRouterProductImprovementSignals.js +48 -0
- package/dist/core/intentRouterProductImprovementSignals.js.map +1 -0
- package/dist/core/intentRouterRegressionKeywordMatches.js +3 -0
- package/dist/core/intentRouterRegressionKeywordMatches.js.map +1 -1
- package/dist/core/intentRouterRegressionKeywordWeights.d.ts +1 -0
- package/dist/core/intentRouterRegressionKeywordWeights.js +118 -0
- package/dist/core/intentRouterRegressionKeywordWeights.js.map +1 -0
- package/dist/core/intentRouterReleaseSignals.d.ts +1 -0
- package/dist/core/intentRouterReleaseSignals.js +47 -0
- package/dist/core/intentRouterReleaseSignals.js.map +1 -1
- package/dist/core/intentRouterReviewSignals.d.ts +1 -0
- package/dist/core/intentRouterReviewSignals.js +23 -1
- package/dist/core/intentRouterReviewSignals.js.map +1 -1
- package/dist/core/intentRouterSearchKeywordWeights.d.ts +1 -0
- package/dist/core/intentRouterSearchKeywordWeights.js +407 -0
- package/dist/core/intentRouterSearchKeywordWeights.js.map +1 -0
- package/dist/core/intentRouterSecurityKeywordWeights.d.ts +1 -0
- package/dist/core/intentRouterSecurityKeywordWeights.js +50 -0
- package/dist/core/intentRouterSecurityKeywordWeights.js.map +1 -0
- package/dist/core/intentRouterTrustFeedbackKeywordWeights.d.ts +1 -0
- package/dist/core/intentRouterTrustFeedbackKeywordWeights.js +222 -0
- package/dist/core/intentRouterTrustFeedbackKeywordWeights.js.map +1 -0
- package/dist/core/intentRouterUnderstandSignals.js +1 -0
- package/dist/core/intentRouterUnderstandSignals.js.map +1 -1
- package/dist/core/intentRouterWorkSignals.js +3 -0
- package/dist/core/intentRouterWorkSignals.js.map +1 -1
- package/dist/core/intentRouterWorkflowKeywordWeights.d.ts +1 -0
- package/dist/core/intentRouterWorkflowKeywordWeights.js +124 -0
- package/dist/core/intentRouterWorkflowKeywordWeights.js.map +1 -0
- package/dist/core/issueEngine.js +46 -2
- package/dist/core/issueEngine.js.map +1 -1
- package/dist/core/memory.d.ts +2 -0
- package/dist/core/memory.js +33 -1
- package/dist/core/memory.js.map +1 -1
- package/dist/core/preflightChangedFiles.d.ts +3 -0
- package/dist/core/preflightChangedFiles.js +13 -0
- package/dist/core/preflightChangedFiles.js.map +1 -1
- package/dist/core/preflightEvidence.d.ts +3 -0
- package/dist/core/preflightEvidence.js +3 -0
- package/dist/core/preflightEvidence.js.map +1 -1
- package/dist/core/privacy.d.ts +2 -0
- package/dist/core/privacy.js +10 -0
- package/dist/core/privacy.js.map +1 -1
- package/dist/core/proofCards.d.ts +10 -0
- package/dist/core/proofCards.js +222 -0
- package/dist/core/proofCards.js.map +1 -0
- package/dist/core/qualityScorecard.js +25 -13
- package/dist/core/qualityScorecard.js.map +1 -1
- package/dist/core/riskDelta.d.ts +19 -0
- package/dist/core/riskDelta.js +77 -0
- package/dist/core/riskDelta.js.map +1 -0
- package/dist/core/simulate.d.ts +6 -0
- package/dist/core/simulate.js +298 -0
- package/dist/core/simulate.js.map +1 -0
- package/dist/core/startEvidence.js +26 -1
- package/dist/core/startEvidence.js.map +1 -1
- package/dist/core/startFixedRouteCriteria.js +5 -0
- package/dist/core/startFixedRouteCriteria.js.map +1 -1
- package/dist/core/startInputs.d.ts +3 -0
- package/dist/core/startMissionPolicy.d.ts +1 -1
- package/dist/core/startMissionPolicy.js +18 -7
- package/dist/core/startMissionPolicy.js.map +1 -1
- package/dist/core/startMode.js +17 -4
- package/dist/core/startMode.js.map +1 -1
- package/dist/core/startReportBuilder.js +1 -1
- package/dist/core/startReportBuilder.js.map +1 -1
- package/dist/core/startReviewGate.js +26 -4
- package/dist/core/startReviewGate.js.map +1 -1
- package/dist/core/startRouteActions.js +6 -0
- package/dist/core/startRouteActions.js.map +1 -1
- package/dist/core/understand.js +60 -13
- package/dist/core/understand.js.map +1 -1
- package/dist/core/workplan.js +99 -17
- package/dist/core/workplan.js.map +1 -1
- package/dist/mcp/toolCatalog.js +4 -0
- package/dist/mcp/toolCatalog.js.map +1 -1
- package/dist/mcp/tools/assess.d.ts +2 -0
- package/dist/mcp/tools/assess.js +42 -0
- package/dist/mcp/tools/assess.js.map +1 -0
- package/dist/mcp/tools/simulate.d.ts +2 -0
- package/dist/mcp/tools/simulate.js +32 -0
- package/dist/mcp/tools/simulate.js.map +1 -0
- package/dist/projscan-sbom.cdx.json +6 -6
- package/dist/publicCore.d.ts +2 -0
- package/dist/publicCore.js +2 -0
- package/dist/publicCore.js.map +1 -1
- package/dist/reporters/ciIssueDetails.d.ts +10 -0
- package/dist/reporters/ciIssueDetails.js +37 -0
- package/dist/reporters/ciIssueDetails.js.map +1 -0
- package/dist/reporters/consoleCiReporter.d.ts +2 -1
- package/dist/reporters/consoleCiReporter.js +26 -9
- package/dist/reporters/consoleCiReporter.js.map +1 -1
- package/dist/reporters/consoleFileReporter.js +10 -0
- package/dist/reporters/consoleFileReporter.js.map +1 -1
- package/dist/reporters/consoleHealthReporter.js +3 -1
- package/dist/reporters/consoleHealthReporter.js.map +1 -1
- package/dist/reporters/jsonReporter.d.ts +2 -1
- package/dist/reporters/jsonReporter.js +17 -10
- package/dist/reporters/jsonReporter.js.map +1 -1
- package/dist/reporters/markdownFileReporter.js +11 -0
- package/dist/reporters/markdownFileReporter.js.map +1 -1
- package/dist/reporters/markdownHealthReporter.d.ts +2 -1
- package/dist/reporters/markdownHealthReporter.js +5 -5
- package/dist/reporters/markdownHealthReporter.js.map +1 -1
- package/dist/reporters/scoreBreakdownReporter.d.ts +2 -0
- package/dist/reporters/scoreBreakdownReporter.js +24 -0
- package/dist/reporters/scoreBreakdownReporter.js.map +1 -0
- package/dist/tool-manifest.json +52 -3
- package/dist/types/analysis.d.ts +21 -1
- package/dist/types/assess.d.ts +91 -0
- package/dist/types/assess.js +2 -0
- package/dist/types/assess.js.map +1 -0
- package/dist/types/bugHunt.d.ts +3 -0
- package/dist/types/config.d.ts +9 -0
- package/dist/types/dogfood.d.ts +15 -1
- package/dist/types/inspection.d.ts +3 -0
- package/dist/types/preflight.d.ts +3 -0
- package/dist/types/simulate.d.ts +41 -0
- package/dist/types/simulate.js +2 -0
- package/dist/types/simulate.js.map +1 -0
- package/dist/types/startMissionControl.d.ts +3 -0
- package/dist/types/startMissionReview.d.ts +2 -0
- package/dist/types/workplan.d.ts +1 -0
- package/dist/types.d.ts +2 -0
- package/dist/utils/ciFailOn.d.ts +5 -0
- package/dist/utils/ciFailOn.js +12 -0
- package/dist/utils/ciFailOn.js.map +1 -0
- package/dist/utils/config.js +3 -1
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/configBasics.d.ts +2 -0
- package/dist/utils/configBasics.js +21 -0
- package/dist/utils/configBasics.js.map +1 -1
- package/dist/utils/configIssueRules.js +64 -0
- package/dist/utils/configIssueRules.js.map +1 -1
- package/dist/utils/formatSupport.d.ts +2 -0
- package/dist/utils/formatSupport.js +2 -0
- package/dist/utils/formatSupport.js.map +1 -1
- package/dist/utils/scoreCalculator.js +77 -16
- package/dist/utils/scoreCalculator.js.map +1 -1
- package/docs/GUIDE.md +55 -7
- package/package.json +1 -1
package/docs/GUIDE.md
CHANGED
|
@@ -126,11 +126,25 @@ and a before-edit gate instead of a free-form plan.
|
|
|
126
126
|
projscan bug-hunt --format json
|
|
127
127
|
projscan preflight --mode before_commit --format json
|
|
128
128
|
projscan evidence-pack --pr-comment
|
|
129
|
+
projscan assess --goal "make this repo safer to ship this week"
|
|
130
|
+
projscan assess --mode fix-first --format markdown
|
|
131
|
+
projscan simulate --plan "split bugHunt.ts into ranking, evidence, and output modules"
|
|
129
132
|
```
|
|
130
133
|
|
|
131
134
|
Success criteria: concrete fix targets, manual review gates, and proof commands
|
|
132
135
|
are separated before a reviewer sees the work.
|
|
133
136
|
|
|
137
|
+
`projscan assess` turns those same signals into Proof Cards with evidence,
|
|
138
|
+
impact, a safe change shape, verification commands, feedback or suppression
|
|
139
|
+
guidance, and a risk delta. Add `--baseline previous-assess.json` to compare
|
|
140
|
+
the current risk delta against a prior run. It does not release, tag, publish,
|
|
141
|
+
or deploy.
|
|
142
|
+
|
|
143
|
+
`projscan simulate --plan "<change plan>"` is the next step when the safest
|
|
144
|
+
fix shape is a refactor, extraction, or module split. It predicts likely files,
|
|
145
|
+
affected tests, contract surfaces, rollout steps, proof commands, and projected
|
|
146
|
+
risk delta from local evidence. It is read-only and does not execute the plan.
|
|
147
|
+
|
|
134
148
|
### Before release-candidate review
|
|
135
149
|
|
|
136
150
|
```bash
|
|
@@ -234,6 +248,8 @@ When the agent first opens a repo, or before starting a refactor, the question i
|
|
|
234
248
|
- **`projscan_bug_hunt` / `projscan bug-hunt`** — bug-hunt action queue. Combines doctor issues, preflight, hotspots, and session coordination into ranked actions with verification commands; release-scale-only findings print as manual review/sign-off work while preserving JSON verdict compatibility, and pure hotspot churn stays as watchlist/top-suspect evidence when health and gates are clean.
|
|
235
249
|
- **`projscan_agent_brief` / `projscan agent-brief`** — compact next-agent context packet with focus items, repo context, coordination hints, guardrails, and suggested next actions.
|
|
236
250
|
- **`projscan_quality_scorecard` / `projscan quality-scorecard`** — dimensioned quality view across health, security, tests, maintainability, coordination, top risks, and verification commands.
|
|
251
|
+
- **`projscan_assess` / `projscan assess`** — proof-first assessment. Composes quality-scorecard, bug-hunt, and preflight into Proof Cards with local evidence, impact, a safe fix shape, verification commands, feedback or suppression guidance, and risk delta. Use `projscan assess --goal "make this repo safer to ship this week"` for a broad weekly pass, `projscan assess --mode fix-first --format markdown` when you want one or two next actions instead of a long list, or `--baseline previous-assess.json` to compare against a prior assessment. The command is read-only and does not release, tag, publish, or deploy.
|
|
252
|
+
- **`projscan_simulate` / `projscan simulate`** — risk delta simulator. Evaluates a proposed change plan before editing and returns likely touched files, affected tests, contract surfaces, rollout steps, proof commands, confidence, and projected before/after risk. Use `projscan simulate --plan "split bugHunt.ts into ranking, evidence, and output modules"` before doing a refactor. The command is read-only and does not execute the plan.
|
|
237
253
|
- **`projscan_understand` / `projscan understand`** — cited repo-comprehension surface. Returns repo maps, runtime flow maps, contract maps, change-readiness guidance, verification tiers, unknowns, read-first files, and exact next commands.
|
|
238
254
|
- **`projscan_adoption` / `projscan init team` / `projscan init mcp` / `projscan mcp doctor` / `projscan init policy` / `projscan init github-action` / `projscan recipes` / `projscan first-run` / `projscan telemetry` / `projscan dogfood`** — adoption layer. Returns MCP client config snippets, setup verification, policy starters, PR workflow scaffolding with validated PR comments and block-only enforcement, baseline memory, ownership routing, first-PR onboarding steps, repeatable team-bootstrap and PR-automation recipes, multi-repo dogfood evidence, measured reviewer feedback, default-off telemetry controls, adoption trial reports, and setup diagnostics.
|
|
239
255
|
- **`projscan_release_train` / `projscan release-train`** — product-line readiness planner. Plans upcoming product lines with version, scope, readiness, and next-action evidence.
|
|
@@ -551,13 +567,14 @@ Natural follow-up to `projscan hotspots` - once hotspots tells you _which_ file
|
|
|
551
567
|
projscan ci
|
|
552
568
|
```
|
|
553
569
|
|
|
554
|
-
A CI-pipeline-friendly health gate. Runs the full health check and exits with code 1 if the score falls below a threshold. No spinners or banners - clean output for CI logs.
|
|
570
|
+
A CI-pipeline-friendly health gate. Runs the full health check and exits with code 1 if the score falls below a threshold and at least one finding meets the `failOn` severity floor. No spinners or banners - clean output for CI logs.
|
|
555
571
|
|
|
556
572
|
**Options:**
|
|
557
573
|
|
|
558
574
|
| Flag | Description | Default |
|
|
559
575
|
| ------------------ | ------------------------------------------------ | ----------------------------------------------------------- |
|
|
560
576
|
| `--min-score <n>` | Minimum passing score (0–100) | `minScore` from `.projscanrc`, else 70 |
|
|
577
|
+
| `--fail-on <severity>` | Lowest severity that can fail a below-threshold gate: `info`, `warning`, or `error` | `failOn` from `.projscanrc`, else `warning` |
|
|
561
578
|
| `--changed-only` | Gate only on issues in files changed vs base ref | off |
|
|
562
579
|
| `--base-ref <ref>` | Git base ref for `--changed-only` | auto (origin/main → origin/master → main → master → HEAD~1) |
|
|
563
580
|
|
|
@@ -566,7 +583,7 @@ A CI-pipeline-friendly health gate. Runs the full health check and exits with co
|
|
|
566
583
|
```bash
|
|
567
584
|
$ projscan ci --min-score 80
|
|
568
585
|
|
|
569
|
-
projscan: B (82/100) - 0 errors, 2 warnings, 1 info - PASS (threshold: 80)
|
|
586
|
+
projscan: B (82/100) - 0 errors, 2 warnings, 1 info - PASS (threshold: 80, failOn: warning)
|
|
570
587
|
```
|
|
571
588
|
|
|
572
589
|
<img src="npx%20projscan%20ci%20--min-score%2070.gif" alt="npx projscan ci" width="700">
|
|
@@ -574,7 +591,8 @@ projscan: B (82/100) - 0 errors, 2 warnings, 1 info - PASS (threshold: 80)
|
|
|
574
591
|
**Exit codes:**
|
|
575
592
|
|
|
576
593
|
- `0` - Score meets or exceeds the threshold
|
|
577
|
-
- `
|
|
594
|
+
- `0` - Score is below the threshold but no finding meets the `failOn` floor
|
|
595
|
+
- `1` - Score is below the threshold and at least one finding meets the `failOn` floor
|
|
578
596
|
|
|
579
597
|
**JSON output** (useful for scripts):
|
|
580
598
|
|
|
@@ -582,6 +600,10 @@ projscan: B (82/100) - 0 errors, 2 warnings, 1 info - PASS (threshold: 80)
|
|
|
582
600
|
projscan ci --min-score 70 --format json
|
|
583
601
|
```
|
|
584
602
|
|
|
603
|
+
Every `ci.issues[]` item keeps the original issue fields and adds
|
|
604
|
+
annotation-friendly fields: `ruleId`, `message`, primary `location`, all
|
|
605
|
+
`locations`, and `remediation` when a fix hint is available.
|
|
606
|
+
|
|
585
607
|
**SARIF output** (for GitHub Code Scanning or any SARIF consumer):
|
|
586
608
|
|
|
587
609
|
```bash
|
|
@@ -887,6 +909,9 @@ Use it before broader rollout. The report includes feedback questions for the fi
|
|
|
887
909
|
## Health Score
|
|
888
910
|
|
|
889
911
|
Every `projscan doctor` and `projscan badge` run calculates a health score from 0 to 100 based on detected issues.
|
|
912
|
+
`doctor --format json` and `ci --format json` include `scoreBreakdown` so scripts
|
|
913
|
+
and reviewers can see the base score, per-severity weights, category penalties,
|
|
914
|
+
total penalty, final score, and grade.
|
|
890
915
|
|
|
891
916
|
**Scoring:**
|
|
892
917
|
|
|
@@ -909,7 +934,8 @@ Every `projscan doctor` and `projscan badge` run calculates a health score from
|
|
|
909
934
|
The score appears in all output formats:
|
|
910
935
|
|
|
911
936
|
- **Console**: Shown at the top of the doctor report
|
|
912
|
-
- **JSON**: Included as `health.score` and `health.
|
|
937
|
+
- **JSON**: Included as `health.score`, `health.grade`, and `health.scoreBreakdown`
|
|
938
|
+
fields. CI uses the same structure under `ci.scoreBreakdown`.
|
|
913
939
|
- **Markdown**: Shown as a heading with an auto-generated shields.io badge
|
|
914
940
|
- **HTML**: Shown in the health summary card
|
|
915
941
|
- **SARIF**: Not surfaced directly - SARIF is per-issue, not per-project. The score still drives `ci`'s exit code.
|
|
@@ -1005,6 +1031,7 @@ ProjScan loads a project-wide config from one of:
|
|
|
1005
1031
|
```json
|
|
1006
1032
|
{
|
|
1007
1033
|
"minScore": 80,
|
|
1034
|
+
"failOn": "warning",
|
|
1008
1035
|
"baseRef": "origin/main",
|
|
1009
1036
|
"ignore": ["**/fixtures/**", "**/generated/**"],
|
|
1010
1037
|
"scan": {
|
|
@@ -1013,6 +1040,9 @@ ProjScan loads a project-wide config from one of:
|
|
|
1013
1040
|
"offline": false
|
|
1014
1041
|
},
|
|
1015
1042
|
"disableRules": ["missing-editorconfig", "large-*"],
|
|
1043
|
+
"suppress": {
|
|
1044
|
+
"hardcoded-secret": ["src/firebase.ts"]
|
|
1045
|
+
},
|
|
1016
1046
|
"severityOverrides": {
|
|
1017
1047
|
"missing-prettier": "info"
|
|
1018
1048
|
},
|
|
@@ -1034,12 +1064,14 @@ ProjScan loads a project-wide config from one of:
|
|
|
1034
1064
|
| Field | Type | Effect |
|
|
1035
1065
|
| --------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1036
1066
|
| `minScore` | number (0–100) | Default threshold for `projscan ci`. Clamped to 0–100. |
|
|
1067
|
+
| `failOn` | `'info' \| 'warning' \| 'error'` | Lowest severity that can fail a below-threshold `projscan ci` gate. Default `warning`; set `info` for legacy strictness or `error` for error-only blocking. |
|
|
1037
1068
|
| `baseRef` | string | Default base ref for `--changed-only`. |
|
|
1038
1069
|
| `ignore` | string[] | Extra glob patterns added to the built-in ignore list (`node_modules`, `.git`, `dist`, `build`, `coverage`, `.next`, `.nuxt`, `.cache`, `.turbo`, `.output`). |
|
|
1039
1070
|
| `scan.includeIgnored` | boolean | Explicitly include files hidden by Git ignore rules. Default `false`. |
|
|
1040
1071
|
| `scan.scanEnvValues` | boolean | Explicitly read `.env*` contents during secret-pattern checks. Default `false`; `.env` files are path-only. |
|
|
1041
1072
|
| `scan.offline` | boolean | Block projscan network-capable features: telemetry sending, `audit`, registry checks, and optional semantic model loading. Default `false`. |
|
|
1042
1073
|
| `disableRules` | string[] | Silence rules by id. Exact match (`missing-prettier`) or wildcard prefix (`large-*`). |
|
|
1074
|
+
| `suppress` | `Record<string, string[]>` | Silence a rule only for matching paths/globs, for example `{ "hardcoded-secret": ["src/firebase.ts"] }`. Other rules still run on that file. |
|
|
1043
1075
|
| `severityOverrides` | `Record<string, 'info' \| 'warning' \| 'error'>` | Remap a rule's severity. Useful for downgrading project-specific false positives without disabling them. |
|
|
1044
1076
|
| `reportPolicies` | `Record<string, { reportScope?: string[]; redactPaths?: boolean }>` | Named evidence export presets selected with `--report-policy <name>` on `analyze`, `doctor`, and `ci`. |
|
|
1045
1077
|
| `hotspots.limit` | number (1–100) | Default limit for `projscan hotspots`. |
|
|
@@ -1047,6 +1079,12 @@ ProjScan loads a project-wide config from one of:
|
|
|
1047
1079
|
|
|
1048
1080
|
Invalid JSON in a discovered config file is a hard error - projscan exits rather than silently ignoring it.
|
|
1049
1081
|
|
|
1082
|
+
Use inline suppressions for a single confirmed false positive:
|
|
1083
|
+
|
|
1084
|
+
```ts
|
|
1085
|
+
const firebaseKey = "AIza..." // projscan-ignore-line hardcoded-secret -- Firebase web keys are public identifiers
|
|
1086
|
+
```
|
|
1087
|
+
|
|
1050
1088
|
### Embedded config in `package.json`
|
|
1051
1089
|
|
|
1052
1090
|
If you prefer to keep everything in `package.json`:
|
|
@@ -1361,6 +1399,8 @@ _Structural / agent-native:_
|
|
|
1361
1399
|
- `projscan_bug_hunt` — prioritized bug-hunt action queue with per-action verification.
|
|
1362
1400
|
- `projscan_agent_brief` — compact next-agent context packet with focus items, guardrails, repo context, and suggested next actions.
|
|
1363
1401
|
- `projscan_quality_scorecard` — dimensioned quality view with top risks and verification commands.
|
|
1402
|
+
- `projscan_assess` — proof-first assessment with Proof Cards, risk delta, and fix-first guidance.
|
|
1403
|
+
- `projscan_simulate` — risk delta simulator for proposed change plans before editing.
|
|
1364
1404
|
- `projscan_adoption` — adoption helper for MCP client snippets, MCP setup doctor, agent workflow recipes, and first-run diagnostics.
|
|
1365
1405
|
- `projscan_release_train` — product-line readiness plan with scope and next-action evidence.
|
|
1366
1406
|
- `projscan_evidence_pack` — approval packet with planning, bug-hunt, workplan, preflight, changelog, and website prompt evidence.
|
|
@@ -1564,8 +1604,10 @@ If you'd rather skip Code Scanning, `projscan init github-action` writes a pull-
|
|
|
1564
1604
|
The `ci` command is purpose-built for pipelines:
|
|
1565
1605
|
|
|
1566
1606
|
```bash
|
|
1567
|
-
projscan ci # Fail if score < 70
|
|
1607
|
+
projscan ci # Fail if score < 70 and warning/error findings exist
|
|
1568
1608
|
projscan ci --min-score 80 # Custom threshold
|
|
1609
|
+
projscan ci --fail-on info # Legacy strictness: info can fail the gate
|
|
1610
|
+
projscan ci --fail-on error # Only errors can fail a below-threshold gate
|
|
1569
1611
|
projscan ci --changed-only # Gate only on PR diff
|
|
1570
1612
|
projscan ci --format json # JSON output for scripts
|
|
1571
1613
|
projscan ci --format sarif > projscan.sarif # SARIF for any consumer
|
|
@@ -1577,9 +1619,15 @@ projscan ci --format sarif > projscan.sarif # SARIF for any consumer
|
|
|
1577
1619
|
result=$(projscan ci --min-score 0 --format json)
|
|
1578
1620
|
pass=$(echo "$result" | jq '.ci.pass')
|
|
1579
1621
|
score=$(echo "$result" | jq '.ci.score')
|
|
1580
|
-
echo "
|
|
1622
|
+
fail_on=$(echo "$result" | jq -r '.ci.failOn')
|
|
1623
|
+
echo "Score: $score, Pass: $pass, FailOn: $fail_on"
|
|
1581
1624
|
```
|
|
1582
1625
|
|
|
1626
|
+
For PR annotation tooling, read `.ci.issues[]`. Each issue includes `ruleId`,
|
|
1627
|
+
`severity`, `message`, primary `location`, all `locations`, and `remediation`
|
|
1628
|
+
when available. Gate metadata lives at `.ci.failOn`, `.ci.scorePass`, and
|
|
1629
|
+
`.ci.severityFloorMet`.
|
|
1630
|
+
|
|
1583
1631
|
### Tracking health over time in CI
|
|
1584
1632
|
|
|
1585
1633
|
Combine `ci` with `diff` to track regressions:
|
|
@@ -1675,7 +1723,7 @@ src/
|
|
|
1675
1723
|
├── mcp/
|
|
1676
1724
|
│ ├── server.ts # MCP server factory and JSON-RPC request orchestration
|
|
1677
1725
|
│ ├── serverStdio.ts # stdio transport loop for the CLI entry point
|
|
1678
|
-
│ ├── tools.ts #
|
|
1726
|
+
│ ├── tools.ts # MCP tools barrel; per-tool files live under tools/
|
|
1679
1727
|
│ ├── tokenBudget.ts # Record-aware response truncator
|
|
1680
1728
|
│ ├── pagination.ts # Cursor-based pagination (opaque base64 + checksum)
|
|
1681
1729
|
│ ├── progress.ts # notifications/progress plumbing
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "projscan",
|
|
3
3
|
"mcpName": "io.github.abhiyoheswaran1/projscan",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.11.0",
|
|
5
5
|
"description": "Local code intelligence for agent-assisted engineering. Focused daily workflows for repo orientation before edits, proof before handoff or commit, and release-candidate review, with AST-backed evidence through an MCP server and CLI. Runs locally by default.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./dist/index.js",
|