@hadden-industries/markdown-quality 0.1.0-alpha.3 → 0.1.0-alpha.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.
- package/SECURITY.md +40 -0
- package/docs/ci-trust.md +15 -2
- package/docs/consumer-guide.md +2 -1
- package/docs/support-and-release.md +20 -3
- package/package.json +4 -3
- package/src/formatting.js +4 -0
package/SECURITY.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Security policy
|
|
2
|
+
|
|
3
|
+
Before stable release, security support covers only the single prerelease designated by npm's `pilot` tag.
|
|
4
|
+
After stable release, it covers only the latest stable release designated by `latest`, unless an explicit policy accepts another line.
|
|
5
|
+
Consumers should pin exact versions and qualify upgrades.
|
|
6
|
+
Older releases remaining downloadable does not imply maintenance or backport support.
|
|
7
|
+
The supported runtime is Node 24.21.0 on Windows x64 and Ubuntu 24.04 x64 with glibc 2.39, with the qualified core/native tuple and explicit preset.
|
|
8
|
+
|
|
9
|
+
Report suspected vulnerabilities privately through [GitHub private vulnerability reporting](https://github.com/Hadden-Industries/markdown-quality/security/advisories/new).
|
|
10
|
+
If unavailable or unsuitable, use `security@haddenindustries.com`.
|
|
11
|
+
Avoid public disclosure in issues or pull requests.
|
|
12
|
+
Include affected release, environment, impact, reproduction and possible mitigation, while minimizing credentials, personal data and unrelated document content.
|
|
13
|
+
|
|
14
|
+
Maksym Shostak / Hadden Industries owns manual report handling and dependency/advisory review.
|
|
15
|
+
No unattended monitoring or notification service is assumed.
|
|
16
|
+
Maintainer targets, accepted on 2026-10-05, are:
|
|
17
|
+
|
|
18
|
+
| Stage | Target |
|
|
19
|
+
| --------------------------------------------------- | ----------------------------------------------- |
|
|
20
|
+
| Acknowledge a private report | Five working days from receipt |
|
|
21
|
+
| Initial severity/reachability triage | Five further working days after acknowledgement |
|
|
22
|
+
| Confirmed critical/high fix or effective mitigation | Five working days from confirmation |
|
|
23
|
+
| Confirmed medium fix or effective mitigation | 30 calendar days from confirmation |
|
|
24
|
+
| Confirmed low fix or effective mitigation | 90 calendar days from confirmation |
|
|
25
|
+
|
|
26
|
+
These targets are not an SLA or guaranteed resolution.
|
|
27
|
+
A missed target requires a responsible owner, interim disposition or mitigation, and dated next review through the private reporting channel.
|
|
28
|
+
Upon observation, suspected critical/high issues block affected promotion immediately.
|
|
29
|
+
Prioritize active exploitation, exposed credentials, reachability, impact and exploit prerequisites regardless of score; [CVSS v4](https://www.first.org/cvss/v4.0/specification-document) informs documented severity.
|
|
30
|
+
|
|
31
|
+
Coordinate confirmed issues through private advisories and disclose after a qualified fix or effective mitigation, unless an overriding safety or legal reason is recorded.
|
|
32
|
+
Keep embargoed evidence and reporter information restricted.
|
|
33
|
+
Security fixes retain component/rights, native parity, corpus, platform, package, registry and consumer qualification requirements.
|
|
34
|
+
Containment, credential changes, registry deprecation and external messages require their applicable authorization.
|
|
35
|
+
|
|
36
|
+
Review dependency/advisory health at every release preparation and monthly while a release is maintained.
|
|
37
|
+
Native upgrades require fresh source/component rights, output/parity and platform qualification; no unattended adoption is authorized.
|
|
38
|
+
Retain release source, build inputs, notices, recipient delivery/qualification evidence and accepted recovery inputs for the maintained lifetime plus three years after support ends, honoring license obligations requiring more.
|
|
39
|
+
The retention period is an operational floor, not a legal interpretation.
|
|
40
|
+
Preserve AGPL-3.0-only and provide corresponding source/build materials and third-party notices to recipients.
|
package/docs/ci-trust.md
CHANGED
|
@@ -9,8 +9,8 @@ A private shared Action is optional and does not solve public caller access.
|
|
|
9
9
|
|
|
10
10
|
| Event | Trusted graph and policy | Acquisition | Candidate processing | Current status |
|
|
11
11
|
| ------------------------ | ----------------------------------------------------- | ----------------------------------------------- | ---------------------------------------------------- | -------------------------------------------- |
|
|
12
|
-
| Package pull request | Public locked dependencies and fixed native manifests | Public upstream inputs, no private secrets | Package tests run without elevated authority | Hosted qualification
|
|
13
|
-
| Pilot protected branch | Reviewed capability release and consumer policy | Public locked graph, lifecycle scripts disabled | Full authored scope without credentials |
|
|
12
|
+
| Package pull request | Public locked dependencies and fixed native manifests | Public upstream inputs, no private secrets | Package tests run without elevated authority | Hosted package qualification passed |
|
|
13
|
+
| Pilot protected branch | Reviewed capability release and consumer policy | Public locked graph, lifecycle scripts disabled | Full authored scope without credentials | Alpha.3 registry passed; pilot proof pending |
|
|
14
14
|
| Pilot same-repository PR | Reviewed base tooling and policy | Separate trusted acquisition | Candidate Markdown and link target tree only | Architecture selected; qualification pending |
|
|
15
15
|
| Pilot fork PR | Reviewed base tooling and policy | Separate trusted acquisition | Candidate data only; no candidate scripts or graph | Architecture selected; qualification pending |
|
|
16
16
|
| Tool or policy update PR | Existing accepted graph until review | New graph requires owner review | Never treat candidate graph or exclusions as trusted | Required review remains explicit |
|
|
@@ -27,6 +27,18 @@ Candidate checkout must not execute application tooling, Git hooks, package life
|
|
|
27
27
|
The checking process must not inherit checkout write credentials, npm configuration, or OIDC issuance authority.
|
|
28
28
|
Trusted policy review is required for any change to required scope or exclusions.
|
|
29
29
|
|
|
30
|
+
The owner accepted a manual trusted-run boundary for the two pilots on 2026-10-05.
|
|
31
|
+
GitHub required checks select a name/context and App identity, not a workflow revision or event.
|
|
32
|
+
App 15368 identifies GitHub Actions, including candidate-controlled jobs.
|
|
33
|
+
Preserve OwlAPI's `CI / required` and WebVOWL's `WebVOWL application`, `Dependency review`, and `CodeQL gate` required checks.
|
|
34
|
+
Before each pilot merge, the owner accepts the exact candidate head/tree and attributable trusted hosted run, including trusted workflow source, core/native hashes, policy/ignore digests, selected paths, run/job/check IDs, outputs and required-status readback.
|
|
35
|
+
Any changed candidate, base policy/workflow or tool identity invalidates that acceptance.
|
|
36
|
+
A same-name candidate job or green PR summary cannot substitute for this record.
|
|
37
|
+
This route provides manual owner enforcement; it does not claim automatic workflow-specific enforcement.
|
|
38
|
+
No separate App, paid entitlement, write-capable status reporter, OIDC authority or new secret is created.
|
|
39
|
+
Negative hosted probes must still show malformed-link failure, candidate policy/ignore non-authority, candidate marker non-execution and credential absence.
|
|
40
|
+
The single owner's own PR does not constitute independent human approval; any necessary integration route must be explicit and recorded.
|
|
41
|
+
|
|
30
42
|
Do not give publication or repository-write credentials to a PR-controlled dependency graph.
|
|
31
43
|
Do not execute candidate source in an elevated `pull_request_target` job.
|
|
32
44
|
Public capability archives are available to all recipients; source/notice and integrity obligations still apply.
|
|
@@ -38,3 +50,4 @@ The subsequent owner request selects public distribution and removes the paid-pr
|
|
|
38
50
|
Pilot cutover still requires exact public tuple readback, fresh credential-free installation, event/policy isolation and accepted consumer deltas.
|
|
39
51
|
|
|
40
52
|
References: [GitHub event trust](https://docs.github.com/en/actions/reference/security/securely-using-pull_request_target), [public scoped publication](https://docs.npmjs.com/creating-and-publishing-scoped-public-packages/), and [npm trusted publishing](https://docs.npmjs.com/trusted-publishers/).
|
|
53
|
+
Required-check identity limitations are documented in [GitHub ruleset troubleshooting](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/troubleshooting-rules).
|
package/docs/consumer-guide.md
CHANGED
|
@@ -8,7 +8,8 @@ npm install --save-dev --save-exact --ignore-scripts @hadden-industries/markdown
|
|
|
8
8
|
npm ci --ignore-scripts
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Version `0.1.0-alpha.3` is published under the `pilot` tag and qualified for fresh anonymous root and isolated installations on Windows x64 and Ubuntu 24.04 x64.
|
|
12
|
+
It remains a prerelease; pilot acceptance and stable promotion are pending.
|
|
12
13
|
Keep the consumer lockfile.
|
|
13
14
|
An isolated `tooling/markdown` npm project supports consumers that do not use Node for their application.
|
|
14
15
|
Its commands must pass the actual repository root.
|
|
@@ -40,7 +40,10 @@ An upstream Cargo lock is a superset of features and development inputs and does
|
|
|
40
40
|
The original upstream license and per-asset repack identity are retained.
|
|
41
41
|
|
|
42
42
|
The owner selected public distribution after npm rejected the private publication with E402.
|
|
43
|
-
All three
|
|
43
|
+
All three packages declare public access and share the candidate version 0.1.0-alpha.4.
|
|
44
|
+
The alpha.4 candidate avoids duplicate formatting of byte-identical documents while retaining independent prose checks and the changed-document preservation/convergence checks.
|
|
45
|
+
The first alpha.3 hosted OWLAPI shadow checks passed correctness but exceeded the accepted 30-second budget on both platforms.
|
|
46
|
+
Alpha.3 remains immutable historical evidence; alpha.4 requires fresh transported-archive, registry, and pilot qualification before promotion.
|
|
44
47
|
The public alpha.2 archives remain immutable historical delivery evidence and are unqualified for Linux execution.
|
|
45
48
|
The packer normalizes the Linux npm member's executable mode with Python tarfile, verifies all member bytes are unchanged, and recomputes the final archive integrity.
|
|
46
49
|
Qualify the exact transported release archives on both platforms, rather than each platform's independently generated package.
|
|
@@ -66,8 +69,22 @@ One pilot rehearsal is required before stable promotion.
|
|
|
66
69
|
Security reports use GitHub's private vulnerability reporting route when enabled; otherwise contact the repository owner through the project's existing private channel.
|
|
67
70
|
No unattended observation service is assumed.
|
|
68
71
|
During this authorized session, critical/high reports block promotion immediately.
|
|
69
|
-
|
|
70
|
-
|
|
72
|
+
The owner accepted maintained support targets on 2026-10-05; see [the security policy](../SECURITY.md).
|
|
73
|
+
Maksym Shostak / Hadden Industries owns manual report handling and dependency/advisory review.
|
|
74
|
+
Private reporting is enabled for this repository, as read back from GitHub on 2026-10-05; the existing organization security mailbox is the fallback.
|
|
75
|
+
Review dependency/advisory health at each release preparation and monthly while maintained.
|
|
76
|
+
Retain release source, build inputs, notices, recipient delivery/qualification evidence, and accepted recovery inputs for the maintained release lifetime plus three years after support ends, honoring any applicable license obligations requiring more.
|
|
77
|
+
This is an operational retention floor, not a legal interpretation.
|
|
78
|
+
Before stable, only the prerelease designated by `pilot` is maintained; after stable, only the latest stable release designated by `latest` is maintained unless another line is explicitly accepted.
|
|
79
|
+
Consumers remain exactly pinned and upgrades individually qualified; older downloadable releases have no implied support or backport promise.
|
|
80
|
+
|
|
81
|
+
Pilot qualification uses six consecutive valid full checks per frozen corpus/platform, excluding installation, with observed nearest-rank sample p95 at most 30 seconds.
|
|
82
|
+
With six samples, that is the observed maximum; it is not a statistical tail or arbitrary-repository guarantee.
|
|
83
|
+
The memory budgets are 512 MiB Windows Job Object committed memory and 512 MiB Linux whole-process-tree resident memory, reported separately as different metrics.
|
|
84
|
+
These budgets do not impose OS runtime limits or raise existing package limits.
|
|
85
|
+
Require zero unexpected errors or adjudicated false positives in the window and accepted fixture/probe corpus, retaining expected negative probes separately.
|
|
86
|
+
Rehearse one task-owned pilot restoration within 60 minutes through byte/sentinel readback and incumbent local checks; hosted required-status recovery remains separate acceptance evidence.
|
|
87
|
+
Accepted budgets do not establish that the pending Linux corpus, hosted pilots, or restoration have passed.
|
|
71
88
|
|
|
72
89
|
Provide AGPL corresponding source and build materials alongside object-code delivery to actual recipients.
|
|
73
90
|
Preserve third-party license texts and attribution.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hadden-industries/markdown-quality",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.4",
|
|
4
4
|
"description": "Shared, bounded Markdown formatting, GFM linting, and local-link checking",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "AGPL-3.0-only",
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
"assets",
|
|
22
22
|
"LICENSE",
|
|
23
23
|
"LICENSES",
|
|
24
|
+
"SECURITY.md",
|
|
24
25
|
"README.md",
|
|
25
26
|
"THIRD-PARTY-NOTICES.md",
|
|
26
27
|
"docs/consumer-guide.md",
|
|
@@ -45,7 +46,7 @@
|
|
|
45
46
|
"prettier": "3.9.9"
|
|
46
47
|
},
|
|
47
48
|
"optionalDependencies": {
|
|
48
|
-
"@hadden-industries/markdown-quality-win32-x64": "0.1.0-alpha.
|
|
49
|
-
"@hadden-industries/markdown-quality-linux-x64": "0.1.0-alpha.
|
|
49
|
+
"@hadden-industries/markdown-quality-win32-x64": "0.1.0-alpha.4",
|
|
50
|
+
"@hadden-industries/markdown-quality-linux-x64": "0.1.0-alpha.4"
|
|
50
51
|
}
|
|
51
52
|
}
|
package/src/formatting.js
CHANGED
|
@@ -32,6 +32,10 @@ export async function formatDocument(text, context, tool) {
|
|
|
32
32
|
};
|
|
33
33
|
const layout = await prettier.format(text, options);
|
|
34
34
|
const result = await prettier.format(runNative(tool, layout), options);
|
|
35
|
+
// Byte identity proves preservation and an observed fixed point of the entire
|
|
36
|
+
// deterministic formatter pipeline. The independent prose check still runs.
|
|
37
|
+
if (result === text)
|
|
38
|
+
return { output: result, diagnostics: checkProse(tool, result) };
|
|
35
39
|
if (
|
|
36
40
|
JSON.stringify(semantic(parse(text))) !==
|
|
37
41
|
JSON.stringify(semantic(parse(result)))
|