docs(governance): prepare public issue creation package

This commit is contained in:
igor04091968
2026-06-23 22:10:51 +03:00
parent 337da4bb5f
commit c2e0afae10
22 changed files with 1441 additions and 22 deletions
+8
View File
@@ -263,6 +263,10 @@ collectors.
[docs/RESIDUAL_RISKS_RU.md](docs/RESIDUAL_RISKS_RU.md). [docs/RESIDUAL_RISKS_RU.md](docs/RESIDUAL_RISKS_RU.md).
- Public issues plan: - Public issues plan:
[docs/PUBLIC_ISSUES_PLAN_RU.md](docs/PUBLIC_ISSUES_PLAN_RU.md). [docs/PUBLIC_ISSUES_PLAN_RU.md](docs/PUBLIC_ISSUES_PLAN_RU.md).
- Public issue templates are prepared and should be created manually or through
the opt-in script; this does not claim community adoption:
[creation runbook](docs/PUBLIC_ISSUES_CREATION_RUNBOOK_RU.md),
[manifest](docs/public-issues/public-issues-manifest.json).
### Engineering governance and residual risks ### Engineering governance and residual risks
@@ -272,6 +276,10 @@ collectors.
[docs/RESIDUAL_RISKS_RU.md](docs/RESIDUAL_RISKS_RU.md). [docs/RESIDUAL_RISKS_RU.md](docs/RESIDUAL_RISKS_RU.md).
- Public issues plan: - Public issues plan:
[docs/PUBLIC_ISSUES_PLAN_RU.md](docs/PUBLIC_ISSUES_PLAN_RU.md). [docs/PUBLIC_ISSUES_PLAN_RU.md](docs/PUBLIC_ISSUES_PLAN_RU.md).
- Public issues creation runbook:
[docs/PUBLIC_ISSUES_CREATION_RUNBOOK_RU.md](docs/PUBLIC_ISSUES_CREATION_RUNBOOK_RU.md).
- Public issues manifest:
[docs/public-issues/public-issues-manifest.json](docs/public-issues/public-issues-manifest.json).
- Advisory branch protection policy: - Advisory branch protection policy:
[docs/BRANCH_PROTECTION_POLICY_RU.md](docs/BRANCH_PROTECTION_POLICY_RU.md). [docs/BRANCH_PROTECTION_POLICY_RU.md](docs/BRANCH_PROTECTION_POLICY_RU.md).
- CODEOWNERS and PR template are maintained for review routing and public - CODEOWNERS and PR template are maintained for review routing and public
+18 -1
View File
@@ -32,6 +32,12 @@ backup, registry-readiness документации, плана российск
`docs/RESIDUAL_RISKS_RU.md`. `docs/RESIDUAL_RISKS_RU.md`.
- План публичных GitHub issues: - План публичных GitHub issues:
`docs/PUBLIC_ISSUES_PLAN_RU.md`. `docs/PUBLIC_ISSUES_PLAN_RU.md`.
- Пакет шаблонов публичных GitHub issues подготовлен:
`docs/public-issues/`.
- Manifest публичных issues:
`docs/public-issues/public-issues-manifest.json`.
- Runbook создания публичных issues:
`docs/PUBLIC_ISSUES_CREATION_RUNBOOK_RU.md`.
- Review checklist: - Review checklist:
`docs/REVIEW_CHECKLIST_RU.md`. `docs/REVIEW_CHECKLIST_RU.md`.
- Advisory branch protection policy: - Advisory branch protection policy:
@@ -74,6 +80,10 @@ backup, registry-readiness документации, плана российск
`docs/RESIDUAL_RISKS_RU.md`. `docs/RESIDUAL_RISKS_RU.md`.
- Подготовлен план публичных issues для ручного заведения: - Подготовлен план публичных issues для ручного заведения:
`docs/PUBLIC_ISSUES_PLAN_RU.md`. `docs/PUBLIC_ISSUES_PLAN_RU.md`.
- Подготовлен пакет issue templates со статусом `ready_to_create`:
`docs/public-issues/`.
- Подготовлен runbook ручного/opt-in создания issues:
`docs/PUBLIC_ISSUES_CREATION_RUNBOOK_RU.md`.
## Planned / pending ## Planned / pending
@@ -84,7 +94,12 @@ backup, registry-readiness документации, плана российск
- Юридическое подтверждение правообладателя. - Юридическое подтверждение правообладателя.
- Финальная юридическая проверка пакета документов перед подачей. - Финальная юридическая проверка пакета документов перед подачей.
- Проверка совместимости с российскими ОС. - Проверка совместимости с российскими ОС.
- Публичные roadmap/issues из `docs/PUBLIC_ISSUES_PLAN_RU.md`. - Публичные roadmap/issues из `docs/PUBLIC_ISSUES_PLAN_RU.md`: templates
готовы, создание самих GitHub issues остается manual/pending, пока URLs не
записаны в `docs/public-issues/public-issues-manifest.json`.
- GitHub issue creation remains pending until URLs are recorded in
`docs/public-issues/public-issues-manifest.json`.
- URLs remain pending in `docs/public-issues/public-issues-manifest.json`.
- Visible external code review is still pending. - Visible external code review is still pending.
- Branch protection enablement is not claimed until repository settings are - Branch protection enablement is not claimed until repository settings are
verified. verified.
@@ -119,4 +134,6 @@ backup, registry-readiness документации, плана российск
- `docs/REVIEW_CHECKLIST_RU.md` - `docs/REVIEW_CHECKLIST_RU.md`
- `docs/RESIDUAL_RISKS_RU.md` - `docs/RESIDUAL_RISKS_RU.md`
- `docs/PUBLIC_ISSUES_PLAN_RU.md` - `docs/PUBLIC_ISSUES_PLAN_RU.md`
- `docs/PUBLIC_ISSUES_CREATION_RUNBOOK_RU.md`
- `docs/public-issues/public-issues-manifest.json`
- `docs/BRANCH_PROTECTION_POLICY_RU.md` - `docs/BRANCH_PROTECTION_POLICY_RU.md`
+137
View File
@@ -0,0 +1,137 @@
# Runbook создания публичных GitHub issues
Дата: 2026-06-23
Статус: issue templates готовы к созданию. Реальные GitHub issues считаются
pending, пока ссылки не записаны в
`docs/public-issues/public-issues-manifest.json`.
GitHub issues используются для public roadmap visibility. Они не являются
registry release evidence. Primary registry contour остается Russian Gitea +
planned Russian build-runner.
## Подготовленный пакет
- Issue templates: `docs/public-issues/*.md`.
- Manifest: `docs/public-issues/public-issues-manifest.json`.
- Dry-run check: `scripts/prepare_public_issues.sh`.
- Opt-in creation script: `scripts/create_public_issues_from_manifest.sh`.
## Ручное создание через GitHub UI
1. Открыть GitHub repository issue tracker.
2. Для каждого файла `docs/public-issues/NNN-*.md` создать новый issue.
3. Взять `Title` из секции `## Title`.
4. Скопировать тело issue из markdown-файла целиком.
5. Назначить labels из секции `## Labels`.
6. Проверить, что в тексте нет секретов, персональных данных, реальных
customer identifiers, внутренних IP/hostname и логов сотрудников.
7. После публикации скопировать URL issue.
8. Обновить `github_issue_url` в
`docs/public-issues/public-issues-manifest.json`.
## Создание через gh CLI
Dry-run:
```bash
bash scripts/prepare_public_issues.sh
```
Скрипт проверяет наличие файлов, обязательные секции и manifest. Он не требует
GitHub token и не создает issues.
Opt-in создание:
```bash
gh auth status
CONFIRM_CREATE_GITHUB_ISSUES=YES bash scripts/create_public_issues_from_manifest.sh
```
Скрипт:
- требует `CONFIRM_CREATE_GITHUB_ISSUES=YES`;
- требует `gh` и `jq`;
- проверяет `gh auth status`;
- создает отсутствующие labels;
- создает issues по manifest;
- печатает URL созданных issues для последующего ручного внесения в manifest.
Скрипт не запускается из `scripts/registry_readiness_check.sh`.
## Labels
Ожидаемые labels:
- `registry`
- `ops`
- `evidence`
- `build-runner`
- `release`
- `legal`
- `docs`
- `qa`
- `coverage`
- `policy`
- `security`
- `review`
- `governance`
- `compat`
- `demo`
- `public`
- `pilot`
- `process`
- `github`
## Обновление manifest после создания
До создания:
```json
"github_issue_url": null
```
После создания:
```json
"github_issue_url": "https://github.com/igor04091968/AWatch-rus/issues/<number>"
```
Status можно оставлять `ready_to_create` до отдельного решения о переводе в
`created`; минимальное evidence требование - наличие URL.
## Запрещенные данные
В публичные issues нельзя вставлять:
- пароли, tokens, private keys, recovery codes;
- реальные IP, hostname, VPN details или private network topology;
- ФИО сотрудников, логи сотрудников, screenshots с персональными данными;
- customer identifiers, contract data или private legal evidence;
- security exploit details до triage по `SECURITY.md`.
## Forbidden claims
Issues не должны утверждать:
- Do not claim completed Russian software registry submission.
- Do not claim FSTEC/FSB certification.
- Do not claim SIEM/DLP replacement.
- Forbidden claim: ML/LLM-based detection is not claimed.
- Forbidden claim: automatic remediation is not claimed.
- Do not claim active external peer review until public reviewed PRs exist.
- Do not claim enabled branch protection until repository settings are verified.
- Do not claim ready Russian build-runner until provisioning evidence exists.
- Do not claim completed restore test until restore evidence exists.
## Проверки перед commit
```bash
python3 scripts/public_secret_pattern_check.py
bash -n scripts/prepare_public_issues.sh
bash scripts/prepare_public_issues.sh
bash -n scripts/create_public_issues_from_manifest.sh
bash -n scripts/registry_readiness_check.sh
bash scripts/registry_readiness_check.sh
git diff --check
```
+27 -14
View File
@@ -2,30 +2,43 @@
Дата: 2026-06-22 Дата: 2026-06-22
Статус: public governance backlog plan. Статус: public governance backlog plan; issue templates are
`ready_to_create`.
Этот документ перечисляет публичные GitHub issues, которые нужно завести Этот документ перечисляет публичные GitHub issues, которые нужно завести
вручную. Он не утверждает, что задачи уже созданы или выполнены. вручную или через opt-in `gh` script. Он не утверждает, что задачи уже созданы
или выполнены.
Цель: повысить visibility development process после настройки российского Цель: повысить visibility development process после настройки российского
Gitea-контура, backup, public CI, coverage, security scanning и status freeze. Gitea-контура, backup, public CI, coverage, security scanning и status freeze.
Подготовленный пакет:
- issue templates: `docs/public-issues/`;
- machine manifest:
`docs/public-issues/public-issues-manifest.json`;
- creation runbook: `docs/PUBLIC_ISSUES_CREATION_RUNBOOK_RU.md`;
- dry-run check: `scripts/prepare_public_issues.sh`;
- opt-in creation script: `scripts/create_public_issues_from_manifest.sh`.
Реальные GitHub issue URLs остаются pending, пока они не записаны в manifest.
## Issues to create manually ## Issues to create manually
| Title | Labels | Short goal | Acceptance criteria | Status | | Title | Labels | Short goal | Acceptance criteria | Status |
| --- | --- | --- | --- | --- | | --- | --- | --- | --- | --- |
| `[registry] Perform Gitea backup restore test` | `registry`, `ops`, `evidence` | Prove restore procedure on a separate host and keep `restore_tested=false` until evidence exists. | Restore log, checksum verification, post-restore checks and rollback notes are attached or linked. | planned | | `[registry] Perform Gitea backup restore test` | `registry`, `ops`, `evidence` | Prove restore procedure on a separate host and keep `restore_tested=false` until evidence exists. | Restore log, checksum verification, post-restore checks and rollback notes are attached or linked. | ready_to_create |
| `[registry] Prepare temporary Russian build-runner awatch-build-01` | `registry`, `build-runner`, `ops` | Provision temporary or permanent Russian build-runner for registry release evidence. | Host provisioning notes, toolchain list, Gitea access method and required checks plan are documented. | planned | | `[registry] Prepare temporary Russian build-runner awatch-build-01` | `registry`, `build-runner`, `ops` | Provision temporary or permanent Russian build-runner for registry release evidence. | Host provisioning notes, toolchain list, Gitea access method and required checks plan are documented. | ready_to_create |
| `[release] Produce first release evidence package` | `release`, `registry`, `evidence` | Run release evidence scripts on `awatch-build-01` and collect artifacts/logs/checksums. | Release evidence manifest, logs, checksums and artifact storage path are documented. | planned | | `[release] Produce first release evidence package` | `release`, `registry`, `evidence` | Run release evidence scripts on `awatch-build-01` and collect artifacts/logs/checksums. | Release evidence manifest, logs, checksums and artifact storage path are documented. | ready_to_create |
| `[legal] Prepare rightsholder evidence package` | `legal`, `registry`, `docs` | Prepare rightsholder and legal evidence for future registry submission. | Rightsholder evidence checklist, ownership notes and legal review TODOs are documented. | planned | | `[legal] Prepare rightsholder evidence package` | `legal`, `registry`, `docs` | Prepare rightsholder and legal evidence for future registry submission. | Rightsholder evidence checklist, ownership notes and legal review TODOs are documented. | ready_to_create |
| `[qa] Define coverage threshold policy` | `qa`, `coverage`, `policy` | Define threshold only after stable coverage baseline review. | Coverage baseline reviewed and initial threshold policy proposed without blocking current baseline workflow. | planned | | `[qa] Define coverage threshold policy` | `qa`, `coverage`, `policy` | Define threshold only after stable coverage baseline review. | Coverage baseline reviewed and initial threshold policy proposed without blocking current baseline workflow. | ready_to_create |
| `[security] Prepare external security/code review checklist` | `security`, `review`, `governance` | Establish visible peer review and external security review checklist. | Checklist references `docs/REVIEW_CHECKLIST_RU.md` and defines public review evidence expectations. | planned | | `[security] Prepare external security/code review checklist` | `security`, `review`, `governance` | Establish visible peer review and external security review checklist. | Checklist references `docs/REVIEW_CHECKLIST_RU.md` and defines public review evidence expectations. | ready_to_create |
| `[compat] Test Russian OS compatibility matrix` | `compat`, `qa`, `registry` | Validate supported Russian OS matrix and document evidence. | Matrix lists target OS versions, test status and gaps without unsupported compatibility claims. | planned | | `[compat] Test Russian OS compatibility matrix` | `compat`, `qa`, `registry` | Validate supported Russian OS matrix and document evidence. | Matrix lists target OS versions, test status and gaps without unsupported compatibility claims. | ready_to_create |
| `[ops] Validate release artifacts storage in RF` | `ops`, `release`, `registry` | Confirm release artifact storage location and retention in the Russian contour. | Storage path, retention, access model and checksum verification procedure are documented. | planned | | `[ops] Validate release artifacts storage in RF` | `ops`, `release`, `registry` | Confirm release artifact storage location and retention in the Russian contour. | Storage path, retention, access model and checksum verification procedure are documented. | ready_to_create |
| `[docs] Refresh public demo pack and screenshots` | `docs`, `demo`, `public` | Update public demo pack, screenshots and non-sensitive demo evidence. | Demo materials contain no secrets, PII, real employee data or customer infrastructure identifiers. | planned | | `[docs] Refresh public demo pack and screenshots` | `docs`, `demo`, `public` | Update public demo pack, screenshots and non-sensitive demo evidence. | Demo materials contain no secrets, PII, real employee data or customer infrastructure identifiers. | ready_to_create |
| `[pilot] Prepare Pilot Acceptance Checklist v2` | `pilot`, `qa`, `docs` | Update pilot acceptance checklist after residual risk register and public issue plan. | Checklist references residual risks, smoke checks and acceptance evidence needed for pilot stage. | planned | | `[pilot] Prepare Pilot Acceptance Checklist v2` | `pilot`, `qa`, `docs` | Update pilot acceptance checklist after residual risk register and public issue plan. | Checklist references residual risks, smoke checks and acceptance evidence needed for pilot stage. | ready_to_create |
| `[governance] Enable PR-based review workflow` | `governance`, `review`, `process` | Move visible changes through pull requests where practical. | First public PR review record exists or a documented dry-run PR demonstrates the process. | planned | | `[governance] Enable PR-based review workflow` | `governance`, `review`, `process` | Move visible changes through pull requests where practical. | First public PR review record exists or a documented dry-run PR demonstrates the process. | ready_to_create |
| `[governance] Add branch protection policy` | `governance`, `github`, `policy` | Configure GitHub branch protection after maintainer review of the advisory policy. | Branch protection settings are documented with screenshots or notes, or blockers are recorded. | planned | | `[governance] Add branch protection policy` | `governance`, `github`, `policy` | Configure GitHub branch protection after maintainer review of the advisory policy. | Branch protection settings are documented with screenshots or notes, or blockers are recorded. | ready_to_create |
## Guardrails ## Guardrails
+12 -6
View File
@@ -68,19 +68,23 @@ visibility, release evidence contour and legal package. Они требуют д
## 3. Низкая публичная активность issue tracker ## 3. Низкая публичная активность issue tracker
- Текущий статус: риск открыт частично; issue templates and public roadmap - Текущий статус: риск открыт частично; issue templates, public roadmap and
exist, but public roadmap-tasks are still few. issue creation package exist, but real GitHub issues are still pending until
URLs are recorded.
- Влияние: низкая внешняя visibility development process; сложнее показать - Влияние: низкая внешняя visibility development process; сложнее показать
плановое управление backlog and governance. плановое управление backlog and governance.
- Почему не блокирует pilot/readiness stage: templates, roadmap and status docs - Почему не блокирует pilot/readiness stage: templates, roadmap and status docs
already define expected process; missing public tasks are a visibility gap, already define expected process; missing public tasks are a visibility gap,
not a runtime readiness gap. not a runtime readiness gap.
- Как риск будет снижаться: manually create public issues for registry, QA, - Как риск будет снижаться: manually create public issues for registry, QA,
security, compatibility, ops and pilot follow-up work. security, compatibility, ops and pilot follow-up work using
`docs/public-issues/` and `docs/PUBLIC_ISSUES_CREATION_RUNBOOK_RU.md`.
- Уже снижающие evidence/documents/CI: `ROADMAP.md`, issue templates, - Уже снижающие evidence/documents/CI: `ROADMAP.md`, issue templates,
`docs/PROJECT_STATUS_RU.md`, `docs/PUBLIC_ISSUES_PLAN_RU.md`. `docs/PROJECT_STATUS_RU.md`, `docs/PUBLIC_ISSUES_PLAN_RU.md`,
- Следующий action: завести публичные issues по списку из `docs/public-issues/public-issues-manifest.json`,
`docs/PUBLIC_ISSUES_PLAN_RU.md`. `scripts/prepare_public_issues.sh`.
- Следующий action: создать реальные GitHub issues и записать URLs в
`docs/public-issues/public-issues-manifest.json`.
## 4. Низкая community adoption ## 4. Низкая community adoption
@@ -183,3 +187,5 @@ visibility, release evidence contour and legal package. Они требуют д
Полный список задач для ручного заведения в GitHub issue tracker: Полный список задач для ручного заведения в GitHub issue tracker:
- `docs/PUBLIC_ISSUES_PLAN_RU.md`. - `docs/PUBLIC_ISSUES_PLAN_RU.md`.
- `docs/public-issues/`.
- `docs/PUBLIC_ISSUES_CREATION_RUNBOOK_RU.md`.
@@ -0,0 +1,73 @@
# Public issue template 001
## Title
[registry] Perform Gitea backup restore test
## Labels
`registry`, `ops`, `evidence`
## Purpose
Prove that the documented Gitea backup can be restored on a separate host and
that restore evidence is reproducible.
## Background
The Russian Gitea contour and backup process are documented, but restore proof
is not complete. The registry evidence manifest must keep restore status pending
until a separate-host restore drill is recorded.
## Scope
- Run a restore drill on a separate test host or isolated environment.
- Verify backup checksum before restore.
- Verify repository availability after restore.
- Record commands, logs, timestamps and rollback notes in non-sensitive form.
## Non-goals
- No production restore.
- No change to runtime services, API, UI or business logic.
- No claim that registry submission is complete.
## Acceptance criteria
- Restore log is attached or linked.
- SHA256 verification is recorded.
- Post-restore repository checks are recorded.
- Rollback or cleanup notes are recorded.
- Registry evidence manifest is updated only after evidence exists.
## Evidence required
- Backup artifact name without secrets.
- Checksum verification output.
- Restore command log with sensitive values redacted.
- Post-restore repository clone or integrity check.
- Reviewer note confirming evidence location.
## Safety/privacy guardrails
- Do not publish passwords, tokens, private keys or recovery codes.
- Do not publish customer identifiers, employee data or private infrastructure
details.
- Redact internal paths when they expose sensitive topology.
## Registry-positioning guardrails
- Keep `restore_tested=false` until evidence is recorded.
- Do not describe the restore contour as registry-ready until the drill is
complete and reviewed.
- GitHub issue visibility is public roadmap visibility, not registry release
evidence.
## Checklist
- [ ] Select isolated restore target.
- [ ] Verify backup checksum.
- [ ] Perform restore.
- [ ] Run post-restore repository checks.
- [ ] Record evidence location.
- [ ] Update manifest only after evidence exists.
@@ -0,0 +1,68 @@
# Public issue template 002
## Title
[registry] Prepare temporary Russian build-runner awatch-build-01
## Labels
`registry`, `build-runner`, `ops`
## Purpose
Prepare the Russian build-runner contour required for registry release
evidence.
## Background
GitHub Actions is public mirror validation only. Registry release evidence must
be produced in the Russian contour connected to the Russian Gitea source.
## Scope
- Define provisioning notes for `awatch-build-01`.
- Document toolchain, OS baseline, access model and Gitea clone method.
- Document required checks for release evidence builds.
- Keep runner status pending until provisioning evidence exists.
## Non-goals
- No production deployment.
- No automatic release.
- No claim that the build-runner is already ready.
## Acceptance criteria
- Build-runner setup notes exist.
- Toolchain list is documented.
- Gitea access method is documented without secrets.
- Required checks list is documented.
- Known blockers are recorded.
## Evidence required
- Host provisioning notes without sensitive addresses.
- Toolchain versions.
- Gitea access verification with credentials redacted.
- Planned release evidence command list.
## Safety/privacy guardrails
- Do not publish credentials, VPN data, SSH keys or private network topology.
- Do not include live internal IPs or host access details in the public issue.
- Use sanitized host labels where possible.
## Registry-positioning guardrails
- Do not mark `awatch-build-01` as ready before evidence exists.
- Do not use GitHub Actions output as registry release evidence.
- Primary registry contour remains Russian Gitea plus Russian build-runner.
## Checklist
- [ ] Confirm target OS and hosting contour.
- [ ] Install required toolchain.
- [ ] Verify Russian Gitea clone path.
- [ ] Document required checks.
- [ ] Record blockers.
- [ ] Update registry evidence docs only after verification.
@@ -0,0 +1,70 @@
# Public issue template 003
## Title
[release] Produce first release evidence package
## Labels
`release`, `registry`, `evidence`
## Purpose
Produce the first release evidence package from the Russian build-runner once
the runner is available.
## Background
Release evidence scripts exist, but the first real release evidence build must
run in the Russian build contour before it can be treated as registry evidence.
## Scope
- Run release evidence scripts on the Russian build-runner.
- Collect logs, checksums, artifact manifest and command versions.
- Store evidence in the documented Russian storage contour.
- Link evidence from registry documentation after review.
## Non-goals
- No claim that release evidence is already produced.
- No publication of secret build logs.
- No runtime, API or UI changes.
## Acceptance criteria
- Release evidence manifest exists.
- Build logs are retained with secrets redacted.
- Checksums are recorded.
- Artifact storage path is documented.
- Review note confirms evidence completeness.
## Evidence required
- Release manifest.
- Build logs.
- SHA256 checksums.
- Cargo metadata/tree or equivalent dependency evidence.
- Artifact retention note.
## Safety/privacy guardrails
- Do not publish credentials, private paths with sensitive data or customer
environment identifiers.
- Redact tokens and private repository access details.
- Keep evidence links scoped to approved public-safe material.
## Registry-positioning guardrails
- Do not treat GitHub Actions as release evidence.
- Do not claim registry submission is complete.
- Keep evidence pending until artifacts and checksums exist.
## Checklist
- [ ] Confirm build-runner readiness.
- [ ] Run release evidence script.
- [ ] Verify generated checksums.
- [ ] Store artifacts in Russian contour.
- [ ] Review logs for sensitive data.
- [ ] Record evidence links.
@@ -0,0 +1,67 @@
# Public issue template 004
## Title
[legal] Prepare rightsholder evidence package
## Labels
`legal`, `registry`, `docs`
## Purpose
Prepare the rightsholder and legal evidence checklist needed before any future
Russian software registry submission.
## Background
Technical readiness documentation does not replace legal confirmation. The
rightsholder package remains pending until reviewed by the responsible party.
## Scope
- Prepare a rightsholder evidence checklist.
- Identify ownership and license evidence to collect.
- Document legal review TODOs.
- Keep public wording conservative.
## Non-goals
- No legal conclusion by engineering.
- No claim that registry submission is complete.
- No publication of confidential contracts or personal data.
## Acceptance criteria
- Checklist of required legal evidence exists.
- Ownership evidence categories are documented.
- Open legal questions are recorded.
- Public docs avoid certification and registry-completion claims.
## Evidence required
- Legal checklist document.
- Rightsholder evidence inventory in non-sensitive form.
- Dependency/license summary reference.
- Legal review status note.
## Safety/privacy guardrails
- Do not publish passport data, signatures, contracts or confidential legal
documents.
- Do not expose personal data of representatives.
- Use references to private evidence storage when needed.
## Registry-positioning guardrails
- Do not claim legal readiness until formal review is complete.
- Do not claim completed Russian software registry submission.
- GitHub issues are public tracking, not legal evidence.
## Checklist
- [ ] Draft rightsholder evidence checklist.
- [ ] Map ownership evidence categories.
- [ ] Reference dependency/license documents.
- [ ] Record open legal questions.
- [ ] Review public wording for forbidden claims.
@@ -0,0 +1,67 @@
# Public issue template 005
## Title
[qa] Define coverage threshold policy
## Labels
`qa`, `coverage`, `policy`
## Purpose
Define a conservative coverage threshold policy after the baseline is stable and
reviewed.
## Background
Coverage workflow exists for visibility, but threshold enforcement is not
enabled yet. Premature thresholds can create noisy failures before the baseline
is understood.
## Scope
- Review current coverage baseline.
- Identify crates or modules where thresholds are meaningful.
- Propose a staged threshold policy.
- Document exceptions and review cadence.
## Non-goals
- No immediate hard threshold without baseline review.
- No claim that coverage proves absence of defects.
- No runtime, API or UI changes.
## Acceptance criteria
- Baseline coverage summary is reviewed.
- Initial threshold proposal is documented.
- Exceptions are documented.
- Enforcement plan is staged and reversible.
## Evidence required
- Coverage workflow artifact reference.
- Baseline review notes.
- Proposed threshold values.
- Rationale for exclusions or delayed enforcement.
## Safety/privacy guardrails
- Do not publish private test data or production logs.
- Keep coverage artifacts free of secrets and customer identifiers.
- Avoid copying sensitive paths into public issue text.
## Registry-positioning guardrails
- Coverage visibility is quality evidence, not registry release evidence.
- Threshold policy must not imply certification.
- GitHub remains public mirror validation only.
## Checklist
- [ ] Review coverage baseline.
- [ ] Identify meaningful threshold scope.
- [ ] Document proposed values.
- [ ] Document exclusions.
- [ ] Decide when enforcement can start.
@@ -0,0 +1,65 @@
# Public issue template 006
## Title
[security] Prepare external security/code review checklist
## Labels
`security`, `review`, `governance`
## Purpose
Prepare a public checklist for future visible external security/code review.
## Background
Review checklist and CODEOWNERS exist, but active external peer review is not
claimed until public reviewed pull requests or equivalent evidence exist.
## Scope
- Extend review evidence expectations from `docs/REVIEW_CHECKLIST_RU.md`.
- Define security review scope and artifacts.
- Define how reviewed PRs will be referenced.
- Define forbidden data for public review comments.
## Non-goals
- No claim that external review is already active.
- No publication of sensitive findings before triage.
- Forbidden claim: automatic remediation is not claimed.
## Acceptance criteria
- External/security review checklist is documented.
- Evidence format for reviewed PRs is defined.
- Sensitive disclosure handling is documented.
- First review remains pending until public evidence exists.
## Evidence required
- Checklist document.
- Link to review policy.
- Future reviewed PR URL or placeholder status.
- Security disclosure guardrails.
## Safety/privacy guardrails
- Do not publish exploit details before coordinated handling.
- Do not publish customer data, employee data or secrets.
- Keep vulnerability handling aligned with `SECURITY.md`.
## Registry-positioning guardrails
- Do not claim active external peer review until public reviewed PRs exist.
- Security review evidence is governance evidence, not certification.
- Do not claim FSTEC/FSB certification.
## Checklist
- [ ] Draft external review checklist.
- [ ] Define evidence requirements.
- [ ] Define sensitive disclosure rules.
- [ ] Link to `docs/REVIEW_CHECKLIST_RU.md`.
- [ ] Record first reviewed PR only after it exists.
@@ -0,0 +1,66 @@
# Public issue template 007
## Title
[compat] Test Russian OS compatibility matrix
## Labels
`compat`, `qa`, `registry`
## Purpose
Build an evidence-backed compatibility matrix for target Russian operating
systems.
## Background
Compatibility must be tested and documented. Unsupported compatibility claims
must not be made before evidence exists.
## Scope
- Define target OS versions.
- Run installation and smoke checks where applicable.
- Record pass/fail/blocked status.
- Document gaps and next actions.
## Non-goals
- No claim of support for untested OS versions.
- No certification claims.
- No runtime change in this issue.
## Acceptance criteria
- Compatibility matrix exists.
- Each target OS has status and evidence reference.
- Failed or blocked cases include next action.
- Public wording avoids unsupported claims.
## Evidence required
- OS/version list.
- Test command summary.
- Smoke check results.
- Known gaps and blockers.
## Safety/privacy guardrails
- Do not publish customer infrastructure identifiers.
- Do not publish private hostnames, credentials or internal IPs.
- Use sanitized environment descriptions.
## Registry-positioning guardrails
- Compatibility matrix is evidence support, not registry completion.
- Do not claim FSTEC/FSB certification.
- Do not claim support until test evidence exists.
## Checklist
- [ ] Define OS list.
- [ ] Run installation checks.
- [ ] Run smoke checks.
- [ ] Record evidence.
- [ ] Update compatibility matrix.
@@ -0,0 +1,67 @@
# Public issue template 008
## Title
[ops] Validate release artifacts storage in RF
## Labels
`ops`, `release`, `registry`
## Purpose
Validate the storage location, retention and integrity process for release
artifacts in the Russian contour.
## Background
Release evidence requires reproducible artifacts and checksums stored in the
approved contour. Storage remains pending until verified.
## Scope
- Identify storage path or service in the Russian contour.
- Document retention and access model.
- Verify checksum procedure.
- Document backup or immutability expectations.
## Non-goals
- No publication of private artifact URLs if access is restricted.
- No release creation.
- No runtime/API/UI change.
## Acceptance criteria
- Storage location is documented in non-sensitive form.
- Retention policy is documented.
- Access model is documented.
- Checksum verification procedure is documented.
## Evidence required
- Storage policy note.
- Checksum verification example.
- Retention setting or procedure.
- Access model review note.
## Safety/privacy guardrails
- Do not publish credentials or private storage tokens.
- Do not expose private URLs that grant access.
- Redact internal storage topology where needed.
## Registry-positioning guardrails
- Storage validation is a prerequisite for release evidence, not proof of
registry submission.
- Do not claim release package completion until artifacts exist.
- Primary evidence remains in the Russian contour.
## Checklist
- [ ] Identify storage contour.
- [ ] Document retention.
- [ ] Document access model.
- [ ] Verify checksum procedure.
- [ ] Record blockers.
@@ -0,0 +1,67 @@
# Public issue template 009
## Title
[docs] Refresh public demo pack and screenshots
## Labels
`docs`, `demo`, `public`
## Purpose
Refresh public demo materials and screenshots while keeping them free of
sensitive data.
## Background
Public demo evidence improves transparency, but demo assets must not expose
customer infrastructure, employee data or secrets.
## Scope
- Review demo pack and screenshots.
- Replace stale screenshots where needed.
- Confirm demo data is synthetic or anonymized.
- Update public demo references.
## Non-goals
- No use of real employee activity logs.
- No customer infrastructure disclosure.
- No product behavior change.
## Acceptance criteria
- Demo assets are current.
- Sensitive data review is recorded.
- Screenshots use synthetic/anonymized data.
- README/docs links remain valid.
## Evidence required
- Updated demo asset list.
- Screenshot review note.
- Secret/PII scan result.
- Link validation notes where applicable.
## Safety/privacy guardrails
- Do not publish secrets, tokens, internal hostnames, private IPs, employee
names or customer identifiers.
- Use synthetic data for examples.
- Remove metadata from images when needed.
## Registry-positioning guardrails
- Demo pack is public visibility, not registry release evidence.
- Do not claim customer adoption from demo assets.
- Do not imply certification.
## Checklist
- [ ] Inventory demo assets.
- [ ] Refresh stale screenshots.
- [ ] Check for secrets and PII.
- [ ] Update references.
- [ ] Record review result.
@@ -0,0 +1,66 @@
# Public issue template 010
## Title
[pilot] Prepare Pilot Acceptance Checklist v2
## Labels
`pilot`, `qa`, `docs`
## Purpose
Update pilot acceptance criteria after the residual risk register and public
issue plan.
## Background
Pilot acceptance must distinguish technical readiness, operational evidence,
governance visibility and pending registry release evidence.
## Scope
- Update pilot acceptance checklist.
- Reference residual risks and smoke checks.
- Define evidence required for pilot closeout.
- Keep registry completion claims out of pilot wording.
## Non-goals
- No change to runtime behavior.
- No claim that registry submission is complete.
- No automatic acceptance without evidence.
## Acceptance criteria
- Pilot checklist v2 exists.
- Residual risks are referenced.
- Smoke and evidence checks are listed.
- Pending registry items remain marked pending.
## Evidence required
- Updated checklist.
- Links to residual risks and validation runbooks.
- Pilot smoke command results when available.
- Open gap list.
## Safety/privacy guardrails
- Do not publish real customer data, employee logs or confidential pilot notes.
- Use sanitized evidence references.
- Keep private pilot evidence outside public issue text.
## Registry-positioning guardrails
- Pilot acceptance is not registry registration.
- Registry release evidence still requires the Russian build-runner.
- Do not claim certification or SIEM/DLP replacement.
## Checklist
- [ ] Review current pilot checklist.
- [ ] Add residual risk references.
- [ ] Add smoke/evidence requirements.
- [ ] Mark pending registry items.
- [ ] Review forbidden claims.
@@ -0,0 +1,66 @@
# Public issue template 011
## Title
[governance] Enable PR-based review workflow
## Labels
`governance`, `review`, `process`
## Purpose
Move visible changes through pull requests where practical and record review
evidence.
## Background
PR template, CODEOWNERS and review checklist exist. Active visible external
review is still pending until reviewed public PRs exist.
## Scope
- Define PR-based workflow for public changes.
- Run a documented dry-run PR or first reviewed PR.
- Record required status checks.
- Record review evidence expectations.
## Non-goals
- No claim that external review is already active.
- No bypass of emergency maintainer control for security incidents.
- No runtime behavior change.
## Acceptance criteria
- PR workflow is documented.
- First reviewed PR or dry-run PR is recorded.
- Required evidence and checks are listed.
- Open blockers are documented.
## Evidence required
- Reviewed PR URL or dry-run PR URL after creation.
- Checklist completion note.
- CI/security/coverage status notes.
- Review comment or approval evidence when available.
## Safety/privacy guardrails
- Do not publish secrets or private customer context in PRs or issues.
- Do not expose security-sensitive details before triage.
- Keep emergency fixes possible under documented policy.
## Registry-positioning guardrails
- PR review workflow is governance evidence, not registry release evidence.
- Do not claim external peer review is active until public reviewed PRs exist.
- GitHub remains public mirror validation only.
## Checklist
- [ ] Define PR workflow.
- [ ] Create dry-run or first reviewed PR.
- [ ] Record checks.
- [ ] Record review evidence.
- [ ] Update status docs after evidence exists.
@@ -0,0 +1,67 @@
# Public issue template 012
## Title
[governance] Add branch protection policy
## Labels
`governance`, `github`, `policy`
## Purpose
Verify and, after maintainer review, configure GitHub branch protection aligned
with the advisory policy.
## Background
Branch protection policy is documented as advisory. It must not be claimed as
enabled until repository settings are verified and evidence is recorded.
## Scope
- Review advisory branch protection policy.
- Verify current repository settings.
- Configure settings if approved.
- Record screenshots or textual evidence after verification.
## Non-goals
- No claim that branch protection is enabled before verification.
- No destructive repository setting changes without maintainer review.
- No runtime/API/UI change.
## Acceptance criteria
- Current branch protection state is documented.
- Approved settings are recorded.
- Evidence is attached or linked after verification.
- If blocked, blockers are recorded.
## Evidence required
- Repository settings notes or screenshots.
- Required status checks list.
- Maintainer approval note.
- Blocker list if settings cannot be changed.
## Safety/privacy guardrails
- Do not publish admin tokens or private repository settings that expose
sensitive access details.
- Redact account-level private information in screenshots.
- Keep emergency access policy documented.
## Registry-positioning guardrails
- Do not claim branch protection is enabled until settings are verified.
- Branch protection is governance control, not registry release evidence.
- GitHub remains public mirror validation only.
## Checklist
- [ ] Review advisory policy.
- [ ] Verify current settings.
- [ ] Configure approved settings if authorized.
- [ ] Record evidence.
- [ ] Update status docs only after verification.
@@ -0,0 +1,104 @@
{
"status": "planned_issue_templates_ready",
"github_issue_tracker": "manual_or_gh_cli_creation_required",
"github_role": "public_mirror_validation_only",
"registry_release_evidence": "requires_russian_build_runner",
"issues": [
{
"id": "001",
"title": "[registry] Perform Gitea backup restore test",
"labels": ["registry", "ops", "evidence"],
"source": "docs/public-issues/001-registry-gitea-restore-test.md",
"status": "ready_to_create",
"github_issue_url": null
},
{
"id": "002",
"title": "[registry] Prepare temporary Russian build-runner awatch-build-01",
"labels": ["registry", "build-runner", "ops"],
"source": "docs/public-issues/002-registry-russian-build-runner.md",
"status": "ready_to_create",
"github_issue_url": null
},
{
"id": "003",
"title": "[release] Produce first release evidence package",
"labels": ["release", "registry", "evidence"],
"source": "docs/public-issues/003-release-evidence-package.md",
"status": "ready_to_create",
"github_issue_url": null
},
{
"id": "004",
"title": "[legal] Prepare rightsholder evidence package",
"labels": ["legal", "registry", "docs"],
"source": "docs/public-issues/004-legal-rightsholder-package.md",
"status": "ready_to_create",
"github_issue_url": null
},
{
"id": "005",
"title": "[qa] Define coverage threshold policy",
"labels": ["qa", "coverage", "policy"],
"source": "docs/public-issues/005-coverage-threshold-policy.md",
"status": "ready_to_create",
"github_issue_url": null
},
{
"id": "006",
"title": "[security] Prepare external security/code review checklist",
"labels": ["security", "review", "governance"],
"source": "docs/public-issues/006-external-security-code-review-checklist.md",
"status": "ready_to_create",
"github_issue_url": null
},
{
"id": "007",
"title": "[compat] Test Russian OS compatibility matrix",
"labels": ["compat", "qa", "registry"],
"source": "docs/public-issues/007-russian-os-compatibility-matrix.md",
"status": "ready_to_create",
"github_issue_url": null
},
{
"id": "008",
"title": "[ops] Validate release artifacts storage in RF",
"labels": ["ops", "release", "registry"],
"source": "docs/public-issues/008-release-artifacts-storage-rf.md",
"status": "ready_to_create",
"github_issue_url": null
},
{
"id": "009",
"title": "[docs] Refresh public demo pack and screenshots",
"labels": ["docs", "demo", "public"],
"source": "docs/public-issues/009-public-demo-pack-refresh.md",
"status": "ready_to_create",
"github_issue_url": null
},
{
"id": "010",
"title": "[pilot] Prepare Pilot Acceptance Checklist v2",
"labels": ["pilot", "qa", "docs"],
"source": "docs/public-issues/010-pilot-acceptance-checklist-v2.md",
"status": "ready_to_create",
"github_issue_url": null
},
{
"id": "011",
"title": "[governance] Enable PR-based review workflow",
"labels": ["governance", "review", "process"],
"source": "docs/public-issues/011-governance-pr-based-review-workflow.md",
"status": "ready_to_create",
"github_issue_url": null
},
{
"id": "012",
"title": "[governance] Add branch protection policy",
"labels": ["governance", "github", "policy"],
"source": "docs/public-issues/012-governance-branch-protection-policy.md",
"status": "ready_to_create",
"github_issue_url": null
}
]
}
@@ -1,5 +1,42 @@
# Registry readiness changelog # Registry readiness changelog
## 2026-06-23 public issue creation package
Added:
- `docs/public-issues/` with public issue templates for the planned governance,
registry, QA, security, compatibility, ops, demo and pilot tasks.
- `docs/public-issues/public-issues-manifest.json` with `ready_to_create`
status and `github_issue_url: null` until real issue URLs are recorded.
- `docs/PUBLIC_ISSUES_CREATION_RUNBOOK_RU.md` for manual and opt-in `gh` CLI
issue creation.
- `scripts/prepare_public_issues.sh` as a dry-run validation and command
preparation script.
- `scripts/create_public_issues_from_manifest.sh` as an opt-in helper that
requires `CONFIRM_CREATE_GITHUB_ISSUES=YES`.
Changed:
- `docs/PUBLIC_ISSUES_PLAN_RU.md`, project status, residual risks and README now
distinguish prepared issue templates from real created GitHub issues.
- Registry readiness checks now verify the public issue package and pending URL
status.
Runtime impact:
- No runtime/product code changes.
- No API changes.
- No UI changes.
- No business logic changes.
Guardrails:
- GitHub remains public mirror validation only.
- Russian Gitea plus planned Russian build-runner remains the primary registry
contour.
- Real GitHub issue creation remains manual/opt-in.
- GitHub issue URLs remain pending until created and recorded in the manifest.
## 2026-06-22 review governance and branch protection policy ## 2026-06-22 review governance and branch protection policy
Added: Added:
+72
View File
@@ -0,0 +1,72 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
MANIFEST="$ROOT/docs/public-issues/public-issues-manifest.json"
if [[ "${CONFIRM_CREATE_GITHUB_ISSUES:-}" != "YES" ]]; then
printf 'create_public_issues=refused\n' >&2
printf 'Set CONFIRM_CREATE_GITHUB_ISSUES=YES to create GitHub issues.\n' >&2
printf 'Run scripts/prepare_public_issues.sh first and review the issue bodies.\n' >&2
exit 2
fi
if ! command -v gh >/dev/null 2>&1; then
printf 'create_public_issues=fail\n' >&2
printf 'gh CLI is not installed or not in PATH.\n' >&2
exit 2
fi
if ! command -v jq >/dev/null 2>&1; then
printf 'create_public_issues=fail\n' >&2
printf 'jq is required for manifest-driven issue creation.\n' >&2
exit 2
fi
if [[ ! -s "$MANIFEST" ]]; then
printf 'create_public_issues=fail\n' >&2
printf 'Missing manifest: docs/public-issues/public-issues-manifest.json\n' >&2
exit 2
fi
jq -e . "$MANIFEST" >/dev/null
jq -e '
.status == "planned_issue_templates_ready"
and .github_issue_tracker == "manual_or_gh_cli_creation_required"
and .github_role == "public_mirror_validation_only"
and .registry_release_evidence == "requires_russian_build_runner"
and all(.issues[]; .status == "ready_to_create")
' "$MANIFEST" >/dev/null
gh auth status >/dev/null
existing_labels="$(mktemp)"
trap 'rm -f "$existing_labels"' EXIT
gh label list --limit 500 --json name --jq '.[].name' >"$existing_labels"
while IFS= read -r label; do
if ! grep -Fxq "$label" "$existing_labels"; then
gh label create "$label" --color "ededed" --description "AWatch-rus public governance label"
printf '%s\n' "$label" >>"$existing_labels"
fi
done < <(jq -r '.issues[].labels[]' "$MANIFEST" | sort -u)
created=0
while IFS=$'\t' read -r title labels source; do
body="$ROOT/$source"
if [[ ! -s "$body" ]]; then
printf 'create_public_issues=fail\n' >&2
printf 'Missing issue body: %s\n' "$source" >&2
exit 2
fi
url="$(gh issue create --title "$title" --label "$labels" --body-file "$body")"
printf 'created_issue=%s\n' "$url"
created=$((created + 1))
done < <(
jq -r '.issues[] | [.title, (.labels | join(",")), .source] | @tsv' "$MANIFEST"
)
printf 'create_public_issues=ok\n'
printf 'created=%d\n' "$created"
printf 'Update docs/public-issues/public-issues-manifest.json with the printed issue URLs.\n'
+120
View File
@@ -0,0 +1,120 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
ISSUES_DIR="$ROOT/docs/public-issues"
MANIFEST="$ISSUES_DIR/public-issues-manifest.json"
expected_files=(
"001-registry-gitea-restore-test.md"
"002-registry-russian-build-runner.md"
"003-release-evidence-package.md"
"004-legal-rightsholder-package.md"
"005-coverage-threshold-policy.md"
"006-external-security-code-review-checklist.md"
"007-russian-os-compatibility-matrix.md"
"008-release-artifacts-storage-rf.md"
"009-public-demo-pack-refresh.md"
"010-pilot-acceptance-checklist-v2.md"
"011-governance-pr-based-review-workflow.md"
"012-governance-branch-protection-policy.md"
)
required_sections=(
"Title"
"Labels"
"Purpose"
"Scope"
"Non-goals"
"Acceptance criteria"
"Evidence required"
"Safety/privacy guardrails"
"Registry-positioning guardrails"
)
failures=()
fail() {
failures+=("$1")
}
section_value() {
local section="$1"
local file="$2"
awk -v section="$section" '
$0 == "## " section { found = 1; next }
found && /^## / { exit }
found && NF { print; exit }
' "$file"
}
labels_for_gh() {
printf '%s' "$1" \
| tr -d '`' \
| tr ',' '\n' \
| sed -E 's/^[[:space:]]+|[[:space:]]+$//g' \
| awk 'NF { printf "%s%s", sep, $0; sep="," }'
}
if [[ ! -d "$ISSUES_DIR" ]]; then
fail "missing_directory:docs/public-issues"
fi
if [[ ! -s "$MANIFEST" ]]; then
fail "missing_or_empty:docs/public-issues/public-issues-manifest.json"
fi
for name in "${expected_files[@]}"; do
file="$ISSUES_DIR/$name"
if [[ ! -s "$file" ]]; then
fail "missing_or_empty:docs/public-issues/$name"
continue
fi
for section in "${required_sections[@]}"; do
if ! grep -Eq "^## ${section}$" "$file"; then
fail "missing_section:docs/public-issues/$name:$section"
fi
done
done
if [[ -s "$MANIFEST" ]] && command -v jq >/dev/null 2>&1; then
jq -e . "$MANIFEST" >/dev/null || fail "invalid_json:docs/public-issues/public-issues-manifest.json"
jq -e '
.status == "planned_issue_templates_ready"
and .github_issue_tracker == "manual_or_gh_cli_creation_required"
and .github_role == "public_mirror_validation_only"
and .registry_release_evidence == "requires_russian_build_runner"
and (.issues | length == 12)
and all(.issues[]; .status == "ready_to_create" and .github_issue_url == null)
' "$MANIFEST" >/dev/null || fail "manifest_required_fields"
while IFS= read -r source; do
[[ -s "$ROOT/$source" ]] || fail "manifest_source_missing:$source"
done < <(jq -r '.issues[].source' "$MANIFEST")
elif [[ -s "$MANIFEST" ]]; then
printf 'warning: jq not found; JSON syntax validation skipped\n' >&2
fi
if ((${#failures[@]} > 0)); then
printf 'public_issues_prepare=fail\n'
for failure in "${failures[@]}"; do
printf '%s\n' "$failure"
done
exit 2
fi
printf 'public_issues_prepare=ok\n'
printf 'status=ready_to_create\n'
printf 'issue_templates=%d\n' "${#expected_files[@]}"
printf '\n'
printf 'Manual gh CLI commands, after maintainer review and gh auth:\n'
for name in "${expected_files[@]}"; do
file="$ISSUES_DIR/$name"
title="$(section_value "Title" "$file")"
labels="$(labels_for_gh "$(section_value "Labels" "$file")")"
rel="docs/public-issues/$name"
printf 'gh issue create --title %q --label %q --body-file %q\n' "$title" "$labels" "$rel"
done
printf '\n'
printf 'After creating issues, update docs/public-issues/public-issues-manifest.json with github_issue_url values.\n'
+97 -1
View File
@@ -4,6 +4,8 @@ set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
REGISTRY_DIR="$ROOT/docs/registry" REGISTRY_DIR="$ROOT/docs/registry"
MANIFEST="$REGISTRY_DIR/registry-evidence-manifest.json" MANIFEST="$REGISTRY_DIR/registry-evidence-manifest.json"
PUBLIC_ISSUES_DIR="$ROOT/docs/public-issues"
PUBLIC_ISSUES_MANIFEST="$PUBLIC_ISSUES_DIR/public-issues-manifest.json"
failures=() failures=()
@@ -31,6 +33,10 @@ if [[ ! -d "$REGISTRY_DIR" ]]; then
fail "missing_directory:docs/registry" fail "missing_directory:docs/registry"
fi fi
if [[ ! -d "$PUBLIC_ISSUES_DIR" ]]; then
fail "missing_directory:docs/public-issues"
fi
required_files=( required_files=(
"docs/registry/REGISTER_RU_SOFTWARE_READINESS_RU.md" "docs/registry/REGISTER_RU_SOFTWARE_READINESS_RU.md"
"docs/registry/SOURCE_CODE_AND_BUILD_INFRASTRUCTURE_RU.md" "docs/registry/SOURCE_CODE_AND_BUILD_INFRASTRUCTURE_RU.md"
@@ -52,10 +58,26 @@ required_files=(
"docs/REVIEW_CHECKLIST_RU.md" "docs/REVIEW_CHECKLIST_RU.md"
"docs/RESIDUAL_RISKS_RU.md" "docs/RESIDUAL_RISKS_RU.md"
"docs/PUBLIC_ISSUES_PLAN_RU.md" "docs/PUBLIC_ISSUES_PLAN_RU.md"
"docs/PUBLIC_ISSUES_CREATION_RUNBOOK_RU.md"
"docs/public-issues/public-issues-manifest.json"
"docs/public-issues/001-registry-gitea-restore-test.md"
"docs/public-issues/002-registry-russian-build-runner.md"
"docs/public-issues/003-release-evidence-package.md"
"docs/public-issues/004-legal-rightsholder-package.md"
"docs/public-issues/005-coverage-threshold-policy.md"
"docs/public-issues/006-external-security-code-review-checklist.md"
"docs/public-issues/007-russian-os-compatibility-matrix.md"
"docs/public-issues/008-release-artifacts-storage-rf.md"
"docs/public-issues/009-public-demo-pack-refresh.md"
"docs/public-issues/010-pilot-acceptance-checklist-v2.md"
"docs/public-issues/011-governance-pr-based-review-workflow.md"
"docs/public-issues/012-governance-branch-protection-policy.md"
"docs/BRANCH_PROTECTION_POLICY_RU.md" "docs/BRANCH_PROTECTION_POLICY_RU.md"
"scripts/build_release_evidence.sh" "scripts/build_release_evidence.sh"
"scripts/check_release_evidence.sh" "scripts/check_release_evidence.sh"
"scripts/public_secret_pattern_check.py" "scripts/public_secret_pattern_check.py"
"scripts/prepare_public_issues.sh"
"scripts/create_public_issues_from_manifest.sh"
".github/CODEOWNERS" ".github/CODEOWNERS"
".github/workflows/ci.yml" ".github/workflows/ci.yml"
".github/workflows/security.yml" ".github/workflows/security.yml"
@@ -191,6 +213,55 @@ PY
fi fi
fi fi
if [[ -s "$PUBLIC_ISSUES_MANIFEST" ]]; then
if command -v jq >/dev/null 2>&1; then
jq -e . "$PUBLIC_ISSUES_MANIFEST" >/dev/null || fail "invalid_json:docs/public-issues/public-issues-manifest.json"
jq -e '
.status == "planned_issue_templates_ready"
and .github_issue_tracker == "manual_or_gh_cli_creation_required"
and .github_role == "public_mirror_validation_only"
and .registry_release_evidence == "requires_russian_build_runner"
and (.issues | length == 12)
and all(.issues[];
.status == "ready_to_create"
and .github_issue_url == null
and (.source | startswith("docs/public-issues/"))
)
' "$PUBLIC_ISSUES_MANIFEST" >/dev/null || fail "public_issues_manifest_required_fields"
elif command -v python3 >/dev/null 2>&1; then
python3 - "$PUBLIC_ISSUES_MANIFEST" <<'PY' || fail "public_issues_manifest_required_fields"
import json
import sys
with open(sys.argv[1], "r", encoding="utf-8") as fh:
data = json.load(fh)
expected = {
"status": "planned_issue_templates_ready",
"github_issue_tracker": "manual_or_gh_cli_creation_required",
"github_role": "public_mirror_validation_only",
"registry_release_evidence": "requires_russian_build_runner",
}
for key, value in expected.items():
if data.get(key) != value:
raise SystemExit(f"{key} mismatch")
issues = data.get("issues")
if not isinstance(issues, list) or len(issues) != 12:
raise SystemExit("issues length mismatch")
for issue in issues:
if issue.get("status") != "ready_to_create":
raise SystemExit("issue status mismatch")
if issue.get("github_issue_url") is not None:
raise SystemExit("github_issue_url must remain null until created")
if not str(issue.get("source", "")).startswith("docs/public-issues/"):
raise SystemExit("issue source mismatch")
PY
else
fail "json_validator_missing:jq_or_python3_required"
fi
fi
require_grep "git\\.iri1968\\.dpdns\\.org" "docs/registry/SOURCE_CODE_AND_BUILD_INFRASTRUCTURE_RU.md" "gitea_domain_source_infra" require_grep "git\\.iri1968\\.dpdns\\.org" "docs/registry/SOURCE_CODE_AND_BUILD_INFRASTRUCTURE_RU.md" "gitea_domain_source_infra"
require_grep "git\\.iri1968\\.dpdns\\.org" "docs/registry/GIT_RU_MIRRORING_RUNBOOK_RU.md" "gitea_domain_git_runbook" require_grep "git\\.iri1968\\.dpdns\\.org" "docs/registry/GIT_RU_MIRRORING_RUNBOOK_RU.md" "gitea_domain_git_runbook"
require_grep "git\\.iri1968\\.dpdns\\.org" "docs/registry/WIKI_AND_DOCUMENTATION_POLICY_RU.md" "gitea_domain_wiki_policy" require_grep "git\\.iri1968\\.dpdns\\.org" "docs/registry/WIKI_AND_DOCUMENTATION_POLICY_RU.md" "gitea_domain_wiki_policy"
@@ -216,6 +287,9 @@ require_grep "Russian build-runner.*required|requires_russian_build_runner" "doc
require_grep "docs/registry" "docs/PROJECT_STATUS_RU.md" "project_status_registry_docs" require_grep "docs/registry" "docs/PROJECT_STATUS_RU.md" "project_status_registry_docs"
require_grep "RESIDUAL_RISKS_RU\\.md" "docs/PROJECT_STATUS_RU.md" "project_status_residual_risks_link" require_grep "RESIDUAL_RISKS_RU\\.md" "docs/PROJECT_STATUS_RU.md" "project_status_residual_risks_link"
require_grep "PUBLIC_ISSUES_PLAN_RU\\.md" "docs/PROJECT_STATUS_RU.md" "project_status_public_issues_plan_link" require_grep "PUBLIC_ISSUES_PLAN_RU\\.md" "docs/PROJECT_STATUS_RU.md" "project_status_public_issues_plan_link"
require_grep "docs/public-issues" "docs/PROJECT_STATUS_RU.md" "project_status_public_issue_templates"
require_grep "PUBLIC_ISSUES_CREATION_RUNBOOK_RU\\.md" "docs/PROJECT_STATUS_RU.md" "project_status_public_issue_runbook"
require_grep "manual/pending.*URLs.*public-issues-manifest|URLs.*public-issues-manifest" "docs/PROJECT_STATUS_RU.md" "project_status_issue_creation_pending_urls"
require_grep "GITEA_BACKUP_AND_RESTORE_RUNBOOK_RU\\.md|Restore outline|Post-restore checks" "docs/registry/GITEA_BACKUP_AND_RESTORE_RUNBOOK_RU.md" "backup_restore_runbook" require_grep "GITEA_BACKUP_AND_RESTORE_RUNBOOK_RU\\.md|Restore outline|Post-restore checks" "docs/registry/GITEA_BACKUP_AND_RESTORE_RUNBOOK_RU.md" "backup_restore_runbook"
require_grep "awatch-gitea-backup\\.timer" "docs/registry/GITEA_BACKUP_AND_RESTORE_RUNBOOK_RU.md" "backup_timer" require_grep "awatch-gitea-backup\\.timer" "docs/registry/GITEA_BACKUP_AND_RESTORE_RUNBOOK_RU.md" "backup_timer"
require_grep "sha256|SHA256" "docs/registry/GITEA_BACKUP_AND_RESTORE_RUNBOOK_RU.md" "backup_sha256" require_grep "sha256|SHA256" "docs/registry/GITEA_BACKUP_AND_RESTORE_RUNBOOK_RU.md" "backup_sha256"
@@ -242,12 +316,18 @@ require_grep "public GitHub Actions validation passed" "docs/registry/REGISTRY_R
require_grep "No business logic changes" "docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md" "changelog_no_business_logic_changes" require_grep "No business logic changes" "docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md" "changelog_no_business_logic_changes"
require_grep "RESIDUAL_RISKS_RU\\.md" "docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md" "changelog_residual_risks" require_grep "RESIDUAL_RISKS_RU\\.md" "docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md" "changelog_residual_risks"
require_grep "PUBLIC_ISSUES_PLAN_RU\\.md" "docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md" "changelog_public_issues_plan" require_grep "PUBLIC_ISSUES_PLAN_RU\\.md" "docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md" "changelog_public_issues_plan"
require_grep "public issue creation package" "docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md" "changelog_public_issue_creation_package"
require_grep "docs/public-issues" "docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md" "changelog_public_issues_dir"
require_grep "runtime/product code changes" "docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md" "changelog_public_issues_no_runtime"
require_grep "GitHub remains public mirror validation only" "docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md" "changelog_public_issues_github_role"
require_grep "Restore test is not claimed as completed" "docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md" "changelog_restore_not_completed" require_grep "Restore test is not claimed as completed" "docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md" "changelog_restore_not_completed"
require_grep "Russian build-runner is not claimed as ready" "docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md" "changelog_build_runner_not_ready" require_grep "Russian build-runner is not claimed as ready" "docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md" "changelog_build_runner_not_ready"
require_grep "First release evidence build is not claimed as completed" "docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md" "changelog_release_evidence_not_completed" require_grep "First release evidence build is not claimed as completed" "docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md" "changelog_release_evidence_not_completed"
require_grep "Legal rightsholder package remains pending" "docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md" "changelog_legal_package_pending" require_grep "Legal rightsholder package remains pending" "docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md" "changelog_legal_package_pending"
require_grep "RESIDUAL_RISKS_RU\\.md" "README.md" "readme_residual_risks_link" require_grep "RESIDUAL_RISKS_RU\\.md" "README.md" "readme_residual_risks_link"
require_grep "PUBLIC_ISSUES_PLAN_RU\\.md" "README.md" "readme_public_issues_plan_link" require_grep "PUBLIC_ISSUES_PLAN_RU\\.md" "README.md" "readme_public_issues_plan_link"
require_grep "PUBLIC_ISSUES_CREATION_RUNBOOK_RU\\.md" "README.md" "readme_public_issues_creation_runbook"
require_grep "public-issues/public-issues-manifest\\.json" "README.md" "readme_public_issues_manifest"
require_grep "Engineering governance and residual risks" "README.md" "readme_engineering_governance_section" require_grep "Engineering governance and residual risks" "README.md" "readme_engineering_governance_section"
require_grep "REVIEW_CHECKLIST_RU\\.md" "README.md" "readme_review_checklist_link" require_grep "REVIEW_CHECKLIST_RU\\.md" "README.md" "readme_review_checklist_link"
require_grep "BRANCH_PROTECTION_POLICY_RU\\.md" "README.md" "readme_branch_protection_policy_link" require_grep "BRANCH_PROTECTION_POLICY_RU\\.md" "README.md" "readme_branch_protection_policy_link"
@@ -303,7 +383,10 @@ require_grep "\\[pilot\\] Prepare Pilot Acceptance Checklist v2" "docs/PUBLIC_IS
require_grep "\\[governance\\] Enable PR-based review workflow" "docs/PUBLIC_ISSUES_PLAN_RU.md" "issue_pr_review_workflow" require_grep "\\[governance\\] Enable PR-based review workflow" "docs/PUBLIC_ISSUES_PLAN_RU.md" "issue_pr_review_workflow"
require_grep "\\[governance\\] Add branch protection policy" "docs/PUBLIC_ISSUES_PLAN_RU.md" "issue_branch_protection_policy" require_grep "\\[governance\\] Add branch protection policy" "docs/PUBLIC_ISSUES_PLAN_RU.md" "issue_branch_protection_policy"
require_grep "Acceptance criteria" "docs/PUBLIC_ISSUES_PLAN_RU.md" "issues_acceptance_criteria" require_grep "Acceptance criteria" "docs/PUBLIC_ISSUES_PLAN_RU.md" "issues_acceptance_criteria"
require_grep "planned" "docs/PUBLIC_ISSUES_PLAN_RU.md" "issues_status_planned" require_grep "ready_to_create" "docs/PUBLIC_ISSUES_PLAN_RU.md" "issues_status_ready_to_create"
require_grep "docs/public-issues" "docs/PUBLIC_ISSUES_PLAN_RU.md" "issues_templates_dir"
require_grep "public-issues-manifest\\.json" "docs/PUBLIC_ISSUES_PLAN_RU.md" "issues_manifest_link"
require_grep "URLs.*pending|pending.*URLs" "docs/PUBLIC_ISSUES_PLAN_RU.md" "issues_urls_pending"
require_grep "Do not mark restore test as completed until restore evidence exists" "docs/PUBLIC_ISSUES_PLAN_RU.md" "issues_restore_guardrail" require_grep "Do not mark restore test as completed until restore evidence exists" "docs/PUBLIC_ISSUES_PLAN_RU.md" "issues_restore_guardrail"
require_grep "Do not mark .*awatch-build-01.* as ready until provisioning evidence exists" "docs/PUBLIC_ISSUES_PLAN_RU.md" "issues_build_runner_guardrail" require_grep "Do not mark .*awatch-build-01.* as ready until provisioning evidence exists" "docs/PUBLIC_ISSUES_PLAN_RU.md" "issues_build_runner_guardrail"
require_grep "public mirror validation only" "SECURITY.md" "security_public_mirror_validation" require_grep "public mirror validation only" "SECURITY.md" "security_public_mirror_validation"
@@ -326,6 +409,9 @@ scan_files=(
"$ROOT/docs/REVIEW_CHECKLIST_RU.md" "$ROOT/docs/REVIEW_CHECKLIST_RU.md"
"$ROOT/docs/RESIDUAL_RISKS_RU.md" "$ROOT/docs/RESIDUAL_RISKS_RU.md"
"$ROOT/docs/PUBLIC_ISSUES_PLAN_RU.md" "$ROOT/docs/PUBLIC_ISSUES_PLAN_RU.md"
"$ROOT/docs/PUBLIC_ISSUES_CREATION_RUNBOOK_RU.md"
"$ROOT/docs/public-issues"/*.md
"$ROOT/docs/public-issues"/*.json
"$ROOT/docs/BRANCH_PROTECTION_POLICY_RU.md" "$ROOT/docs/BRANCH_PROTECTION_POLICY_RU.md"
"$ROOT/SECURITY.md" "$ROOT/SECURITY.md"
"$ROOT/CONTRIBUTING.md" "$ROOT/CONTRIBUTING.md"
@@ -349,6 +435,9 @@ claim_scan_files=(
"$ROOT/docs/REVIEW_CHECKLIST_RU.md" "$ROOT/docs/REVIEW_CHECKLIST_RU.md"
"$ROOT/docs/RESIDUAL_RISKS_RU.md" "$ROOT/docs/RESIDUAL_RISKS_RU.md"
"$ROOT/docs/PUBLIC_ISSUES_PLAN_RU.md" "$ROOT/docs/PUBLIC_ISSUES_PLAN_RU.md"
"$ROOT/docs/PUBLIC_ISSUES_CREATION_RUNBOOK_RU.md"
"$ROOT/docs/public-issues"/*.md
"$ROOT/docs/public-issues"/*.json
"$ROOT/docs/BRANCH_PROTECTION_POLICY_RU.md" "$ROOT/docs/BRANCH_PROTECTION_POLICY_RU.md"
"$ROOT/SECURITY.md" "$ROOT/SECURITY.md"
"$ROOT/CONTRIBUTING.md" "$ROOT/CONTRIBUTING.md"
@@ -397,6 +486,13 @@ if grep -RInEi "(юридически заверш(е|ё)нн?ая регист
fi fi
rm -f /tmp/registry_forbidden_legal_done.$$ rm -f /tmp/registry_forbidden_legal_done.$$
if grep -RInEi "(completed Russian software registry submission|registry submission is complete|Russian software registry submission.{0,80}(completed|done))" "${claim_scan_files[@]}" \
| grep -Eiv "(do not|no claim|not |не |forbidden|pending|until evidence)" \
>/tmp/registry_forbidden_registry_submission_done.$$ 2>/dev/null; then
fail "forbidden_claim_registry_submission_completed:$(cat /tmp/registry_forbidden_registry_submission_done.$$)"
fi
rm -f /tmp/registry_forbidden_registry_submission_done.$$
if grep -RInEi "(branch protection).{0,120}(enabled|включ(е|ё)н|настроен|active)" "$ROOT/README.md" "$ROOT/docs/PROJECT_STATUS_RU.md" "$ROOT/docs/BRANCH_PROTECTION_POLICY_RU.md" "$REGISTRY_DIR"/*.md \ if grep -RInEi "(branch protection).{0,120}(enabled|включ(е|ё)н|настроен|active)" "$ROOT/README.md" "$ROOT/docs/PROJECT_STATUS_RU.md" "$ROOT/docs/BRANCH_PROTECTION_POLICY_RU.md" "$REGISTRY_DIR"/*.md \
| grep -Eiv "(not |не |не утверждает|not claimed|advisory|until repository settings|если применимо|recommended)" \ | grep -Eiv "(not |не |не утверждает|not claimed|advisory|until repository settings|если применимо|recommended)" \
>/tmp/registry_forbidden_branch_protection_enabled.$$ 2>/dev/null; then >/tmp/registry_forbidden_branch_protection_enabled.$$ 2>/dev/null; then