Skip to content

Commit 0f4a64e

Browse files
committed
docs: record discussions and listing submission
1 parent 96373f7 commit 0f4a64e

7 files changed

Lines changed: 62 additions & 8 deletions

File tree

docs/V0.5.4_ENGINEERING_PLAN.md

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ opens a lower-friction support channel and submits the one currently eligible cu
4141
| G2 | Real-world regression corpus | One deterministic command executes structured cases for report rendering, pnpm workspace inheritance, nested templates, moved-condition retest and benign numeric SVG review; generated JSON/Markdown records provenance and limits | completed |
4242
| G3 | First-trial and v0.5.4 candidate surfaces | Main-branch first trial is unpinned; CI/release/trusted install examples stay pinned; candidate version surfaces agree on 0.5.4 while published release state remains 0.5.3 | completed |
4343
| G4 | Focused and final verification | New focused tests pass, generated artifacts are byte-current, one bounded complete-suite pass and Skill Creator validation pass | completed |
44-
| G5 | Authorized external actions | Discussions is enabled and verified; awesome-devsecops rules are rechecked and a factual v0.5.3 PR is submitted if still eligible | in progress |
45-
| G6 | Release approval checkpoint | Candidate commits and external evidence are pushed; exact release operations and residual risks are presented to the author | pending |
44+
| G5 | Authorized external actions | Discussions is enabled and verified; awesome-devsecops rules are rechecked and a factual v0.5.3 PR is submitted if still eligible | completed |
45+
| G6 | Release approval checkpoint | Candidate commits and external evidence are pushed; exact release operations and residual risks are presented to the author | in progress |
4646
| G7 | Public v0.5.4 release | Signed tag/assets, GitHub Release, npm provenance, `v1` consumer verification and release-state update | blocked on explicit approval |
4747

4848
## G0 - Scope and baseline
@@ -229,6 +229,21 @@ awesome-devsecops:
229229
- Record PR URL, head commit, review state and any maintainer requirement. A submitted PR is not an
230230
accepted listing.
231231

232+
Completion record (2026-08-16):
233+
234+
- Enabled GitHub Discussions and read back `has_discussions: true`; recorded the verified
235+
repository timestamp and Discussions URL without creating synthetic questions or testimonials.
236+
- Rechecked awesome-devsecops at current default-branch commit
237+
`1704e442a30ca21caeb05e8721eb26855129c86b`: the repository is not archived, its free/open-source
238+
scope and empty `CONTRIBUTING.md` are unchanged, and recent accepted additions use one README
239+
line under the relevant category.
240+
- Forked the repository, added one alphabetical `Tools > Testing` link and opened
241+
[`devsecops/awesome-devsecops#172`](https://github.com/devsecops/awesome-devsecops/pull/172).
242+
The PR is OPEN at head `b24339b5ac2e16cda9eca5e92ecd847493bd38bc`, changes one file/one
243+
line and describes only public v0.5.3 facts.
244+
- Source metadata records `submitted_pending_review` and `accepted: false`; submission is not
245+
represented as an accepted listing, usage proof or maintainer endorsement.
246+
232247
## G6 - Candidate handoff
233248

234249
Before asking for release approval, report:

docs/adoption/listings.json

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"schemaVersion": 1,
3-
"reviewedAt": "2026-08-16T11:35:40Z",
3+
"reviewedAt": "2026-08-16T12:47:09Z",
44
"projectFacts": {
55
"repository": "https://github.com/parousia8888/web-app-security-skill",
66
"firstDefaultBranchCommit": "b52288fd52af9f23195e75d6bb845f6ac2d3e8b9",
@@ -37,11 +37,21 @@
3737
"repository": "https://github.com/devsecops/awesome-devsecops",
3838
"policyCommit": "1704e442a30ca21caeb05e8721eb26855129c86b",
3939
"policyPaths": ["README.md", "CONTRIBUTING.md"],
40-
"submissionMethod": "owner_review_required",
41-
"status": "eligible_on_documented_scope",
40+
"submissionMethod": "pull_request",
41+
"status": "submitted_pending_review",
4242
"unmetRules": [],
4343
"earliestAgeRecheckAt": null,
44-
"notes": "The published scope accepts free or open-source capabilities that support DevSecOps, which the CLI and Action can satisfy. CONTRIBUTING.md is empty and gives no current submission format, so recheck repository practice before any owner-authorized pull request."
44+
"notes": "The policy commit remains current and accepts free or open-source DevSecOps capabilities. CONTRIBUTING.md is empty; recent merged additions change one README list item. PR 172 adds one Testing entry and makes no accuracy, adoption or endorsement claim.",
45+
"submission": {
46+
"url": "https://github.com/devsecops/awesome-devsecops/pull/172",
47+
"state": "open",
48+
"createdAt": "2026-08-16T12:47:09Z",
49+
"headCommit": "b24339b5ac2e16cda9eca5e92ecd847493bd38bc",
50+
"upstreamBaseCommit": "1704e442a30ca21caeb05e8721eb26855129c86b",
51+
"filesChanged": 1,
52+
"linesAdded": 1,
53+
"accepted": false
54+
}
4555
},
4656
{
4757
"id": "static-analysis",

docs/github-metadata.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@
88
"description": "Scope, audit, harden, and retest web projects with AI coding agents and reproducible evidence.",
99
"homepage": "https://github.com/parousia8888/web-app-security-skill/blob/main/docs/tutorial.md",
1010
"homepageDecision": "owner_decision_pending",
11+
"discussions": {
12+
"status": "enabled",
13+
"verifiedAt": "2026-08-16T12:45:22Z",
14+
"url": "https://github.com/parousia8888/web-app-security-skill/discussions"
15+
},
1116
"socialPreview": {
1217
"asset": "docs/assets/social-preview.png",
1318
"metadata": "docs/assets/social-preview.json",

scripts/check-adoption-contract.mjs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,17 @@ if (listings.projectFacts.hasMcpServer !== false || mcpListing?.status !== 'out_
105105
console.error('adoption contract: MCP registry must remain out of scope without an MCP server');
106106
failed = true;
107107
}
108+
const awesomeDevsecops = listings.candidates.find((item) => item.id === 'awesome-devsecops');
109+
if (awesomeDevsecops?.status !== 'submitted_pending_review'
110+
|| awesomeDevsecops.submissionMethod !== 'pull_request'
111+
|| awesomeDevsecops.submission?.state !== 'open'
112+
|| awesomeDevsecops.submission?.accepted !== false
113+
|| !/^https:\/\/github\.com\/devsecops\/awesome-devsecops\/pull\/\d+$/.test(
114+
awesomeDevsecops.submission?.url || '',
115+
)) {
116+
console.error('adoption contract: awesome-devsecops submission state is incomplete or overstated');
117+
failed = true;
118+
}
108119
for (const item of listings.candidates.filter((candidate) => candidate.repository)) {
109120
if (!/^[a-f0-9]{40}$/.test(item.policyCommit || '') || !item.policyPaths.length) {
110121
console.error(`adoption contract: ${item.id} policy review is not commit-pinned`);

scripts/check-p7-surfaces.mjs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@ function fail(message) {
4444

4545
if (metadata.schemaVersion !== 1) fail('metadata schemaVersion must be 1');
4646
if (metadata.repository !== 'parousia8888/web-app-security-skill') fail('repository identity drifted');
47+
if (metadata.discussions?.status !== 'enabled'
48+
|| metadata.discussions.url !== `https://github.com/${metadata.repository}/discussions`
49+
|| !/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/.test(metadata.discussions.verifiedAt || '')) {
50+
fail('Discussions metadata is not verified');
51+
}
4752
if (metadata.description !== metadata.promise?.en || metadata.description.length > 160) {
4853
fail('GitHub description must be the canonical short promise and fit the GitHub limit');
4954
}
@@ -117,14 +122,15 @@ for (const issue of metadata.roadmapIssues || []) {
117122
}
118123

119124
if (live) {
120-
const repoResult = spawnSync('gh', ['repo', 'view', metadata.repository, '--json', 'description,homepageUrl,repositoryTopics'], { encoding: 'utf8' });
125+
const repoResult = spawnSync('gh', ['repo', 'view', metadata.repository, '--json', 'description,homepageUrl,repositoryTopics,hasDiscussionsEnabled'], { encoding: 'utf8' });
121126
if (repoResult.status !== 0) fail(repoResult.stderr || 'unable to read live GitHub metadata');
122127
else {
123128
const repo = JSON.parse(repoResult.stdout);
124129
const topics = (repo.repositoryTopics || []).map((item) => item.name).sort();
125130
if (repo.description !== metadata.description) fail('live GitHub description differs from source');
126131
if (repo.homepageUrl !== metadata.homepage) fail('live GitHub homepage differs from source');
127132
if (topics.join('\n') !== metadata.topics.join('\n')) fail('live GitHub topics differ from source');
133+
if (repo.hasDiscussionsEnabled !== true) fail('live GitHub Discussions is not enabled');
128134
}
129135
const labelResult = spawnSync('gh', ['label', 'list', '--repo', metadata.repository, '--limit', '100', '--json', 'name,color,description'], { encoding: 'utf8' });
130136
if (labelResult.status !== 0) fail(labelResult.stderr || 'unable to read live GitHub labels');

test/adoption-discovery.test.mjs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,11 @@ const byId = Object.fromEntries(listings.candidates.map((item) => [item.id, item
2626
assert.equal(byId['awesome-claude-code'].status, 'ineligible');
2727
assert.deepEqual(byId['awesome-claude-code'].unmetRules, ['at_least_14_days_old_or_100_stars']);
2828
assert.equal(byId['awesome-agent-skills'].status, 'ineligible');
29-
assert.equal(byId['awesome-devsecops'].status, 'eligible_on_documented_scope');
29+
assert.equal(byId['awesome-devsecops'].status, 'submitted_pending_review');
30+
assert.equal(byId['awesome-devsecops'].submission.url,
31+
'https://github.com/devsecops/awesome-devsecops/pull/172');
32+
assert.equal(byId['awesome-devsecops'].submission.state, 'open');
33+
assert.equal(byId['awesome-devsecops'].submission.accepted, false);
3034
assert.deepEqual(byId['static-analysis'].unmetRules,
3135
['more_than_one_contributor', 'more_than_20_stars', 'at_least_three_months_old']);
3236
assert.equal(byId['mcp-registry'].status, 'out_of_scope');

test/p7-surfaces.test.mjs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ for (const [script, expected] of [
2121
const evidence = readFileSync(join(ROOT, 'docs', 'launch-evidence.md'), 'utf8');
2222
const metadata = JSON.parse(readFileSync(join(ROOT, 'docs', 'github-metadata.json'), 'utf8'));
2323
const releaseState = JSON.parse(readFileSync(join(ROOT, 'docs', 'release-state.json'), 'utf8'));
24+
assert.equal(metadata.discussions.status, 'enabled');
25+
assert.equal(metadata.discussions.url,
26+
'https://github.com/parousia8888/web-app-security-skill/discussions');
2427
assert.match(evidence, /OS command injection lead \(CWE-78\); SUSPECTED HIGH -> security fixed; functional passed/);
2528
assert.match(evidence, /43 findings across 5 fixed commits -> 11 useful leads; 27 expected benign; 1 unknown; 4 confirmed facts/);
2629
assert.doesNotMatch(evidence, /2 security HIGH|11 discoverability HIGH|13\s+(?:high|HIGH)/);

0 commit comments

Comments
 (0)