Skip to content

docs(security): define coordinated disclosure lifecycle - #104

Merged
seonghobae merged 33 commits into
docs/canonical-product-architecturefrom
docs/security-disclosure-lifecycle
Aug 12, 2026
Merged

docs(security): define coordinated disclosure lifecycle#104
seonghobae merged 33 commits into
docs/canonical-product-architecturefrom
docs/security-disclosure-lifecycle

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Buyer-visible gap

Protected main has only a short vulnerability-reporting policy. It does not define supported versions, coordinated disclosure, safe research boundaries, advisory/CVE handling, exact released-revision evidence, or the difference between an acknowledgement target and a remediation SLA.

Bounded slice

This PR changes only three repository-owned files relative to its live documentation base:

  • SECURITY.md: supported-version, scope, reporting, coordinated-disclosure, safe-harbor/research, advisory, and exact-release-evidence contracts;
  • docs/doctoring/security-disclosure-lifecycle.md: APA 7 evidence for ISO/IEC 29147:2018, ISO/IEC 30111:2019, current GitHub primary documentation, and NIST SP 800-218 Rev. 1, explicitly identified as an Initial Public Draft;
  • tests/test_repository_security_metadata.py: deterministic regression coverage for the buyer-visible contract.

The original branch history added the disclosure-lifecycle contract test before the policy and evidence implementation.

Stack and exact identity

Integration order is #96#105 → this PR.

  • Live base branch: docs/canonical-product-architecture (PR docs: establish canonical product architecture and evidence model #105)
  • Previous base and contributor snapshot: 952c21f62a49cce89ca9af2cbc5696f5e6f4461c / ef378546c59c22fb6ec9b6c901a00a74187b2e98 (historical)
  • Independently resolved live base exact head: 5543d1b493ceb9dbac485e10347820929d6bee92
  • Contributor exact head: 2b7bf1a8bb8aa361bd1e9ec9038547b3807a730f
  • Synchronization commit parents: disclosure predecessor c7aeab9d9bc14446a09ca317a73839c59cf3d543 and canonical base 5543d1b493ceb9dbac485e10347820929d6bee92
  • Comparison against the independently resolved live base: 30 commits ahead, 0 behind, changing only the three files listed above.

The normal two-parent synchronization imports #105's live canonical inventory repair while preserving only this PR's disclosure-policy range: SECURITY.md, docs/doctoring/security-disclosure-lifecycle.md, and tests/test_repository_security_metadata.py. Focused documentation/security contracts passed 40 tests; the full merged suite passed 598 tests with 100% production statement/line coverage (3,667/3,667), 100% branch coverage (934/934), and 100% public-docstring coverage. A deletion mutant that removed the private-reporting release gate survived the predecessor test and fails the strengthened current test, proving the new regression assertion is behavior-sensitive. Hosted evidence on exact head 2b7bf1a8bb8aa361bd1e9ec9038547b3807a730f is complete; predecessor workflow evidence does not transfer:

  • Tests run 31562234073, job 94006750257: success, 598 passed, 100% production statement/line coverage (3,667/3,667), 100% branch coverage (934/934), and 100% public-docstring coverage.
  • Security run 31562234040: success. Supply-chain job 94006750072 found no known vulnerabilities and published CycloneDX SBOM artifact 9128152209 with archive digest sha256:1552c2c9592874d04947449e70f8e9327dcf93d862575a07a56d6a81f4bebfe3; CodeQL job 94006750118 scanned 85/85 Python files and 3/3 GitHub Actions files successfully.
  • Fuzz run 31562234103: success. Hypothesis job 94006750224 passed 8 property tests; Atheris job 94006750220 completed the four bounded targets with 8,143,169 / 9,866,829 / 555,710 / 3,396 runs and no crash artifact.
  • Every listed job explicitly fetched and checked out this exact contributor head with checkout credentials disabled.
  • Exact-head CodeRabbit full-review comment 5262202801 reports no actionable findings and independently confirms private vulnerability reporting is currently disabled; the policy therefore keeps stable-release authorization blocked until maintainers enable the private channel and configure recipients or document a monitored alternative private contact. This remains automated comment/status evidence, not formal or independent approval. The only formal review is a predecessor-head CodeRabbit COMMENTED review; unresolved inline threads are zero and qualifying independent approval is absent.

This PR remains Draft while #96/#105 remain unintegrated and while qualifying independent approval is absent.

Historical exact-head evidence for 4c2beb3fd8d683e500bd012ebe219c3460e13de2

Every repository-local workflow below explicitly fetched and checked out exact contributor head 4c2beb3fd8d683e500bd012ebe219c3460e13de2 with checkout credentials disabled.

  • Compare against then-current docs: establish canonical product architecture and evidence model #105 head d0a6ac8dc131a3db185265209286150b57b1c848: 18 commits ahead, 0 behind, changing only SECURITY.md, docs/doctoring/security-disclosure-lifecycle.md, and tests/test_repository_security_metadata.py.
  • Tests run 31459823607, job 93680939206: success, 582 passed, 100% production statement and branch coverage (3,667 statements / 934 branches), and 100% public-docstring coverage.
  • Security run 31459823573: success.
    • Supply-chain job 93680939244 found no known vulnerabilities and published CycloneDX SBOM artifact 9089384393 with archive digest sha256:8c4a492bd7a0b90188e0af5233d9bb170c917eb2269c2835416bae3a27aa56eb.
    • CodeQL job 93680939225 scanned 85/85 Python files and 3/3 GitHub Actions files successfully.
  • Fuzz run 31459823571: success.
    • Hypothesis job 93680939070: 8 passed.
    • Atheris job 93680939016: four 61-second targets completed 8,338,226 / 9,980,232 / 607,589 / 3,545 runs without a crash artifact; conditional upload was correctly skipped because the job succeeded.
  • CodeRabbit remains status-only evidence.
  • Formal reviews: zero.
  • Unresolved inline review threads: zero.
  • Qualifying independent non-author approval: absent.

Predecessor evidence for 19cba12f54785ee1d6ca68c7d719abdd8797bcb4 remains historical. This PR remains Draft. Repository-local exact-head evidence does not substitute for protected integration of #96/#105, required automated review evidence, or qualifying independent approval.

Standards and authority boundary

NIST identifies SP 800-218 Rev. 1 / SSDF Version 1.2 as an Initial Public Draft published 2025-12-17; this PR does not present it as a final normative requirement. ISO/IEC 29147:2018 and ISO/IEC 30111:2019 remain the disclosure and handling standards, with GitHub first-party documentation governing repository reporting and advisory workflows.

This PR mutates only ContextualWisdomLab/contextual-orchestrator. It does not write to or dispatch writers into ContextualWisdomLab/.github, naruon, inkspan, or any other repository.

Acceptance

Keep Draft while upstream #96/#105 remain Draft or unintegrated. On every changed head, regenerate repository-required Tests, Fuzz, Security, Security Scan, SAST, coverage/docstring, automated-review, and independent-review evidence. Queued, pending, skipped-required, cancelled, absent, failed, predecessor-head, stale-base, author-only, status-only, rate-limited, infrastructure-only, or synthetic-merge evidence is not merge authority.

Historical exact-head evidence for 8e617b3220981fd03b980da5fd420a7d6bf42f81

The two-parent synchronization head is 8e617b3220981fd03b980da5fd420a7d6bf42f81, based on exact #105 head 3418993f48538f3a02c360648932eff4de8b3244. Exact comparison is 19 commits ahead, 0 behind and still changes only SECURITY.md, docs/doctoring/security-disclosure-lifecycle.md, and tests/test_repository_security_metadata.py.

All three repository-local workflows explicitly fetched and checked out exact contributor head 8e617b3220981fd03b980da5fd420a7d6bf42f81 with checkout credentials disabled. Tests run 31461441107, job 93685564847, succeeded with 583 passed, 100% production statement/branch coverage (3,667 statements / 934 branches), and 100% public-docstring coverage. Security run 31461441111 succeeded: CodeQL job 93685564960 scanned 85/85 Python files and 3/3 workflow files; supply-chain job 93685565002 found no known vulnerabilities and published CycloneDX SBOM artifact 9090114273 with archive digest sha256:e332a193da8503b20eabcf3c3e4ddcbdb9d43da90cc7b94c240dfbc408ef0b02. Fuzz run 31461441139 succeeded: Hypothesis job 93685565010 passed 8 property tests and Atheris job 93685565030 completed four 61-second targets with 7,831,263 / 9,780,383 / 582,894 / 3,392 runs and no crash artifact. Formal reviews and unresolved inline threads remain zero; qualifying independent approval is absent. This PR remains Draft while #96/#105 are unintegrated.

Historical exact-head evidence for 9e3138c29fba70190daef6b61927391cae449ec0

The two-parent synchronization head is 9e3138c29fba70190daef6b61927391cae449ec0, with parents 8e617b3220981fd03b980da5fd420a7d6bf42f81 and exact #105 head 12e868b53d32971a9642148217dfc0ad77535f5c. Exact comparison against that live base is 20 commits ahead, 0 behind and still changes only SECURITY.md, docs/doctoring/security-disclosure-lifecycle.md, and tests/test_repository_security_metadata.py.

All repository-local workflows explicitly fetched and checked out exact contributor head 9e3138c29fba70190daef6b61927391cae449ec0 with checkout credentials disabled:

  • Tests run 31464394236, job 93694146374: success, 583 passed, 100% production statement/branch coverage (3,667 statements / 934 branches), and 100% public-docstring coverage.
  • Security run 31464394291: success. Supply-chain job 93694146453 found no known vulnerabilities and published CycloneDX SBOM artifact 9090970730 with archive digest sha256:d3d7b1234ef505d1453eb94db431197c0f24cc69c15d97a7c34e841617d650a8; CodeQL job 93694146511 scanned 85/85 Python files and 3/3 workflow files successfully.
  • Fuzz run 31464394241: success. Hypothesis job 93694146214 passed 8 property tests; Atheris job 93694146406 completed four 61-second targets with 8,281,605 / 9,796,039 / 726,102 / 3,472 runs and no crash artifact.
  • Formal reviews: zero. Unresolved inline review threads: zero. Qualifying independent non-author approval: absent.

The unchanged three-file diff proves the security-disclosure slice survived synchronization without taking ownership of canonical #105 content. This PR remains Draft while #96/#105 and the central review authority are unintegrated.

Historical exact-head evidence for ec8669d8aeaece607bdceb167836aaf59f04dba9

The two-parent synchronization head is ec8669d8aeaece607bdceb167836aaf59f04dba9, with parents 9e3138c29fba70190daef6b61927391cae449ec0 and exact #105 head 7630125307afae9b9c0cbdb1fd8f78ff347c8346. Exact comparison against that base is 21 commits ahead, 0 behind and still changes only SECURITY.md, docs/doctoring/security-disclosure-lifecycle.md, and tests/test_repository_security_metadata.py.

All repository-local workflows explicitly fetched and checked out exact head ec8669d8aeaece607bdceb167836aaf59f04dba9 with checkout credentials disabled:

  • Tests run 31467808551, job 93704291777: success, 583 passed, 100% production statement/branch coverage (3,667 statements / 934 branches), and 100% public-docstring coverage.
  • Security run 31467808510: success. Supply-chain job 93704291435 found no known vulnerabilities and published CycloneDX SBOM artifact 9092218239 with archive digest sha256:449bb9f325c157f98d78a75eeeccbcf3d57139841e45f4d2531a0d7a51a7ab1b; CodeQL job 93704291531 scanned 85/85 Python files and 3/3 workflow files successfully.
  • Fuzz run 31467808650: success. Hypothesis job 93704291949 passed 8 property tests; Atheris job 93704291991 completed four 61-second targets with 7,941,980 / 9,947,143 / 690,794 / 3,408 runs and no crash artifact.
  • Formal reviews: zero. Unresolved inline threads: zero. Qualifying independent non-author approval: absent.

The unchanged three-file diff proves the disclosure slice survived synchronization. This PR remains Draft while #96/#105 and central review authority remain unintegrated.

Historical exact-head evidence for 4e22a9b0883d3f6acbe6ddee302fa623c66a44cf

The two-parent synchronization head is 4e22a9b0883d3f6acbe6ddee302fa623c66a44cf, with parents ec8669d8aeaece607bdceb167836aaf59f04dba9 and exact #105 head 8ce282ddf6c43bcb49301e95c8d9c12f1a72cd72. Exact comparison against that live base is 22 commits ahead, 0 behind and still changes only SECURITY.md, docs/doctoring/security-disclosure-lifecycle.md, and tests/test_repository_security_metadata.py.

  • Local merged-tree suite: 584 passed, 100% production statement/branch coverage (3,667 statements / 934 branches), and 100% public-docstring coverage.
  • Tests run 31472945625, job 93720119726: success, 584 passed, with the same coverage and docstring gates on the exact head.
  • Security run 31472945655: success. Supply-chain job 93720118796 found no known vulnerabilities and published CycloneDX SBOM artifact 9094235739 with archive digest sha256:0f2da842efa4e1d0b6e5fe897e4357aabd0e6c401461506dca225ce3809d3df4; CodeQL job 93720118794 scanned 85/85 Python files and 3/3 workflow files successfully.
  • Fuzz run 31472945438: success. Hypothesis job 93720117755 passed 8 property tests; Atheris job 93720117707 completed four 61-second targets with 8,255,379 / 9,955,677 / 640,143 / 3,547 runs and no crash artifact.
  • Formal reviews: zero. Unresolved inline threads: zero. Qualifying independent non-author approval: absent.

The unchanged three-file diff proves the disclosure slice survived synchronization without taking ownership of canonical #105 content. This exact-head repository-local proof does not substitute for protected integration of #96/#105, required automated review, or qualifying independent approval. The PR remains Draft.

2026-08-11 downstream library-status synchronization

Merge commit 8d537900b4179756ad16c8404fb17efce5f1e364 synchronizes exact upstream #105 head 12b65705b4657a677c54a8e520946067037eeb6a through a normal two-parent commit while preserving this PR's unique disclosure-policy work. The exact base-to-head diff remains limited to SECURITY.md, docs/doctoring/security-disclosure-lifecycle.md, and tests/test_repository_security_metadata.py; the compare is 0 commits behind and contains no additional file drift.

Repository-local workflows checked out this exact head with checkout credentials disabled:

  • Tests run 31477191861, job 93733513556: success, 585 passed, 100% production statement and branch coverage (3,667 statements / 934 branches, zero misses or partials), and 100% public-docstring coverage.
  • Security run 31477191860: success. Supply-chain job 93733513571 found no known vulnerabilities and published CycloneDX SBOM artifact 9095916666 with archive digest sha256:70fd77041a16eb3cc00d5ae4980a70a032b8c842f49a65d4855bd39fc107e666; CodeQL job 93733513504 uploaded its result successfully.
  • Fuzz run 31477191858: success. Hypothesis job 93733513451 passed 8 property tests; Atheris job 93733513437 completed all four bounded targets without a crash artifact.
  • Formal reviews: zero. Unresolved inline review threads: zero. Qualifying independent non-author approval: absent.

This exact-head evidence is repository-local only. Upstream #105 and #96 remain Draft and unintegrated, so this PR remains Draft and no status substitutes for qualifying independent approval.

2026-08-11 canonical-guidance synchronization

Merge commit 8453f082672d96b564ff2c32d028b11e05d8729f has parents 8d537900b4179756ad16c8404fb17efce5f1e364 and exact live base 828ca54f2b96a3bdd7adec24a26c0d8164df47d1. The conflict-free merge preserves this PR's unique range as exactly SECURITY.md, docs/doctoring/security-disclosure-lifecycle.md, and tests/test_repository_security_metadata.py; no predecessor evidence was transferred.

All repository-local workflows explicitly fetched and checked out this exact contributor head with credentials disabled:

  • Tests run 31480171511, job 93743066274: success, 586 passed, 100% production statement and branch coverage (3,667 statements / 934 branches, zero misses/partials), and 100% public-docstring coverage.
  • Security run 31480171492: success. CodeQL job 93743066072 and supply-chain job 93743066120 both used the exact head; dependency audit found no known vulnerabilities and the SBOM upload completed.
  • Fuzz run 31480171506: success. Hypothesis job 93743066151 passed 8 property tests; Atheris job 93743066102 completed all four bounded targets without a crash artifact.
  • Formal reviews: zero. Unresolved inline review threads: zero.

This PR remains Draft while #105 and upstream #96 are unintegrated and while qualifying independent approval is absent.

2026-08-11 runtime-guide status synchronization

Merge commit 6b2a272b17c25d0bf2dc4e82cc18407b02a779df has parents 8453f082672d96b564ff2c32d028b11e05d8729f and exact live base 62a4983e4b5b237a8f5d30b0889cd5077d4ff356. The conflict-free merge preserves this PR's unique range as exactly SECURITY.md, docs/doctoring/security-disclosure-lifecycle.md, and tests/test_repository_security_metadata.py; no predecessor evidence was transferred.

All repository-local workflows explicitly fetched and checked out this exact contributor head with credentials disabled:

  • Tests run 31481938227, job 93748672111: success, 587 passed, 100% production statement and branch coverage (3,667 statements / 934 branches, zero misses/partials), and 100% public-docstring coverage.
  • Security run 31481938229: success. CodeQL job 93748672225 and supply-chain job 93748672265 used the exact head; dependency audit found no known vulnerabilities.
  • Fuzz run 31481938230: success. Hypothesis job 93748672341 passed 8 property tests; Atheris job 93748672447 completed all four bounded targets without a crash artifact.
  • Formal reviews: zero. Unresolved inline review threads: zero.

This PR remains Draft while #105 and #96 are unintegrated and qualifying independent approval is absent.

2026-08-12 canonical architecture refresh

Merge commit ea6bcd66ec6affbed379aad6882e93b46060e8ab has parents 6b2a272b17c25d0bf2dc4e82cc18407b02a779df and exact live #105 head 4a91606a82a1fc7ec9b68f4fe2150ae1f2160657. Exact comparison is 26 commits ahead, 0 behind and remains limited to SECURITY.md, docs/doctoring/security-disclosure-lifecycle.md, and tests/test_repository_security_metadata.py.

Merge commit 2680fa092e56a8528dcc3e379b5349b978a18f1c has parents ea6bcd66ec6affbed379aad6882e93b46060e8ab and exact #105 head 21dba9907df28ffc9b64b0078a0ace2a35ceb0f8. Exact comparison is 27 commits ahead, 0 behind and remains limited to the same three disclosure files. Focused documentation/security contracts passed 40 tests; the complete merged suite passed locally with 598 tests, 100% production statement/line coverage (3,667/3,667), 100% branch coverage (934/934), and 100% public-docstring coverage. Hosted exact-head Tests 31540849347 / job 93942647803 succeeded with 598 passed, 100% production statement/line coverage (3,667/3,667), 100% branch coverage (934/934), and 100% public-docstring coverage. Security 31540849299 succeeded: supply-chain job 93942648042 found no known vulnerabilities and published CycloneDX SBOM artifact 9120790812 (sha256:b1eb9e607f6b36f9ab9b7681f944dbb73651bda5538bb4d0c808bc7ace754d37), and CodeQL job 93942648014 succeeded. Fuzz 31540849525 succeeded: Hypothesis job 93942648503 passed 8 tests and Atheris job 93942648511 completed four 61-second targets with 7,994,890 / 9,734,480 / 670,240 / 3,320 runs and no crash artifact. Every job checked out exact head with persisted credentials disabled. Formal reviews remain absent, all inline threads are resolved, and qualifying independent approval is absent.

The tested merge tree 08e898d15a30870dcf591e245275ac7ce78e57ea passed the full local suite with 597 passed, 100% production statement and branch coverage (3,667 statements / 934 branches, zero misses or partials), and 100% public-docstring coverage. All hosted repository-local workflows explicitly fetched and checked out the same exact contributor head with credentials disabled:

  • Tests run 31534600722, job 93922578771: success, 597 passed, with the same 100% production statement/branch and public-docstring gates.
  • Security run 31534600752: success. Supply-chain job 93922578760 found no known vulnerabilities and published CycloneDX SBOM artifact 9118560902 with archive digest sha256:ebde68e15d3046d3491be1075affa9896336a3a79fe7c1f76b9836868c2b9347; CodeQL job 93922578828 completed successfully on the exact head.
  • Fuzz run 31534600716: success. Hypothesis job 93922578679 passed 8 property tests; Atheris job 93922578523 completed all four 61-second targets with 7,984,157 / 9,853,758 / 565,683 / 3,368 runs and no crash artifact.
  • Formal reviews: 0 submissions, zero approvals. Unresolved inline review threads: zero. Qualifying independent non-author approval: absent.

Predecessor workflow evidence does not transfer. This PR stays Draft while #96/#105 are unintegrated and required automated/independent review authority is absent.

2026-08-12 volatile-evidence boundary synchronization

Merge commit ef378546c59c22fb6ec9b6c901a00a74187b2e98 has parents disclosure predecessor 2680fa092e56a8528dcc3e379b5349b978a18f1c and exact live #105 head 952c21f62a49cce89ca9af2cbc5696f5e6f4461c. Exact comparison is 28 commits ahead, 0 behind and remains limited to SECURITY.md, docs/doctoring/security-disclosure-lifecycle.md, and tests/test_repository_security_metadata.py. The normal two-parent merge preserves #105's durable Traceability and dated evidence-appendix boundary without taking ownership of canonical documentation.

Focused documentation/security contracts passed 40 tests. The complete merged tree passed locally with 598 tests, 100% production statement/line coverage (3,667/3,667), 100% branch coverage (934/934), and 100% public-docstring coverage. Hosted exact-head Tests 31549911202 / job 93970184905 succeeded with 598 passed, 100% production statement/line coverage (3,667/3,667), 100% branch coverage (934/934), and 100% public-docstring coverage. Security 31549911201 succeeded: supply-chain job 93970184972 found no known vulnerabilities and published CycloneDX SBOM artifact 9123878985 (sha256:31c7960c554135cf5f4b5ba6b585ef42eeed98aa69d728cc6276b1c1a69b3dab), and CodeQL job 93970184988 scanned 85/85 Python and 3/3 GitHub Actions files successfully. Fuzz 31549911206 succeeded: Hypothesis job 93970184819 passed 8 tests and Atheris job 93970184710 completed four 61-second targets with 7,990,033 / 9,846,930 / 584,837 / 3,405 runs and no crash artifact. Every job checked out exact head with persisted credentials disabled. Formal reviews and inline threads remain absent; qualifying independent non-author approval remains absent. This PR remains Draft while #96/#105 are unintegrated.

Hosted exact-head evidence after stack refresh

At contributor head c7aeab9d9bc14446a09ca317a73839c59cf3d543, all repository-local contributor-head workflows are terminal-success and explicitly fetched and checked out that exact SHA:

  • Tests run 31557758927, job 93993516730: success; 598 passed, 100% production statement and branch coverage (3,667 statements, 934 branches, zero misses/partials), and 100% public-docstring coverage.
  • Security run 31557758958: success; CodeQL job 93993516882 analyzed 85/85 Python files and 3/3 workflow files, and Python supply-chain job 93993516983 reported no known vulnerabilities. CycloneDX artifact 9126590338 has ZIP SHA-256 6eae8100da969d2c6a6c38108ce078080401ad834c418c13ecc443c49ceceb43.
  • Fuzz run 31557758976: success; Hypothesis job 93993516915 completed 8 property tests, while Atheris job 93993516846 completed bounded request-body, agent-config, secret-redaction, and orchestration-engine targets. Crash-artifact upload was skipped because no crash artifact existed.

Formal reviews remain 0; qualifying independent approval remains absent. Unresolved inline threads remain 0. This is exact contributor-head evidence, not protected-main integration or independent approval. PR #104 remains Draft behind #105 and #96.

Summary by CodeRabbit

  • 문서

    • 지원 버전, 적용 범위, 취약점 신고 요건을 포함한 보안 정책을 강화했습니다.
    • 비공개 신고부터 검증, 수정, 조정된 공개 및 재발 방지까지의 보안 취약점 공개 절차를 문서화했습니다.
    • 보안 연구 제한, 세이프 하버, 응답 목표, 자문·릴리스 증거 및 제보자 크레딧 기준을 명확히 했습니다.
    • 관련 보안 표준과 참고 자료를 추가했습니다.
  • 테스트

    • 보안 정책과 취약점 공개 문서의 필수 절차, 표준 및 증거 항목을 자동으로 검증합니다.

2026-08-12 inventory-consistency stack refresh

Normal two-parent merge 5a737053f6d80c7800646170a0a3f0588767225d synchronizes exact accepted #105 head 5543d1b493ceb9dbac485e10347820929d6bee92 onto disclosure predecessor c7aeab9d9bc14446a09ca317a73839c59cf3d543. Exact comparison is 30 commits ahead, 0 behind and remains limited to SECURITY.md, docs/doctoring/security-disclosure-lifecycle.md, and tests/test_repository_security_metadata.py.

Focused inventory contract passed; the documentation/security subset passed 40 tests. The complete local merged suite passed 598 tests with 100% production statement/line coverage (3,667/3,667), 100% branch coverage (934/934), and 100% public-docstring coverage. Every repository-local workflow checked out exact head 5a737053f6d80c7800646170a0a3f0588767225d with credentials disabled. Tests 31560538966 passed 598 tests, 100% production statement/line coverage (3,667/3,667), 100% branch coverage (934/934), and 100% public-docstring coverage. Security 31560539280 found no known dependency vulnerabilities, uploaded CycloneDX artifact 9127564708 (sha256:3c85ccc417274453c8578ba82d73411c9b50d4f3615270c677b72789c2f6220b), and completed CodeQL over 85/85 Python and 3/3 workflow files. Fuzz 31560539088 passed 8 Hypothesis tests and four 61-second Atheris targets with 7,988,821 / 10,116,936 / 573,816 / 3,418 runs and no crash artifact. Fresh exact-head OpenCode/Noema review is requested but pending. Formal independent approval remains absent. #104 remains Draft behind unintegrated #105 and #96.

2026-08-12 disclosure-policy review remediation

CodeRabbit's exact predecessor review found that supported-version status was implicit, policy tests were global-token checks, and release-evidence states were not tied to the canonical release guide. The repair is test-first: the focused contract failed RED because the policy did not explicitly state that no stable release currently exists. Current head e2ffd8552e5c9943e5deacb3453ef88aa01789c9 now states the current support boundary, makes private-reporting configuration a stable-release admission gate, locks all six ordered lifecycle stages and section-scoped reporting/safe-harbor requirements, and aligns both policy documents with the canonical non-passing evidence states and exact integrated revision. Focused GREEN passed; the documentation/security subset passed 40 tests; the complete local suite passed 598 tests with 100% production statement/line coverage (3,667/3,667), 100% branch coverage (934/934), and 100% public-docstring coverage.

Hosted exact-head Tests, Security, and Fuzz are complete as recorded above; exact-head CodeRabbit automated review reports no actionable findings. Private vulnerability reporting enablement and notification-recipient configuration remain an explicit stable-release operational gate; no private contact or configuration was invented. Qualifying independent approval remains absent, and #104 stays Draft behind unintegrated #105 and #96.

2026-08-12 snapshot-identity synchronization

Normal two-parent merge 7257092a9bb4ee4666e4a4ae9336326e7ba81df5 synchronizes exact #105 head b62cc165b6c585cf4e03deca3d1236c630db64ef onto disclosure predecessor 2b7bf1a8bb8aa361bd1e9ec9038547b3807a730f. Exact comparison is 33 commits ahead, 0 behind and remains limited to SECURITY.md, docs/doctoring/security-disclosure-lifecycle.md, and tests/test_repository_security_metadata.py.

Exact-head Tests 31572625571, Security 31572625538, and Fuzz 31572625541 are queued. Queued evidence is not success and no predecessor-head result transfers. The sole formal review is a predecessor-head CodeRabbit COMMENTED review, unresolved inline threads are zero, and qualifying independent approval is absent. Keep this PR Draft behind unintegrated #105 and #96.

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 60a4da6e-acc8-4621-9a09-4c817f15b2ec

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 39d6251a-1e1c-491b-9062-b58cbcbf0549

📥 Commits

Reviewing files that changed from the base of the PR and between 5543d1b and 2b7bf1a.

📒 Files selected for processing (3)
  • SECURITY.md
  • docs/doctoring/security-disclosure-lifecycle.md
  • tests/test_repository_security_metadata.py

📝 Walkthrough

Walkthrough

보안 정책을 지원 버전, 비공개 신고, 6단계 공개 수명주기, 세이프하버 및 릴리스 증거 기준으로 확장했습니다. 관련 문서와 정책 검증 테스트를 추가했습니다.

Changes

보안 공개 및 처리 정책

Layer / File(s) Summary
정책 범위와 신고 요건
SECURITY.md
지원 릴리스와 취약점 범위를 정의했습니다. 비공개 신고 요건과 공개 이슈의 민감 정보 제한을 추가했습니다. 선의의 보안 연구 범위와 금지된 테스트를 명시했습니다.
공개 수명주기와 릴리스 증거
SECURITY.md, docs/doctoring/security-disclosure-lifecycle.md
접수, 검증, 수정, 공개 조정, 증거 공개, 재발 방지의 6단계 수명주기를 정의했습니다. 통합·릴리스된 리비전과 검사 결과를 증거 기준으로 명시했습니다. 관련 표준과 APA 7 참고문헌을 추가했습니다.
정책 문서 검증
tests/test_repository_security_metadata.py
정책과 수명주기 문서의 필수 항목, 공개 단계 순서, 비통과 상태, 표준, 릴리스 증거 및 참고문헌 토큰을 검증합니다. 모듈 직접 실행 목록에 새 테스트를 추가했습니다.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related issues

  • ContextualWisdomLab/noema 이슈 73: 비공개 취약점 신고, 공개 수명주기 및 릴리스 증거 요건을 함께 다루므로 관련성이 있습니다.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 보안 취약점의 조정된 공개 수명주기를 정의하는 주요 변경 사항을 정확하고 간결하게 설명합니다.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/security-disclosure-lifecycle

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@seonghobae
seonghobae changed the base branch from main to docs/canonical-product-architecture August 9, 2026 15:04

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

Please review the exact current contributor head c7aeab9d9bc14446a09ca317a73839c59cf3d543. Treat predecessor-head findings and evidence as historical; report only current-head actionable findings.

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

@seonghobae I will review the current contributor head c7aeab9d9bc14446a09ca317a73839c59cf3d543. I will report only actionable findings for that head. I will treat predecessor-head findings and evidence as historical.

✅ Action performed

Full review finished.

Copy link
Copy Markdown
Contributor Author

@opencode-agent @cwl-noema-review

Review exact current contributor head c7aeab9d9bc14446a09ca317a73839c59cf3d543 against exact live base 3fce9bb61e9f48452dca1aba57541117dfdd4ef3. Treat all predecessor-head reviews and checks as historical. Report only current-head actionable findings; do not treat model review as independent human approval.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (2)
SECURITY.md (2)

19-25: 🔒 Security & Privacy | 🔵 Trivial

비공개 신고 경로의 저장소 설정을 확인하세요.

/security/advisories/new는 저장소 수준의 private vulnerability reporting이 활성화된 경우에만 비공개 신고 양식을 제공합니다. 이 설정과 보안 알림 수신자는 이 변경에 포함되지 않습니다. 병합 전에 기능 활성화와 알림 수신자를 확인하세요. 기능이 비활성화된 경우에는 대체 비공개 연락처를 정책에 제공하세요. GitHub 문서도 이 기능이 SECURITY.md와 별도로 활성화되며, 비활성화된 저장소는 정책 안내 또는 공개 이슈를 사용한다고 설명합니다. (docs.github.com)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@SECURITY.md` around lines 19 - 25, Verify that private vulnerability
reporting is enabled for the repository and that security notification
recipients are configured before merging. If it cannot be enabled, update the
SECURITY.md policy with an alternative private contact method; retain the
existing public-issue fallback without exposing vulnerability details.

Source: MCP tools


44-48: 🗄️ Data Integrity & Integration | 🔵 Trivial

릴리스 증거 상태값을 canonical 릴리스 가이드와 연결하세요.

docs/RELEASE_GUIDE.md가 canonical 릴리스 절차를 정의하지만, SECURITY.mddocs/doctoring/security-disclosure-lifecycle.md는 이를 참조하지 않습니다. 현재 테스트도 상태 목록의 일치 여부를 검사하지 않습니다. canonical 가이드를 참조하도록 두 문서를 수정하고, 상태 목록과 exact integrated revision 요구사항을 검증하는 회귀 테스트를 추가하세요.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@SECURITY.md` around lines 44 - 48, Update the security release-evidence
guidance and security-disclosure lifecycle documentation to reference the
canonical release guide. Add a regression test that verifies both documents
contain the complete canonical status list and require evidence for the exact
integrated revision, including exclusion of non-passing states. Keep the
existing release-policy requirements intact.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@SECURITY.md`:
- Around line 5-9: Update the Supported Versions section to explicitly state
that no stable release currently exists and that main is not a supported
release. Retain the existing guidance for when a stable release is published,
including adding its version or release line to the supported versions.

In `@tests/test_repository_security_metadata.py`:
- Around line 104-146: Strengthen
test_security_policy_documents_coordinated_disclosure_lifecycle by replacing the
broad policy_text token-only checks with section-scoped assertions and ordered
lifecycle checks. Verify all six lifecycle stages in sequence, the public-issue
rule requiring removal of secrets and personal data, the prohibited safe-harbor
items, and fail-closed release evidence requirements, while keeping the existing
doctoring_text checks. Align the expected wording and scope with
docs/doctoring/security-disclosure-lifecycle.md.

---

Nitpick comments:
In `@SECURITY.md`:
- Around line 19-25: Verify that private vulnerability reporting is enabled for
the repository and that security notification recipients are configured before
merging. If it cannot be enabled, update the SECURITY.md policy with an
alternative private contact method; retain the existing public-issue fallback
without exposing vulnerability details.
- Around line 44-48: Update the security release-evidence guidance and
security-disclosure lifecycle documentation to reference the canonical release
guide. Add a regression test that verifies both documents contain the complete
canonical status list and require evidence for the exact integrated revision,
including exclusion of non-passing states. Keep the existing release-policy
requirements intact.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 9b358819-0510-4f20-86e5-ade1488b31a3

📥 Commits

Reviewing files that changed from the base of the PR and between 3fce9bb and c7aeab9.

📒 Files selected for processing (3)
  • SECURITY.md
  • docs/doctoring/security-disclosure-lifecycle.md
  • tests/test_repository_security_metadata.py

Comment thread SECURITY.md
Comment thread tests/test_repository_security_metadata.py

Copy link
Copy Markdown
Contributor Author

@opencode-agent @cwl-noema-review

Review exact current contributor head 5a737053f6d80c7800646170a0a3f0588767225d against exact live base 5543d1b493ceb9dbac485e10347820929d6bee92. Confirm that the normal two-parent synchronization preserves the disclosure slice as exactly SECURITY.md, docs/doctoring/security-disclosure-lifecycle.md, and tests/test_repository_security_metadata.py. Treat all predecessor-head checks and reviews as historical. Report only current-head actionable findings; do not treat model review as independent human approval.

Copy link
Copy Markdown
Contributor Author

Addressed the valid current-head findings from CodeRabbit comments 3763340542 and 3763340546, plus the release-evidence nitpick in 4912724007, at exact head e2ffd8552e5c9943e5deacb3453ef88aa01789c9. The focused contract failed RED on the missing explicit current support state, then passed after the policy and doctoring repair. Tests now parse sections, enforce all six lifecycle stages in order, lock public-issue secret/personal-data removal, safe-harbor prohibitions, the canonical non-passing evidence states, and exact-integrated-revision linkage to docs/RELEASE_GUIDE.md. The private-reporting configuration concern is represented as a fail-closed stable-release operational gate because this tool path cannot verify or configure notification recipients and no private contact was invented. Focused GREEN passed; 40 documentation/security tests and 598 full-suite tests passed locally with 100% production statement/line, branch, and public-docstring coverage. Hosted exact-head workflows are running.

@opencode-agent @cwl-noema-review Please review exact head e2ffd8552e5c9943e5deacb3453ef88aa01789c9 against exact base 5543d1b493ceb9dbac485e10347820929d6bee92; report only current-head actionable findings. This is model evidence, not independent approval.

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

@opencode-agent @cwl-noema-review

Review exact current contributor head 2b7bf1a8bb8aa361bd1e9ec9038547b3807a730f against exact live base 5543d1b493ceb9dbac485e10347820929d6bee92. The valid predecessor findings are addressed, and the deletion-mutant check proves the private-reporting stable-release gate is now section-scoped and behavior-sensitive. Treat all predecessor-head checks and reviews as historical. Report only current-head actionable findings; do not treat model review as independent human approval.

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

base='5543d1b493ceb9dbac485e10347820929d6bee92'
head='2b7bf1a8bb8aa361bd1e9ec9038547b3807a730f'

git cat-file -e "${base}^{commit}"
git cat-file -e "${head}^{commit}"

printf '%s\n' '=== Commit range ==='
git diff --stat "$base" "$head"
git diff --name-status "$base" "$head"

printf '%s\n' '=== Changed-file diff ==='
git diff --no-ext-diff --unified=80 "$base" "$head" -- \
  SECURITY.md \
  docs/doctoring/security-disclosure-lifecycle.md \
  tests/test_repository_security_metadata.py

printf '%s\n' '=== Referenced release guide ==='
if [ -f docs/RELEASE_GUIDE.md ]; then
  cat -n docs/RELEASE_GUIDE.md
else
  printf '%s\n' 'docs/RELEASE_GUIDE.md is absent'
fi

printf '%s\n' '=== Test module structure ==='
ast-grep outline tests/test_repository_security_metadata.py --items all --view expanded

printf '%s\n' '=== Security-policy test references ==='
rg -n -C 3 --glob 'tests/test_repository_security_metadata.py' \
  '(SECURITY\.md|security-disclosure-lifecycle|RELEASE_GUIDE|private|stable-release|evidence|lifecycle)' \
  tests/test_repository_security_metadata.py

Length of output: 43319


🏁 Script executed:

#!/bin/bash
set -euo pipefail

base='5543d1b493ceb9dbac485e10347820929d6bee92'
head='2b7bf1a8bb8aa361bd1e9ec9038547b3807a730f'

printf '%s\n' '=== Ref identity and ancestry ==='
printf 'checked_out_head='
git rev-parse HEAD
printf 'requested_head='
git rev-parse "$head"
git merge-base --is-ancestor "$base" "$head" && echo 'base_is_ancestor_of_requested_head=true'
git merge-base --is-ancestor "$head" HEAD && echo 'requested_head_is_ancestor_of_checked_out_head=true' || true

printf '%s\n' '=== Diff whitespace validation ==='
git diff --check "$base" "$head"

printf '%s\n' '=== Markdown relative-link targets ==='
python - <<'PY'
from pathlib import Path
import re

for source in (Path("SECURITY.md"), Path("docs/doctoring/security-disclosure-lifecycle.md")):
    text = source.read_text(encoding="utf-8")
    for target in re.findall(r'\[[^\]]+\]\((?!https?://|#)([^)#]+)', text):
        resolved = (source.parent / target).resolve()
        print(f"{source}: {target}: {'OK' if resolved.is_file() else 'MISSING'}")
PY

printf '%s\n' '=== Repository security settings ==='
gh api repos/ContextualWisdomLab/contextual-orchestrator \
  --jq '{default_branch, visibility, archived, security_and_analysis}' || true
gh api repos/ContextualWisdomLab/contextual-orchestrator/private-vulnerability-reporting \
  --jq '{enabled}' || true

printf '%s\n' '=== Current PR range and mergeability metadata ==='
gh pr view 104 --repo ContextualWisdomLab/contextual-orchestrator \
  --json number,headRefOid,baseRefOid,isDraft,mergeStateStatus,changedFiles \
  --jq '{number, headRefOid, baseRefOid, isDraft, mergeStateStatus, changedFiles}' || true

Length of output: 2671


🤖 web_search executed:

Verify from the primary publisher pages the current publication status and metadata for ISO/IEC 29147:2018, ISO/IEC 30111:2019, and NIST SP 800-218 Rev. 1 Initial Public Draft DOI 10.6028/NIST.SP.800-218r1.ipd. Also verify GitHub documentation for private vulnerability reporting and repository security advisories.

Length of output: 8604


@seonghobae No actionable findings for current head 2b7bf1a8bb8aa361bd1e9ec9038547b3807a730f against base 5543d1b493ceb9dbac485e10347820929d6bee92.

I confirmed that the PR changes only SECURITY.md, docs/doctoring/security-disclosure-lifecycle.md, and tests/test_repository_security_metadata.py. The checked-out commit matches the requested head. The requested base is its ancestor. The PR metadata reports the same range.

The policy, doctoring document, and test contract agree on the fail-closed release-evidence states and the exact integrated-revision requirement. The relative Markdown links resolve. git diff --check found no whitespace errors. The cited ISO and NIST status claims match the primary-source results.

GitHub currently reports private vulnerability reporting as disabled. This is not an actionable defect in this disclosure-only range. The policy correctly represents that state as a stable-release authorization block until maintainers enable the private channel and configure recipients, or document a monitored alternative private contact. No stable release exists.

This review is automated review evidence. It is not independent human approval.

✅ Action performed

Full review finished.

@seonghobae
seonghobae marked this pull request as ready for review August 12, 2026 10:14
@seonghobae
seonghobae merged commit 32ca453 into docs/canonical-product-architecture Aug 12, 2026
7 checks passed
@seonghobae
seonghobae deleted the docs/security-disclosure-lifecycle branch August 12, 2026 10:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant