Skip to content

Fix independent default salvage run identifiers - #808

Merged
SoundBlaster merged 1 commit into
mainfrom
fix/salvage-run-id
Oct 27, 2026
Merged

SoundBlaster merged 1 commit into
mainfrom
fix/salvage-run-id

Conversation

@SoundBlaster

Copy link
Copy Markdown
Member

Summary

  • Fix default stalled-run salvage IDs so independent recovery invocations no longer share spec.
  • Preserve existing recovery artifacts and explicitly supplied ID behavior.

Motivation

The sanitizer turns an absent ID into the nonempty fallback spec, making the intended generated-ID fallback unreachable. A second ordinary invocation then conflicts with the existing run log.

Goals

  • Generate distinct default recovery IDs and check their actual normalized artifact paths.
  • Keep the salvage schema, review requirement and canonical boundary unchanged.

Changes

  • Handle absent/empty/whitespace input before sanitization and use the existing timestamp/spec/nonce generator.
  • Retry occupied normalized log, JSON or patch names within the existing retry bound; fail without writing when allocation is exhausted.
  • Keep explicit-ID normalization and existing-run-log rejection.
  • Add seven regression cases and extend explicit-ID compatibility/protection assertions.
  • Document the identifier contract and sanitizer lesson in the supervisor manual, contribution guide and DocC.
  • This remains lexical artifact-allocation/I/O mechanics; it introduces no domain approval/readiness policy or new Specification class.

Spec Evidence

Spec-ID: NO-SPEC-IMPACT
Proposal-ID: 0048
Spec-Impact: tooling
Spec-Rationale: Restores independent recovery-artifact identity in the existing stalled-run salvage protocol. Canonical specification semantics, review authority and evidence admission are unchanged.

Validation

  • Tests added/updated for changed behavior
  • Local checks passed

Commands run:

python -m pytest -q tests/test_supervisor.py -k 'stalled_run_salvage or make_run_id_uses_nonce'
python -m pytest -q tests/test_supervisor.py
python tools/python_quality.py
make proposal-tracking-gate docc-sync materialization-packet-check
git diff --cached --check

Results:

  • Seven regression cases failed on the original implementation for the reproduced default-ID/namespace behavior.
  • Focused set: 13 passed.
  • Full supervisor suite: 1063 passed (545 seconds).
  • Two separate real CLI processes in one second produced distinct IDs and six independent artifacts; first-run files and the synthetic canonical input remained byte-identical.
  • Python quality, proposal tracking, DocC sync and materialization packet consistency passed.

Risks / Notes

  • Backward compatibility impact: explicit IDs retain their normalization and duplicate-log guard; omitted IDs now receive generated names instead of spec.
  • Migration/config changes required: none. Existing recovery files are retained.
  • Known limitations: latest-summary.md remains a shared latest-run pointer. Automatic allocation is bounded and can fail explicitly on exhaustion. This does not add a multi-file transaction or change explicit-ID partial-recovery semantics. CI/review pending.

Checklist

  • PR title clearly describes the change
  • Scope is focused and minimal
  • Documentation updated (or N/A)
  • Workflow/artifact changes distinguish presence from readiness/status
  • Consumers prefer authoritative repaired/promoted/latest artifacts where relevant
  • Temporary or intermediate paths are scoped to the current run/task where relevant
  • No secrets or sensitive data added

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-26T23:12:23.025587Z f9b523a PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

Comment thread CONTRIBUTING.md
@SoundBlaster

Copy link
Copy Markdown
Member Author

HyperReview

Эскиз по исходникам · f9b523af

Состав · без изменений в проекции

Supervisor
Пояснения, источники и ограничения

Суть изменения

В CONTRIBUTING.md добавлено руководство по ID необязательных runtime-артефактов: отсутствие входного ID предлагается распознавать до санитизации с резервным slug, а ID по умолчанию выделять с учётом фактических нормализованных путей и частично сохранённых артефактов. Документ также указывает на регрессионные проверки восстановления остановленного запуска. Роль Supervisor сохраняется; характер изменения кода и его соответствие новому правилу по доступным фрагментам не установить.

Интерпретация выбранных исходников; порядок узлов не означает порядок выполнения.

Связи и основания

Связи не сформированы: Фрагменты документируют правила выделения ID, но не показывают реализацию, вызовы или передачу данных, связывающие эту политику с операциями Supervisor. Изменённые код и тесты перечислены, однако их содержимое недоступно; поэтому полезную связь между ответственностями подтвердить нельзя.

Ответственности и источники

  • Supervisor — В CONTRIBUTING.md добавлен раздел Recovery artifact identifiers: он уточняет правила различения отсутствующего ID до нормализации, выделения ID по фактическим путям артефактов, включая частично сохранённые файлы, и защиты от дубликатов. Там же названы регрессионные проверки восстановления остановленного запуска. Это документирует границы ответственности Supervisor; изменения кода и тестов перечислены в инвентаре, но их содержимое не предоставлено, поэтому конкретное поведение реализации установить нельзя. CONTRIBUTING.md — до / после

Границы анализа

PR #808: 8e1a261b021ecc6c50b9d352f11a1543340f8988 → f9b523aff4a3be07834d5d1904c407fde56489ec.

Исходников в анализе: 10; пропущено: 20.

Компилятор проверил структуру Hypercode и ссылки. Соответствие интерпретации коду и поведение программы этим не доказаны. Анализ ограничен предоставленными исходниками и фрагментами контекста; выполнение программы не наблюдалось.

Неизменённых файлов контекста по Git blob: 4. Их фрагменты до и после могут различаться охватом.

  • Инвентарь перечисляет изменённые, но не предоставленные Sources/SpecGraph/Documentation.docc/ProductWorkspacePilots.md, docs/supervisor_manual.md, tests/test_supervisor.py и tools/supervisor.py; их изменения нельзя восстановить по неизменённому CONTRIBUTING.md.

  • Фрагменты docs/intent_decision_review.md, tests/test_intent_decision_review.py, tools/architecture_metrics.py и tools/validate_architecture_style.py подтверждены как неизменённые полные Git-блобы и не свидетельствуют о реализации или тестировании изменения Supervisor.

  • Не предоставлены полные diff и содержимое изменённых файлов, поэтому невозможно сверить описанные правила с кодом, исследовать вызовы и проверить добавленные тесты. Выполнение и результаты проверок не наблюдались.

  • Связи не сформированы: Фрагменты документируют правила выделения ID, но не показывают реализацию, вызовы или передачу данных, связывающие эту политику с операциями Supervisor. Изменённые код и тесты перечислены, однако их содержимое недоступно; поэтому полезную связь между ответственностями подтвердить нельзя.

  • Пропущено: docs/intent_atoms.md — input_byte_limit (после: 1, до: 1).

  • Пропущено: docs/publication_policy_diagnostics.md — input_byte_limit (после: 1, до: 1).

  • Пропущено: docs/registered_rule_reuse.md — input_byte_limit (после: 1, до: 1).

  • Пропущено: docs/subject_publication.md — input_byte_limit (после: 1, до: 1).

  • Пропущено: tests/test_intent_decision_review.py — context_excerpted (после: 1, до: 1).

  • Пропущено: tests/test_supervisor.py — input_byte_limit (после: 1, до: 1).

  • Пропущено: tools/supervisor.py — input_byte_limit (после: 1, до: 1).

  • Пропущено: tools/validate_architecture_style.py — context_excerpted (после: 1, до: 1).

  • Пропущено: docs/intent_decision_review.md — context_excerpted (до: 1).

  • Пропущено: tools/architecture_metrics.py — context_excerpted (до: 1).

  • Пропущено: Sources/SpecGraph/Documentation.docc/ProductWorkspacePilots.md — input_byte_limit (после: 1).

  • Пропущено: docs/supervisor_manual.md — input_byte_limit (после: 1).

Точные диапазоны источников по узлам

Supervisor

Ок или не ок?

CI · результаты проверок

Снимок для f9b523af · 2026-10-26T23:14:30Z (UTC).

Результат check-run не доказывает выполнение конкретного теста, полноту покрытия или соответствие архитектуре.

Проверка Статус Результат
Deploy landing page to static host completed skipped
Deploy bundle to static host completed skipped
Prepare case-sensitive redirect artifact completed skipped
deploy completed skipped
Build DocC technical surface completed success
spec-evidence completed success
registered-rule-reuse completed success
test in_progress —
python-quality completed success
publication-diagnostic-compatibility (3.10) completed success
publication-diagnostic-compatibility (3.14) completed success
specdraft-preview-ui completed success

Снимок неполный: показано не более 12 проверок.

Отсутствие, ожидание или сбой CI не блокируют архитектурный обзор.

Review gate: review thread.

@github-actions

Copy link
Copy Markdown

Intent Atoms · v1

Scope: specification YAML in specs/nodes

Status: complete
Count: 302 → 302 (+0)
Diff: +0 added, −0 removed, 0 modified
Revisions: 8e1a261b021e → f9b523aff4a3
Profile: specgraph-intent-atoms-v1 (SHA-256 54caf075dafc)
Analyzer: 1.0.1 (SHA-256 aa7c646a25ea)

Proposal obligations · draft

Status: complete for declared fields
Count: 12 → 12 (+0)
Diff: +0 added, −0 removed, 0 modified
Coverage: explicit YAML declarations in docs/proposals; unannotated Markdown is not assessed.
Draft counts are separate from specification counts; they do not establish review, approval or canonical promotion.

Informational only; this report does not gate merge readiness.

@github-actions

Copy link
Copy Markdown

SpecificationMetrics · diagnostic PR measurement

Metric Base PR head (Δ)
Specifications (S) 125 125 (+0)
Remaining opportunities (U) 10294 10296 (+2)
S/U 0.012143 0.0121406
Dead Specifications 0 0
Unknown Specifications 0 0

Collection: base complete, head complete.
Primary provisional: base False, head False.
Revisions: 8e1a261b021e → f9b523aff4a3; contract 943b09cbbe20.
Base diagnostics: none reported.
Head diagnostics: none reported.

  • Python CC / Cog: cc_sum +4; cc_max +0; cog_sum +6; cog_max +0; sloc +14
  • Clone pairs / duplicate lines / tokens: clone_pairs +0; duplicate_lines +0; duplicate_tokens +0

Scope: files assigned application by the manifest; tests/ is test, and the comment renderer is framework.
Informational only. Counts and metrics do not decide eligibility, correctness, or merge readiness.
Collection run
Detailed JSON reports and counting contract
Artifact presence does not imply a complete measurement; inspect report statuses and diagnostics. Downloads require GitHub access and expire with artifact retention.

@SoundBlaster
SoundBlaster merged commit 9a6723b into main Oct 27, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant