feat: add clean-slate vNext identity allocation - #44
Conversation
Co-Authored-By: Codex <noreply@openai.com>
🤖 Codex PR Review🚫 Merge blocked: 1 serious issue(s) found in high-risk files ⚖️ Codex Review Arbitration🚫 block: 🚫 Blocking IssuesThese issues must be fixed before this PR can be merged: 1. 🟠 [HIGH] Logic in
|
|
Independent source-of-truth clarification for clean-slate vNext N1:
This clarification is limited to PR #44 pure N1 and does not authorize publisher/build integration. |
Co-Authored-By: Codex <noreply@openai.com>
|
Independent contract arbitration for clean-slate vNext N1:
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ed92da627e
ℹ️ 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".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| except IdentityMetadataError: | ||
| try: | ||
| _validate_clean_binding_names(binding) | ||
| except (PublicationPlanError, AttributeError, KeyError, TypeError, ValueError, OverflowError, UnicodeError): | ||
| raise _error("identity_binding_invalid") from None | ||
| return binding |
There was a problem hiding this comment.
Keep rejecting bindings that fail non-name metadata checks
When a vNext-style name makes _validate_v3_entry raise, this fallback accepts the binding after checking only the filenames. In a direct build_publication_plan call, a binding that failed for another reason (for example identity_class='V3_CANONICAL' with canonical_identity=False, or invalid binding display fields) is still accepted as long as its clean-slate target names match. That lets publication plans carry internally inconsistent identity metadata, which the vNext contract says must be validated before binding.
Useful? React with 👍 / 👎.
| md = None if "md" not in entry else entry["md"] | ||
| manifest = None if "manifest" not in entry else entry["manifest"] |
There was a problem hiding this comment.
Reject nullable optional artifact names
If a wire entry includes "md": null or "manifest": null, this treats the present null exactly like an absent optional artifact, so the strict vNext parser accepts malformed wire and serialize_vnext_index silently drops the key. In contexts that depend on the exact {schema_version, entries} wire contract and requested-artifact policy, present optional artifact fields should be validated as strings instead of being normalized away.
Useful? React with 👍 / 👎.
Co-Authored-By: Codex <noreply@openai.com>
Co-Authored-By: Codex <noreply@openai.com>
|
Permanent freeze: remediation_count=2 FINAL, human_exception_count=1/max=1, absolute_final=true. Remaining HIGH is vNext attachment key-presence contract (omitted md/manifest vs explicit null). Preserve branch/worktree/review evidence; no further code action. |
Scope
QAR-N1 adds a clean-slate vNext identity/index wire foundation and pure allocation API. It is side-by-side with the legacy system and does not read or migrate old index versions.
Contract
qar_vnext.identity_index.v1with exact{schema_version, entries}shape.V3_CANONICALandV3_VARIANTare accepted;LEGACY_V2fails closed.EXACT_ARTIFACT_REUSE,CURRENT_MANDATORY, andHISTORICAL_RECOVERYmodes.PublicationPlanbinding for current entries.Boundaries
No old index fallback/migration, allocator compatibility adapter, publisher/build/archive/RSS/workflow/Pages integration, filesystem/network I/O, producer changes, or new dependencies.
Verification
scripts/gate_codex_app_review.py; out of scope and unchanged.Source of truth:
quant_system_clean_slate_vnext_decision_2026-07-15.mdNo merge, rerun, polling, or automation changes performed.