diff --git a/README.md b/README.md index 00951d3..7f17a65 100755 --- a/README.md +++ b/README.md @@ -263,8 +263,9 @@ collectors. [docs/RESIDUAL_RISKS_RU.md](docs/RESIDUAL_RISKS_RU.md). - Public issues plan: [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: +- Public issue templates are prepared and real GitHub issue URLs are recorded + in the manifest; this improves roadmap visibility but does not claim + community adoption: [creation runbook](docs/PUBLIC_ISSUES_CREATION_RUNBOOK_RU.md), [manifest](docs/public-issues/public-issues-manifest.json). diff --git a/docs/PROJECT_STATUS_RU.md b/docs/PROJECT_STATUS_RU.md index dd2b7a3..77f1aab 100644 --- a/docs/PROJECT_STATUS_RU.md +++ b/docs/PROJECT_STATUS_RU.md @@ -1,4 +1,4 @@ -# AWatch-rus: статус проекта на 2026-06-22 +# AWatch-rus: статус проекта на 2026-06-23 Документ фиксирует текущий baseline после настройки российского Gitea-контура, backup, registry-readiness документации, плана российского build-runner и @@ -36,6 +36,11 @@ backup, registry-readiness документации, плана российск `docs/public-issues/`. - Manifest публичных issues: `docs/public-issues/public-issues-manifest.json`. +- Public issue package: ready. +- Public issues: created and linked in manifest. +- Public development visibility: improved through created roadmap/governance + issues. +- Community adoption remains low; no artificial adoption claim is made. - Runbook создания публичных issues: `docs/PUBLIC_ISSUES_CREATION_RUNBOOK_RU.md`. - Review checklist: @@ -80,10 +85,12 @@ backup, registry-readiness документации, плана российск `docs/RESIDUAL_RISKS_RU.md`. - Подготовлен план публичных issues для ручного заведения: `docs/PUBLIC_ISSUES_PLAN_RU.md`. -- Подготовлен пакет issue templates со статусом `ready_to_create`: +- Подготовлен пакет issue templates: `docs/public-issues/`. - Подготовлен runbook ручного/opt-in создания issues: `docs/PUBLIC_ISSUES_CREATION_RUNBOOK_RU.md`. +- Созданы 12 публичных roadmap/governance GitHub issues, ссылки записаны в + `docs/public-issues/public-issues-manifest.json`. ## Planned / pending @@ -94,15 +101,11 @@ backup, registry-readiness документации, плана российск - Юридическое подтверждение правообладателя. - Финальная юридическая проверка пакета документов перед подачей. - Проверка совместимости с российскими ОС. -- Публичные 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. - Branch protection enablement is not claimed until repository settings are verified. +- Community adoption remains low until external contributors, public reviews + and sustained third-party activity appear. ## Честные ограничения diff --git a/docs/PUBLIC_ISSUES_CREATION_RUNBOOK_RU.md b/docs/PUBLIC_ISSUES_CREATION_RUNBOOK_RU.md index a8d71d3..e5805db 100644 --- a/docs/PUBLIC_ISSUES_CREATION_RUNBOOK_RU.md +++ b/docs/PUBLIC_ISSUES_CREATION_RUNBOOK_RU.md @@ -2,9 +2,9 @@ Дата: 2026-06-23 -Статус: issue templates готовы к созданию. Реальные GitHub issues считаются -pending, пока ссылки не записаны в -`docs/public-issues/public-issues-manifest.json`. +Статус: issue templates готовы; 12 публичных GitHub issues созданы, а ссылки +записаны в `docs/public-issues/public-issues-manifest.json`. Этот runbook +остается процедурой для повторного, добавочного или ручного создания issues. GitHub issues используются для public roadmap visibility. Они не являются registry release evidence. Primary registry contour остается Russian Gitea + @@ -97,8 +97,19 @@ CONFIRM_CREATE_GITHUB_ISSUES=YES bash scripts/create_public_issues_from_manifest "github_issue_url": "https://github.com/igor04091968/AWatch-rus/issues/" ``` -Status можно оставлять `ready_to_create` до отдельного решения о переводе в -`created`; минимальное evidence требование - наличие URL. +Для созданного issue manifest должен фиксировать: + +```json +{ + "status": "created", + "github_issue_url": "https://github.com/igor04091968/AWatch-rus/issues/", + "created_at": "YYYY-MM-DDTHH:MM:SSZ", + "created_by": "maintainer" +} +``` + +Если issue не создан, `status` остается `ready_to_create`, а +`github_issue_url` остается `null`. ## Запрещенные данные diff --git a/docs/PUBLIC_ISSUES_PLAN_RU.md b/docs/PUBLIC_ISSUES_PLAN_RU.md index 438087d..c0eb1b6 100644 --- a/docs/PUBLIC_ISSUES_PLAN_RU.md +++ b/docs/PUBLIC_ISSUES_PLAN_RU.md @@ -1,13 +1,12 @@ # AWatch-rus: план публичных GitHub issues -Дата: 2026-06-22 +Дата: 2026-06-23 -Статус: public governance backlog plan; issue templates are -`ready_to_create`. +Статус: public governance backlog plan; issue templates are prepared and 12 +public GitHub issues are recorded in the manifest. -Этот документ перечисляет публичные GitHub issues, которые нужно завести -вручную или через opt-in `gh` script. Он не утверждает, что задачи уже созданы -или выполнены. +Этот документ перечисляет публичные GitHub issues, созданные из подготовленных +templates. Он не утверждает, что сами задачи уже выполнены. Цель: повысить visibility development process после настройки российского Gitea-контура, backup, public CI, coverage, security scanning и status freeze. @@ -21,24 +20,61 @@ Gitea-контура, backup, public CI, coverage, security scanning и status f - dry-run check: `scripts/prepare_public_issues.sh`; - opt-in creation script: `scripts/create_public_issues_from_manifest.sh`. -Реальные GitHub issue URLs остаются pending, пока они не записаны в manifest. +Реальные GitHub issue URLs записаны в manifest. GitHub issues являются public +roadmap/development visibility, а не registry release evidence. GitHub остается +public mirror validation only; primary registry contour остается Russian Gitea +и planned Russian build-runner. -## Issues to create manually +## Созданные публичные issues + +Создано 12 из 12 planned issues: + +- `[registry] Perform Gitea backup restore test`: + https://github.com/igor04091968/AWatch-rus/issues/38 +- `[registry] Prepare temporary Russian build-runner awatch-build-01`: + https://github.com/igor04091968/AWatch-rus/issues/39 +- `[release] Produce first release evidence package`: + https://github.com/igor04091968/AWatch-rus/issues/40 +- `[legal] Prepare rightsholder evidence package`: + https://github.com/igor04091968/AWatch-rus/issues/41 +- `[qa] Define coverage threshold policy`: + https://github.com/igor04091968/AWatch-rus/issues/42 +- `[security] Prepare external security/code review checklist`: + https://github.com/igor04091968/AWatch-rus/issues/43 +- `[compat] Test Russian OS compatibility matrix`: + https://github.com/igor04091968/AWatch-rus/issues/44 +- `[ops] Validate release artifacts storage in RF`: + https://github.com/igor04091968/AWatch-rus/issues/45 +- `[docs] Refresh public demo pack and screenshots`: + https://github.com/igor04091968/AWatch-rus/issues/46 +- `[pilot] Prepare Pilot Acceptance Checklist v2`: + https://github.com/igor04091968/AWatch-rus/issues/47 +- `[governance] Enable PR-based review workflow`: + https://github.com/igor04091968/AWatch-rus/issues/48 +- `[governance] Add branch protection policy`: + https://github.com/igor04091968/AWatch-rus/issues/49 + +These URLs improve public roadmap/development visibility only. They do not +prove restore completion, Russian build-runner readiness, release evidence +production, legal readiness, external peer review, branch protection enablement +or community adoption. + +## Issues created from templates | 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. | 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. | 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. | 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. | 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. | 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. | 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. | 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. | 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. | 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. | 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. | 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. | ready_to_create | +| `[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. | created | +| `[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. | created | +| `[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. | created | +| `[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. | created | +| `[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. | created | +| `[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. | created | +| `[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. | created | +| `[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. | created | +| `[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. | created | +| `[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. | created | +| `[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. | created | +| `[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. | created | ## Guardrails diff --git a/docs/RESIDUAL_RISKS_RU.md b/docs/RESIDUAL_RISKS_RU.md index 20e2792..2a461a3 100644 --- a/docs/RESIDUAL_RISKS_RU.md +++ b/docs/RESIDUAL_RISKS_RU.md @@ -1,6 +1,6 @@ # AWatch-rus: остаточные риски после public validation и российского Git-контура -Дата: 2026-06-22 +Дата: 2026-06-23 Статус: governance / registry-readiness residual risk register. @@ -68,23 +68,25 @@ visibility, release evidence contour and legal package. Они требуют д ## 3. Низкая публичная активность issue tracker -- Текущий статус: риск открыт частично; issue templates, public roadmap and - issue creation package exist, but real GitHub issues are still pending until - URLs are recorded. +- Текущий статус: mitigation added; public roadmap/governance issues are + created and linked in `docs/public-issues/public-issues-manifest.json`. - Влияние: низкая внешняя visibility development process; сложнее показать плановое управление backlog and governance. - Почему не блокирует pilot/readiness stage: templates, roadmap and status docs - already define expected process; missing public tasks are a visibility gap, - not a runtime readiness gap. -- Как риск будет снижаться: manually create public issues for registry, QA, - security, compatibility, ops and pilot follow-up work using - `docs/public-issues/` and `docs/PUBLIC_ISSUES_CREATION_RUNBOOK_RU.md`. + already define expected process; created public issues improve visibility, + but do not prove task completion or community adoption. +- Как риск будет снижаться: keep public issues current, link future evidence + only after checks are actually performed, and use PR-based public review when + practical. - Уже снижающие evidence/documents/CI: `ROADMAP.md`, issue templates, `docs/PROJECT_STATUS_RU.md`, `docs/PUBLIC_ISSUES_PLAN_RU.md`, `docs/public-issues/public-issues-manifest.json`, `scripts/prepare_public_issues.sh`. -- Следующий action: создать реальные GitHub issues и записать URLs в - `docs/public-issues/public-issues-manifest.json`. +- Residual risk: community adoption is still low until external contributors, + public reviewed PRs and sustained third-party activity appear. +- Следующий action: keep issue URLs current in + `docs/public-issues/public-issues-manifest.json` and record real task + evidence only after completion. ## 4. Низкая community adoption diff --git a/docs/public-issues/public-issues-manifest.json b/docs/public-issues/public-issues-manifest.json index 7f1f2db..b3f9a81 100644 --- a/docs/public-issues/public-issues-manifest.json +++ b/docs/public-issues/public-issues-manifest.json @@ -1,5 +1,5 @@ { - "status": "planned_issue_templates_ready", + "status": "public_issue_urls_recorded", "github_issue_tracker": "manual_or_gh_cli_creation_required", "github_role": "public_mirror_validation_only", "registry_release_evidence": "requires_russian_build_runner", @@ -9,96 +9,120 @@ "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 + "status": "created", + "github_issue_url": "https://github.com/igor04091968/AWatch-rus/issues/38", + "created_at": "2026-06-23T19:42:47Z", + "created_by": "maintainer" }, { "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 + "status": "created", + "github_issue_url": "https://github.com/igor04091968/AWatch-rus/issues/39", + "created_at": "2026-06-23T19:42:49Z", + "created_by": "maintainer" }, { "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 + "status": "created", + "github_issue_url": "https://github.com/igor04091968/AWatch-rus/issues/40", + "created_at": "2026-06-23T19:42:51Z", + "created_by": "maintainer" }, { "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 + "status": "created", + "github_issue_url": "https://github.com/igor04091968/AWatch-rus/issues/41", + "created_at": "2026-06-23T19:42:53Z", + "created_by": "maintainer" }, { "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 + "status": "created", + "github_issue_url": "https://github.com/igor04091968/AWatch-rus/issues/42", + "created_at": "2026-06-23T19:42:55Z", + "created_by": "maintainer" }, { "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 + "status": "created", + "github_issue_url": "https://github.com/igor04091968/AWatch-rus/issues/43", + "created_at": "2026-06-23T19:42:58Z", + "created_by": "maintainer" }, { "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 + "status": "created", + "github_issue_url": "https://github.com/igor04091968/AWatch-rus/issues/44", + "created_at": "2026-06-23T19:43:00Z", + "created_by": "maintainer" }, { "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 + "status": "created", + "github_issue_url": "https://github.com/igor04091968/AWatch-rus/issues/45", + "created_at": "2026-06-23T19:43:02Z", + "created_by": "maintainer" }, { "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 + "status": "created", + "github_issue_url": "https://github.com/igor04091968/AWatch-rus/issues/46", + "created_at": "2026-06-23T19:43:04Z", + "created_by": "maintainer" }, { "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 + "status": "created", + "github_issue_url": "https://github.com/igor04091968/AWatch-rus/issues/47", + "created_at": "2026-06-23T19:43:06Z", + "created_by": "maintainer" }, { "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 + "status": "created", + "github_issue_url": "https://github.com/igor04091968/AWatch-rus/issues/48", + "created_at": "2026-06-23T19:43:08Z", + "created_by": "maintainer" }, { "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 + "status": "created", + "github_issue_url": "https://github.com/igor04091968/AWatch-rus/issues/49", + "created_at": "2026-06-23T19:43:10Z", + "created_by": "maintainer" } ] } diff --git a/docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md b/docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md index 798aec0..edaac83 100644 --- a/docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md +++ b/docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md @@ -1,5 +1,34 @@ # Registry readiness changelog +## 2026-06-23 public roadmap issues created and linked + +Changed: + +- Created 12 public roadmap/governance GitHub issues from + `docs/public-issues/`. +- Recorded issue URLs, `created_at` timestamps and `created_by=maintainer` in + `docs/public-issues/public-issues-manifest.json`. +- Updated project status, public issue plan and residual risk register to + distinguish created public issues from actual task completion evidence. +- Registry readiness checks now validate created issue URL/status consistency. + +Runtime impact: + +- No runtime/product code changes. +- No API changes. +- No UI changes. +- No business logic changes. + +Guardrails: + +- Public roadmap issues are development visibility evidence only. +- GitHub remains public mirror validation only. +- Russian Gitea plus planned Russian build-runner remains the primary registry + contour. +- Created issues do not prove restore completion, build-runner readiness, + release evidence production, external peer review, branch protection + enablement or community adoption. + ## 2026-06-23 public issue creation package Added: diff --git a/scripts/create_public_issues_from_manifest.sh b/scripts/create_public_issues_from_manifest.sh index 4f25a89..995f05e 100755 --- a/scripts/create_public_issues_from_manifest.sh +++ b/scripts/create_public_issues_from_manifest.sh @@ -31,11 +31,22 @@ fi jq -e . "$MANIFEST" >/dev/null jq -e ' - .status == "planned_issue_templates_ready" + (.status == "planned_issue_templates_ready" or .status == "public_issue_urls_recorded") 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") + and (.issues | length == 12) + and all(.issues[]; + ( + .status == "ready_to_create" + and .github_issue_url == null + ) + or ( + .status == "created" + and (.github_issue_url | type == "string") + and (.github_issue_url | test("^https://github\\.com/igor04091968/AWatch-rus/issues/[0-9]+$")) + ) + ) ' "$MANIFEST" >/dev/null gh auth status >/dev/null @@ -49,7 +60,7 @@ while IFS= read -r label; do 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) +done < <(jq -r '.issues[] | select(.status == "ready_to_create") | .labels[]' "$MANIFEST" | sort -u) created=0 @@ -64,7 +75,7 @@ while IFS=$'\t' read -r title labels source; do printf 'created_issue=%s\n' "$url" created=$((created + 1)) done < <( - jq -r '.issues[] | [.title, (.labels | join(",")), .source] | @tsv' "$MANIFEST" + jq -r '.issues[] | select(.status == "ready_to_create") | [.title, (.labels | join(",")), .source] | @tsv' "$MANIFEST" ) printf 'create_public_issues=ok\n' diff --git a/scripts/prepare_public_issues.sh b/scripts/prepare_public_issues.sh index cc5621b..3306ee1 100755 --- a/scripts/prepare_public_issues.sh +++ b/scripts/prepare_public_issues.sh @@ -80,12 +80,25 @@ 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" + (.status == "planned_issue_templates_ready" or .status == "public_issue_urls_recorded") 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 any(.issues[]; .github_issue_url != null) + and all(.issues[]; + (.source | startswith("docs/public-issues/")) + and ( + (.status == "ready_to_create" and .github_issue_url == null) + or ( + .status == "created" + and (.github_issue_url | type == "string") + and (.github_issue_url | test("^https://github\\.com/igor04091968/AWatch-rus/issues/[0-9]+$")) + and (.created_at | type == "string") + and .created_by == "maintainer" + ) + ) + ) ' "$MANIFEST" >/dev/null || fail "manifest_required_fields" while IFS= read -r source; do [[ -s "$ROOT/$source" ]] || fail "manifest_source_missing:$source" @@ -103,18 +116,26 @@ if ((${#failures[@]} > 0)); then fi printf 'public_issues_prepare=ok\n' -printf 'status=ready_to_create\n' +printf 'status=%s\n' "$(jq -r '.status' "$MANIFEST" 2>/dev/null || printf 'unknown')" printf 'issue_templates=%d\n' "${#expected_files[@]}" +if command -v jq >/dev/null 2>&1; then + printf 'created_issues=%s\n' "$(jq '[.issues[] | select(.status == "created")] | length' "$MANIFEST")" + printf 'ready_to_create=%s\n' "$(jq '[.issues[] | select(.status == "ready_to_create")] | length' "$MANIFEST")" +fi printf '\n' -printf 'Manual gh CLI commands, after maintainer review and gh auth:\n' +printf 'Manual gh CLI commands for issues still ready_to_create, after maintainer review and gh auth:\n' for name in "${expected_files[@]}"; do + rel="docs/public-issues/$name" + if command -v jq >/dev/null 2>&1; then + status="$(jq -r --arg source "$rel" '.issues[] | select(.source == $source) | .status' "$MANIFEST")" + [[ "$status" == "ready_to_create" ]] || continue + fi 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' +printf 'After creating any remaining issues, update docs/public-issues/public-issues-manifest.json with github_issue_url values.\n' diff --git a/scripts/registry_readiness_check.sh b/scripts/registry_readiness_check.sh index e84d9c9..684b202 100644 --- a/scripts/registry_readiness_check.sh +++ b/scripts/registry_readiness_check.sh @@ -217,15 +217,24 @@ 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" + (.status == "planned_issue_templates_ready" or .status == "public_issue_urls_recorded") 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 any(.issues[]; .github_issue_url != null) and all(.issues[]; - .status == "ready_to_create" - and .github_issue_url == null - and (.source | startswith("docs/public-issues/")) + (.source | startswith("docs/public-issues/")) + and ( + (.status == "ready_to_create" and .github_issue_url == null) + or ( + .status == "created" + and (.github_issue_url | type == "string") + and (.github_issue_url | test("^https://github\\.com/igor04091968/AWatch-rus/issues/[0-9]+$")) + and (.created_at | type == "string") + and .created_by == "maintainer" + ) + ) ) ' "$PUBLIC_ISSUES_MANIFEST" >/dev/null || fail "public_issues_manifest_required_fields" elif command -v python3 >/dev/null 2>&1; then @@ -236,8 +245,12 @@ import sys with open(sys.argv[1], "r", encoding="utf-8") as fh: data = json.load(fh) +import re + +if data.get("status") not in {"planned_issue_templates_ready", "public_issue_urls_recorded"}: + raise SystemExit("status mismatch") + 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", @@ -249,13 +262,26 @@ for key, value in expected.items(): issues = data.get("issues") if not isinstance(issues, list) or len(issues) != 12: raise SystemExit("issues length mismatch") +url_re = re.compile(r"^https://github\.com/igor04091968/AWatch-rus/issues/[0-9]+$") +if not any(issue.get("github_issue_url") for issue in issues): + raise SystemExit("no github_issue_url recorded") 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") + status = issue.get("status") + url = issue.get("github_issue_url") + if status == "ready_to_create": + if url is not None: + raise SystemExit("ready_to_create issue must not have github_issue_url") + elif status == "created": + if not isinstance(url, str) or not url_re.match(url): + raise SystemExit("created issue URL mismatch") + if not isinstance(issue.get("created_at"), str): + raise SystemExit("created issue missing created_at") + if issue.get("created_by") != "maintainer": + raise SystemExit("created issue created_by mismatch") + else: + raise SystemExit("issue status mismatch") PY else fail "json_validator_missing:jq_or_python3_required" @@ -289,7 +315,7 @@ require_grep "RESIDUAL_RISKS_RU\\.md" "docs/PROJECT_STATUS_RU.md" "project_statu 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 "Public issues:[[:space:]]*created and linked in manifest|Созданы 12 публичных" "docs/PROJECT_STATUS_RU.md" "project_status_issue_creation_created_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 "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" @@ -317,6 +343,7 @@ require_grep "No business logic changes" "docs/registry/REGISTRY_READINESS_CHANG 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 issue creation package" "docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md" "changelog_public_issue_creation_package" +require_grep "public roadmap issues created and linked" "docs/registry/REGISTRY_READINESS_CHANGELOG_RU.md" "changelog_public_issues_created_linked" 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" @@ -383,10 +410,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\\] 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 "ready_to_create" "docs/PUBLIC_ISSUES_PLAN_RU.md" "issues_status_ready_to_create" +require_grep "created" "docs/PUBLIC_ISSUES_PLAN_RU.md" "issues_status_created" 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 "https://github\\.com/igor04091968/AWatch-rus/issues/[0-9]+" "docs/PUBLIC_ISSUES_PLAN_RU.md" "issues_urls_recorded" 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 "public mirror validation only" "SECURITY.md" "security_public_mirror_validation"