@enwithai/product-check 0.0.0-stage → 0.1.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/ATTRIBUTION.md +52 -0
- package/CHANGELOG.md +31 -0
- package/LICENSE +21 -0
- package/NOTICE.md +18 -0
- package/README.md +171 -2
- package/SECURITY.md +27 -0
- package/TRADEMARKS.md +23 -0
- package/dashboard/README.md +6 -0
- package/dashboard/dashboard.css +489 -0
- package/dashboard/dashboard.js +90 -0
- package/dist/blueprint/build.d.ts +27 -0
- package/dist/blueprint/build.js +363 -0
- package/dist/blueprint/candidates.d.ts +10 -0
- package/dist/blueprint/candidates.js +86 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.js +17 -0
- package/dist/cli/run.d.ts +13 -0
- package/dist/cli/run.js +511 -0
- package/dist/contract/contract.d.ts +32 -0
- package/dist/contract/contract.js +184 -0
- package/dist/contract/safety.d.ts +11 -0
- package/dist/contract/safety.js +68 -0
- package/dist/dashboard/render.d.ts +5 -0
- package/dist/dashboard/render.js +345 -0
- package/dist/discovery/git.d.ts +13 -0
- package/dist/discovery/git.js +139 -0
- package/dist/discovery/gitignore.d.ts +15 -0
- package/dist/discovery/gitignore.js +98 -0
- package/dist/discovery/pops.d.ts +26 -0
- package/dist/discovery/pops.js +296 -0
- package/dist/discovery/repo.d.ts +35 -0
- package/dist/discovery/repo.js +231 -0
- package/dist/errors.d.ts +27 -0
- package/dist/errors.js +32 -0
- package/dist/evidence/collector.d.ts +41 -0
- package/dist/evidence/collector.js +71 -0
- package/dist/importers/har.d.ts +3 -0
- package/dist/importers/har.js +86 -0
- package/dist/importers/reports.d.ts +38 -0
- package/dist/importers/reports.js +84 -0
- package/dist/importers/tests.d.ts +24 -0
- package/dist/importers/tests.js +99 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +19 -0
- package/dist/inspectors/http/fetch.d.ts +18 -0
- package/dist/inspectors/http/fetch.js +171 -0
- package/dist/inspectors/http/observe.d.ts +60 -0
- package/dist/inspectors/http/observe.js +110 -0
- package/dist/inspectors/source/facts.d.ts +60 -0
- package/dist/inspectors/source/facts.js +268 -0
- package/dist/reporting/escape.d.ts +14 -0
- package/dist/reporting/escape.js +53 -0
- package/dist/reporting/markdown.d.ts +19 -0
- package/dist/reporting/markdown.js +169 -0
- package/dist/run.d.ts +24 -0
- package/dist/run.js +451 -0
- package/dist/schema/registry.d.ts +14 -0
- package/dist/schema/registry.js +43 -0
- package/dist/schema/validator.d.ts +26 -0
- package/dist/schema/validator.js +282 -0
- package/dist/scoring/score.d.ts +12 -0
- package/dist/scoring/score.js +144 -0
- package/dist/scoring/verdict.d.ts +26 -0
- package/dist/scoring/verdict.js +81 -0
- package/dist/types.d.ts +486 -0
- package/dist/types.js +10 -0
- package/dist/util/hash.d.ts +4 -0
- package/dist/util/hash.js +16 -0
- package/dist/util/paths.d.ts +2 -0
- package/dist/util/paths.js +28 -0
- package/dist/util/redact.d.ts +15 -0
- package/dist/util/redact.js +56 -0
- package/dist/validation/app-evaluators.d.ts +5 -0
- package/dist/validation/app-evaluators.js +332 -0
- package/dist/validation/catalog.d.ts +54 -0
- package/dist/validation/catalog.js +1447 -0
- package/dist/validation/context.d.ts +64 -0
- package/dist/validation/context.js +28 -0
- package/dist/validation/engine.d.ts +17 -0
- package/dist/validation/engine.js +160 -0
- package/dist/validation/import-evaluators.d.ts +5 -0
- package/dist/validation/import-evaluators.js +339 -0
- package/dist/validation/integrity.d.ts +7 -0
- package/dist/validation/integrity.js +118 -0
- package/dist/validation/retest.d.ts +14 -0
- package/dist/validation/retest.js +170 -0
- package/dist/validation/source-evaluators.d.ts +18 -0
- package/dist/validation/source-evaluators.js +900 -0
- package/dist/validation/tiers.d.ts +21 -0
- package/dist/validation/tiers.js +104 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.js +9 -0
- package/package.json +75 -4
- package/schemas/blueprint.schema.json +456 -0
- package/schemas/common.schema.json +127 -0
- package/schemas/evidence.schema.json +131 -0
- package/schemas/finding.schema.json +166 -0
- package/schemas/observations.schema.json +167 -0
- package/schemas/pop-coverage.schema.json +117 -0
- package/schemas/product-check-results.schema.json +427 -0
- package/schemas/release-verdict.schema.json +160 -0
- package/schemas/scan-contract.schema.json +401 -0
- package/schemas/scorecard.schema.json +459 -0
- package/schemas/validation.schema.json +144 -0
package/ATTRIBUTION.md
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Attribution and provenance
|
|
2
|
+
|
|
3
|
+
## Publisher
|
|
4
|
+
|
|
5
|
+
- **Project:** Product Check (`@enwithai/product-check`).
|
|
6
|
+
- **Commons:** EnWithAI Engineering Commons. Question: _does this software work, can it be trusted, and what needs to
|
|
7
|
+
improve?_
|
|
8
|
+
- **Copyright holder:** EnWithAI Technologies (as stated in [LICENSE](LICENSE)).
|
|
9
|
+
- **License:** MIT (decided 2026-10-12, same as the other Commons tools). It applies to all code, documentation, schemas
|
|
10
|
+
and examples in this repository.
|
|
11
|
+
- **Maintainer:** Koushik Ramani ([@aiwithrk](https://github.com/aiwithrk)), EnWithAI Technologies.
|
|
12
|
+
- **Contact:** [hello@enwithai.com](mailto:hello@enwithai.com)
|
|
13
|
+
- **Security issues:** see [SECURITY.md](SECURITY.md).
|
|
14
|
+
|
|
15
|
+
## Development provenance
|
|
16
|
+
|
|
17
|
+
Product Check was written for this repository with substantial AI assistance (Claude Code), directed and reviewed by
|
|
18
|
+
the project's human sponsor. Commits carry a `Co-Authored-By` trailer. It has **no runtime dependencies** and contains
|
|
19
|
+
no vendored third-party code. Test fixtures and the demo application are synthetic; credential-like strings in them
|
|
20
|
+
are generated at run time and are not real.
|
|
21
|
+
|
|
22
|
+
## Built on
|
|
23
|
+
|
|
24
|
+
| Upstream | Version | License | How Product Check uses it |
|
|
25
|
+
| ------------------------------------------------------------------------ | -------------- | ------- | ----------------------------------------------- |
|
|
26
|
+
| [Node.js](https://nodejs.org) | 22 / 24 / ≥ 26 | MIT | Runtime only (built-in `fetch`, `crypto`, `fs`) |
|
|
27
|
+
| [JSON Schema](https://json-schema.org) | draft 2020-12 | — | Contract format for every artifact |
|
|
28
|
+
| JUnit XML (de facto format) | — | — | Input format for executed test results |
|
|
29
|
+
| [HAR 1.2](https://w3c.github.io/web-performance/specs/HAR/Overview.html) | 1.2 (draft) | — | Input format for recorded browser traffic |
|
|
30
|
+
|
|
31
|
+
Development tools (TypeScript, Vitest, ESLint, typescript-eslint, Prettier, Ajv) are not distributed. Design
|
|
32
|
+
references are in [REFERENCES.md](REFERENCES.md). Listing a project does not mean its maintainers endorse Product Check.
|
|
33
|
+
|
|
34
|
+
## Frameworks
|
|
35
|
+
|
|
36
|
+
| Framework | Owner | Relationship | Note |
|
|
37
|
+
| ---------------- | ---------------------- | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
38
|
+
| CLEAR (CLEAR CT) | NetworkGain Consulting | `inspired` | The design of the assessment model — separate Customer, Technology and Trust pillars, CT-T0…T6 lifecycle tiers, points of presence, evidence statuses, the rule that strong pillars never hide weak ones, and hard gates overriding scores — was inspired by NetworkGain's CLEAR CT method (v3.1, internal and unpublished). No text, catalog, prompt or scoring table from it is reproduced, and there is no structural relationship. Wording approved for publication on 2026-10-12. |
|
|
39
|
+
| TRACE | EnWithAI Technologies | `not-assessed` | Each finding carries an intent → evidence → remediation → retest chain, which may match TRACE's intent; alignment cannot be stated until the TRACE specification is available. |
|
|
40
|
+
|
|
41
|
+
## Ecosystem
|
|
42
|
+
|
|
43
|
+
Product Check is independently usable. It has no dependency on CrewPE, any EnWithAI service or NetworkGain, and it
|
|
44
|
+
contacts no service except an origin the user explicitly authorizes. CrewPE is EnWithAI's enterprise engineering
|
|
45
|
+
lifecycle product and could consume Product Check's JSON results and work packets in governed workflows; no such
|
|
46
|
+
integration exists today. NetworkGain Consulting contributes enterprise value and governance perspective to the
|
|
47
|
+
Commons; using Product Check creates no obligation to engage it.
|
|
48
|
+
|
|
49
|
+
## Not affiliated
|
|
50
|
+
|
|
51
|
+
Product Check is not affiliated with, endorsed by or certified by GitHub, Vercel, Supabase, OpenAI, Anthropic, Stripe,
|
|
52
|
+
Google, the OWASP Foundation, the W3C or any framework vendor named in its rules or documentation.
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes are documented here. The format follows Keep a Changelog; versions follow SemVer (pre-1.0: minor
|
|
4
|
+
versions may break the results schema, which carries its own `schema_version`, and the rubric, which carries
|
|
5
|
+
`rubric_version`).
|
|
6
|
+
|
|
7
|
+
## Unreleased
|
|
8
|
+
|
|
9
|
+
## 0.1.0 — 2026-10-12
|
|
10
|
+
|
|
11
|
+
First release without a pre-release suffix, so `npm install @enwithai/product-check` and `npx @enwithai/product-check` work without a
|
|
12
|
+
tag. No functional changes from 0.1.0-alpha.0. Still pre-1.0: the report schema and command options may change in minor
|
|
13
|
+
versions.
|
|
14
|
+
|
|
15
|
+
## 0.1.0-alpha.0 — 2026-10-12 (published to npm)
|
|
16
|
+
|
|
17
|
+
First alpha. MIT licensed.
|
|
18
|
+
|
|
19
|
+
- `product-check run|retest|scan|init|validate|report|blueprint|dashboard|controls|schema`.
|
|
20
|
+
- Scan → Test → Validate → Blueprint → Dashboard → (advisory) Remediate → Retest, recorded per run.
|
|
21
|
+
- 47 controls across Customer, Technology and Trust, lifecycle tiers CT-T0…CT-T6 with carry-forward, three hard gates.
|
|
22
|
+
- Source inspection (read-only; git metadata parsed without running git; ignored files never read), passive HTTP
|
|
23
|
+
probe (authorized origin only; optional exposure probe), HAR and recorded-observation replay.
|
|
24
|
+
- Importers: JUnit XML, Jest/Vitest JSON, `npm audit --json`, Spec Check 1.0, Impact Check 2.0, Outcome Check 1.0;
|
|
25
|
+
contract `control_mappings` link executed tests to any control.
|
|
26
|
+
- Scoring with coverage, confidence, caps and withheld scores; verdict rules; risk acceptances (never for P0).
|
|
27
|
+
- Blueprint with as-is/to-be, remediations, work packets, regression-test candidates, test architecture, traceability.
|
|
28
|
+
- Retest with stable finding IDs, preserved baseline evidence, RESOLVED only with new evidence, PC-T-16 regressions.
|
|
29
|
+
- JSON Schemas (2020-12) for every artifact; built-in validator plus integrity/recomputation checks.
|
|
30
|
+
- Self-contained dashboard (five views, light/dark, accessible, hash-pinned script).
|
|
31
|
+
- Synthetic Vibe Notes demo with baseline, retest, repository-only and aborted examples.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 EnWithAI Technologies
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/NOTICE.md
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# NOTICE
|
|
2
|
+
|
|
3
|
+
Product Check
|
|
4
|
+
Copyright (c) 2026 EnWithAI Technologies
|
|
5
|
+
|
|
6
|
+
Product Check is licensed under the MIT License (see [LICENSE](LICENSE)). This NOTICE adds no conditions to that
|
|
7
|
+
license.
|
|
8
|
+
|
|
9
|
+
## Third-party material
|
|
10
|
+
|
|
11
|
+
Product Check has **no runtime dependencies** and contains no vendored source code. It reads formats defined by others
|
|
12
|
+
(JSON Schema, JUnit XML, HAR, `npm audit` JSON, and the report schemas of Spec Check, Impact Check and Outcome Check);
|
|
13
|
+
no code from those projects is included.
|
|
14
|
+
|
|
15
|
+
## Trademarks
|
|
16
|
+
|
|
17
|
+
EnWithAI, CrewPE, CLEAR, TRACE, NetworkGain and related names are not licensed by this repository. See
|
|
18
|
+
[TRADEMARKS.md](TRADEMARKS.md).
|
package/README.md
CHANGED
|
@@ -1,3 +1,172 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Product Check
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Does this software work, can it be trusted, and what needs to improve?**
|
|
4
|
+
_Scan. Validate. Blueprint. Improve._ Evidence-led product assurance and software blueprinting.
|
|
5
|
+
|
|
6
|
+
Product Check looks at your **repository**, your **deployed app**, or **both**, checks them against a catalog of
|
|
7
|
+
Customer, Technology and Trust controls, and gives you:
|
|
8
|
+
|
|
9
|
+
- **findings backed by evidence**: file and line, or the exact HTTP response, with a checksum and a redacted excerpt;
|
|
10
|
+
- **three separate scores** (Customer, Technology, Trust), each with coverage and confidence, never averaged together;
|
|
11
|
+
- a **readiness verdict** (`READY`, `READY_WITH_CONDITIONS`, `NOT_READY`, `INCONCLUSIVE`) that hard gates can block
|
|
12
|
+
and that states exactly what it does and does not cover;
|
|
13
|
+
- an **engineering blueprint**: prioritized fixes, acceptance criteria, regression-test candidates and one
|
|
14
|
+
**work packet** per fix that you (or any coding agent) can act on;
|
|
15
|
+
- a **local dashboard** and a **retest** loop that shows verified fixes, regressions and trends.
|
|
16
|
+
|
|
17
|
+
Everything is written to one versioned JSON file. The report, blueprint and dashboard are renderings of it.
|
|
18
|
+
|
|
19
|
+
> Status: **early release** (`0.1.0`, pre-1.0, results schema `0.1.0`). Install with
|
|
20
|
+
> `npm install --global @enwithai/product-check`, or build from source as in the demo below.
|
|
21
|
+
|
|
22
|
+
## What it will not pretend
|
|
23
|
+
|
|
24
|
+
Untested is never passed. Product Check reports `BLOCKED` or `NOT_TESTED` (with the reason) for anything it could not
|
|
25
|
+
check, lowers coverage accordingly, and withholds a score when evidence is thin. It is **not** a penetration test, a
|
|
26
|
+
compliance certification or a guarantee of production readiness. It never runs your repository's code, never logs in,
|
|
27
|
+
never submits forms and never sends anything anywhere except passive GET requests to an origin you authorize.
|
|
28
|
+
|
|
29
|
+
## Two-minute demo
|
|
30
|
+
|
|
31
|
+
Requires Node.js 22, 24 or ≥ 26, and git. No account, no network, no runtime dependencies.
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
git clone https://github.com/enwithai/product-check.git && cd product-check
|
|
35
|
+
npm ci --ignore-scripts && npm run build
|
|
36
|
+
cd examples/vibe-app-demo
|
|
37
|
+
node create-app.mjs # generates a deliberately weak, synthetic vibe-coded app in ./app
|
|
38
|
+
node ../../dist/cli/main.js run --contract scan-contract.json --observations inputs/observations-baseline.json --out-dir output/baseline
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
Verdict: NOT_READY at CT-T2 ("NOT READY")
|
|
43
|
+
- Hard gate failed: G-SECRETS.
|
|
44
|
+
- 8 open P0 finding(s).
|
|
45
|
+
- 1 open P1 finding(s).
|
|
46
|
+
Customer 40/100 (coverage 77%, confidence MEDIUM)
|
|
47
|
+
Technology 4/100 (coverage 80%, confidence MEDIUM)
|
|
48
|
+
Trust 2/100 (coverage 67%, confidence MEDIUM)
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Then apply the fixes and retest against that baseline (the app's own tests were run against its fixed build and
|
|
52
|
+
their JUnit output is in `inputs/`):
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
node create-app.mjs --remediate
|
|
56
|
+
node ../../dist/cli/main.js retest --contract scan-contract.json --observations inputs/observations-remediated.json \
|
|
57
|
+
--test-results inputs/test-results-remediated.xml --baseline output/baseline/product-check-results.json --out-dir output/retest
|
|
58
|
+
open output/retest/dashboard.html # or xdg-open / start
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
```text
|
|
62
|
+
Verdict: READY_WITH_CONDITIONS at CT-T2 ("CONDITIONAL")
|
|
63
|
+
- 2 open P2 finding(s).
|
|
64
|
+
Customer 100/100 (coverage 92%, confidence HIGH)
|
|
65
|
+
Technology 94/100 (coverage 100%, confidence MEDIUM)
|
|
66
|
+
Trust 97/100 (coverage 83%, confidence HIGH)
|
|
67
|
+
Retest vs PCR-20261014T100000Z-7386B1: 35 verified fixed, 0 new, 0 reopened, 0 regressed control(s)
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
The two remaining P2s (no error monitoring, no AI evaluation suite) are real gaps in the fixed demo app. A
|
|
71
|
+
[repository-only scan](examples/repo-only/report.md) of the same weak app shows the other side of honesty: Customer
|
|
72
|
+
and Trust are **not scored** because, without the running app, too little could be checked.
|
|
73
|
+
|
|
74
|
+
The committed [baseline](examples/vibe-app-demo/output/baseline/report.md) and
|
|
75
|
+
[retest](examples/vibe-app-demo/output/retest/report.md) outputs are what these commands produce (the test suite
|
|
76
|
+
checks that). See [examples/vibe-app-demo](examples/vibe-app-demo/README.md) for the live version, where the probe
|
|
77
|
+
talks to a local stand-in deployment of the demo app.
|
|
78
|
+
|
|
79
|
+
## Use it on your project
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
# Your repository (read-only; nothing is executed):
|
|
83
|
+
product-check run --repo .
|
|
84
|
+
|
|
85
|
+
# Your deployed app (only if you own it or may test it): passive GETs to fixed paths on that origin.
|
|
86
|
+
product-check run --repo . --url https://your-app.example --authorize passive-http
|
|
87
|
+
|
|
88
|
+
# Also check whether /.env or /.git are publicly served (more intrusive; separately authorized):
|
|
89
|
+
product-check run --repo . --url https://your-app.example --authorize passive-http,exposure-probe
|
|
90
|
+
|
|
91
|
+
# Add evidence you already have:
|
|
92
|
+
npx vitest run --reporter=junit --outputFile=junit.xml # or jest-junit, playwright --reporter=junit, pytest --junitxml
|
|
93
|
+
npm audit --json > npm-audit.json
|
|
94
|
+
product-check run --repo . --test-results junit.xml --npm-audit npm-audit.json --stage PRE_LAUNCH
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Results go to `.product-check/`: `product-check-results.json`, `report.md`, `blueprint.md`, `work-packets/*.md` and
|
|
98
|
+
`dashboard.html` (open it directly; no server). After changing things, run
|
|
99
|
+
`product-check retest --baseline .product-check/product-check-results.json …` with the same inputs.
|
|
100
|
+
|
|
101
|
+
No deployed URL you can scan? Export a HAR file from your browser's DevTools on your app and pass `--har app.har`.
|
|
102
|
+
|
|
103
|
+
For repeatable setups, `product-check init --repo . --url … --stage …` writes a
|
|
104
|
+
[scan contract](docs/assessment-model.md#the-scan-contract) you can edit: declare tenancy, personal data and AI use,
|
|
105
|
+
critical journeys, risk acceptances, and **control mappings** that link your own executed tests (for example
|
|
106
|
+
authorization or tenant-isolation tests) to the controls Product Check cannot test by itself.
|
|
107
|
+
|
|
108
|
+
## Commands
|
|
109
|
+
|
|
110
|
+
| Command | What it does |
|
|
111
|
+
| ---------------------------------- | ------------------------------------------------------------------------------------------------- |
|
|
112
|
+
| `run` | Scan → Test → Validate → Blueprint; writes results and renderings |
|
|
113
|
+
| `retest --baseline <file>` | `run` plus comparison: verified fixes, reopened and new findings, regressions, trends |
|
|
114
|
+
| `scan` | Discovery only: which points of presence exist and what could be checked (no requests, no checks) |
|
|
115
|
+
| `init` | Writes an editable scan contract |
|
|
116
|
+
| `validate <file>…` | Schema validation; for results also referential integrity and recomputation of scores and verdict |
|
|
117
|
+
| `report`, `blueprint`, `dashboard` | Re-render from a results file |
|
|
118
|
+
| `controls`, `schema [name]` | The control catalog and the JSON Schemas |
|
|
119
|
+
|
|
120
|
+
Exit codes: `0` ok · `1` internal error · `2` usage · `3` input · `4` safety refusal · `5` invalid artifact ·
|
|
121
|
+
`6` `--fail-on` matched (for CI gating, for example `--fail-on NOT_READY`). Full reference: [docs/cli.md](docs/cli.md).
|
|
122
|
+
|
|
123
|
+
## How it decides
|
|
124
|
+
|
|
125
|
+
- **Pillars** ([assessment model](docs/assessment-model.md)): Customer (can people use it and get value?),
|
|
126
|
+
Technology (is it built, tested and operated soundly?), Trust (secrets, access, isolation, privacy, AI boundaries).
|
|
127
|
+
- **Lifecycle tiers** CT-T0…CT-T6 ([lifecycle tiers](docs/lifecycle-tiers.md)), selected from your declared stage,
|
|
128
|
+
with carry-forward: a later tier always includes earlier tiers' controls.
|
|
129
|
+
- **Scoring and gates** ([scoring and gates](docs/scoring-and-gates.md)): pass = 1, partial = ½, fail = 0, weighted;
|
|
130
|
+
coverage and confidence shown beside every score; open P0/P1 cap the pillar; failed hard gates force `NOT_READY`;
|
|
131
|
+
unverified gates force `INCONCLUSIVE`.
|
|
132
|
+
- **Safety** ([safety and authorization](docs/safety-and-authorization.md)): what is never done, and what needs
|
|
133
|
+
explicit, scoped authorization.
|
|
134
|
+
|
|
135
|
+
## Privacy and security
|
|
136
|
+
|
|
137
|
+
No telemetry, account, model call or child process. The repository is read, never executed; git-ignored files (such
|
|
138
|
+
as your local `.env`) are listed but never read. Evidence keeps short redacted excerpts, never file or response
|
|
139
|
+
contents; response headers are filtered to a security-relevant allowlist with cookie values removed. The dashboard is
|
|
140
|
+
a single file with a hash-pinned script and a `default-src 'none'` Content-Security-Policy. See
|
|
141
|
+
[SECURITY.md](SECURITY.md) and [docs/threat-model.md](docs/threat-model.md).
|
|
142
|
+
|
|
143
|
+
## Documentation
|
|
144
|
+
|
|
145
|
+
[Philosophy](docs/philosophy.md) · [Architecture](docs/architecture.md) ·
|
|
146
|
+
[Assessment model](docs/assessment-model.md) · [Scoring and gates](docs/scoring-and-gates.md) ·
|
|
147
|
+
[Lifecycle tiers](docs/lifecycle-tiers.md) · [Safety and authorization](docs/safety-and-authorization.md) ·
|
|
148
|
+
[Interoperability](docs/interoperability.md) · [CLI](docs/cli.md) · [Threat model](docs/threat-model.md) ·
|
|
149
|
+
[Branding and attribution](docs/branding-and-attribution.md) · [Implementation status](IMPLEMENTATION_STATUS.md) ·
|
|
150
|
+
[Changelog](CHANGELOG.md) · [Contributing](CONTRIBUTING.md) · [Governance](GOVERNANCE.md)
|
|
151
|
+
|
|
152
|
+
## License
|
|
153
|
+
|
|
154
|
+
MIT © EnWithAI Technologies. Not affiliated with or endorsed by any
|
|
155
|
+
platform or framework vendor named in this repository.
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
<sub>**Check the spec. Check the impact. Check the outcome. Check the product.** Product Check is the fourth check, with
|
|
160
|
+
[Impact Check](https://github.com/enwithai/impact-check), [Spec Check](https://github.com/enwithai/spec-check) and
|
|
161
|
+
[Outcome Check](https://github.com/enwithai/outcome-check).</sub>
|
|
162
|
+
|
|
163
|
+
<sub>An **EnWithAI Engineering Commons** initiative. Developed and maintained by EnWithAI Technologies, contributing to
|
|
164
|
+
open, verifiable and accountable AI-assisted software engineering. Part of the broader [CrewPE](https://crewpe.ai)
|
|
165
|
+
engineering ecosystem. Product Check is independently usable and does not require CrewPE. Enterprise advisory and
|
|
166
|
+
transformation perspectives are supported through [NetworkGain Consulting](https://networkgain.com).
|
|
167
|
+
Attribution: [ATTRIBUTION.md](ATTRIBUTION.md) · Notices: [NOTICE.md](NOTICE.md) · Trademarks:
|
|
168
|
+
[TRADEMARKS.md](TRADEMARKS.md) · References: [REFERENCES.md](REFERENCES.md).</sub>
|
|
169
|
+
|
|
170
|
+
<sub>The design of Product Check's assessment model (separate Customer, Technology and Trust pillars, lifecycle tiers,
|
|
171
|
+
points of presence, evidence-before-opinion) was inspired by NetworkGain's CLEAR CT method. There is no structural
|
|
172
|
+
relationship — see [ATTRIBUTION.md](ATTRIBUTION.md#frameworks).</sub>
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Security policy
|
|
2
|
+
|
|
3
|
+
## Supported versions
|
|
4
|
+
|
|
5
|
+
Pre-release. Once published, only the latest `0.x` alpha will receive fixes.
|
|
6
|
+
|
|
7
|
+
## Reporting a vulnerability
|
|
8
|
+
|
|
9
|
+
Please **do not open a public issue**. Use GitHub's private vulnerability reporting (once the repository is public)
|
|
10
|
+
or write to [hello@enwithai.com](mailto:hello@enwithai.com). Include the Product Check version, the command and a
|
|
11
|
+
minimal **synthetic** reproduction. Never send real results, HAR files or repositories: they can contain secrets.
|
|
12
|
+
|
|
13
|
+
## Security properties Product Check is designed to keep
|
|
14
|
+
|
|
15
|
+
- It never executes repository code, starts processes or uses `eval`/dynamic imports.
|
|
16
|
+
- It never reads git-ignored files, and stores only short redacted excerpts and checksums as evidence.
|
|
17
|
+
- It sends network requests only when explicitly authorized, only passive GETs to fixed paths on one origin, with no
|
|
18
|
+
cookies, credentials or bodies, a request budget and timeouts. It never follows redirects to other origins.
|
|
19
|
+
- It refuses prohibited actions (production writes, destructive tests, outreach, payments, active scanning,
|
|
20
|
+
credentialed access, personal-data extraction) whatever a contract says.
|
|
21
|
+
- It has no telemetry, account or model calls.
|
|
22
|
+
- Generated Markdown and HTML escape all untrusted text; the dashboard has a `default-src 'none'` CSP and one
|
|
23
|
+
hash-pinned inline script.
|
|
24
|
+
- A results file whose figures do not recompute is flagged and cannot be used as a baseline.
|
|
25
|
+
|
|
26
|
+
A violation of any of these is a security bug. See [docs/threat-model.md](docs/threat-model.md) and
|
|
27
|
+
[docs/safety-and-authorization.md](docs/safety-and-authorization.md).
|
package/TRADEMARKS.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Trademarks and names
|
|
2
|
+
|
|
3
|
+
The MIT License covers this repository's code and documentation. **It does not grant rights to use
|
|
4
|
+
the names below**, except as allowed by law (for example, to truthfully say that you use or modify Product Check).
|
|
5
|
+
|
|
6
|
+
None of these names is a registered trademark. EnWithAI Technologies uses its names together with the EnWithAI name
|
|
7
|
+
(for example "EnWithAI CrewPE"), and NetworkGain Consulting uses CLEAR together with the NetworkGain name.
|
|
8
|
+
|
|
9
|
+
| Name | Used by | Status |
|
|
10
|
+
| ------------------------------------------------ | ---------------------- | -------------------------------------------------------------------------------------------------------------- |
|
|
11
|
+
| EnWithAI ("Engineering with AI for Enterprises") | EnWithAI Technologies | company and brand name; not registered |
|
|
12
|
+
| CrewPE | EnWithAI Technologies | product name, used as "EnWithAI CrewPE"; not registered |
|
|
13
|
+
| TRACE | EnWithAI Technologies | framework name, used as "EnWithAI TRACE"; not registered |
|
|
14
|
+
| NetworkGain | NetworkGain Consulting | company and brand name; not registered |
|
|
15
|
+
| CLEAR, CLEAR CT | NetworkGain Consulting | framework name, used as "NetworkGain CLEAR"; not registered |
|
|
16
|
+
| Product Check | EnWithAI Technologies | descriptive project name, used as "EnWithAI Product Check"; not claimed as a trademark; name clearance pending |
|
|
17
|
+
|
|
18
|
+
**You may:** say your work uses, is based on or is compatible with Product Check; fork it; rename your fork.
|
|
19
|
+
**Please don't:** use these names to suggest endorsement, certification or affiliation by EnWithAI Technologies or
|
|
20
|
+
NetworkGain Consulting, or describe a Product Check result as a certification.
|
|
21
|
+
|
|
22
|
+
Other names (GitHub, Node.js, Next.js, Supabase, OpenAI, Stripe, …) belong to their owners and are used only to
|
|
23
|
+
identify those projects or formats.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# Dashboard assets
|
|
2
|
+
|
|
3
|
+
`dashboard.css` and `dashboard.js` are inlined into every generated `dashboard.html` by `src/dashboard/render.ts`.
|
|
4
|
+
All figures are rendered server-side from `product-check-results.json`; the script only adds tabs, table filters and
|
|
5
|
+
a theme toggle, and is allowed by a SHA-256 hash in the page's Content-Security-Policy. Generate a dashboard with
|
|
6
|
+
`product-check dashboard <results.json>` (also written by `run`).
|