{
  "version": "now38_prompt_generation_contract_deepseek.v1",
  "created_at": "2026-06-09T22:04:03.919489Z",
  "contract_id": "now38_dramart_seedance_storyboard_prompt_generation_contract_before_prompt_generation",
  "round_id": "round1",
  "project_root": "/wwwb/aitools/writer",
  "output_run_dir": "outputs/now38_prompt_generation_contract_deepseek_round1d_20260610_0604",
  "contract_text": "# NOW-38 Dramart/Seedance Storyboard Prompt Generation Precontract\n\n更新时间：`2026-06-10T06:00:00+08:00`\n\n## Status\n\n- contract id: `now38_dramart_seedance_storyboard_prompt_generation_contract_before_prompt_generation`\n- stage id: `now38_dramart_seedance_storyboard_prompt_adapter_design`\n- implementation marker before this contract: `now38_dramart_seedance_storyboard_prompt_generation_contract_before_prompt_generation`\n- expected next implementation marker after this contract lands: `now38_dramart_seedance_storyboard_prompt_generation_no_writeback_draft_packets`\n- active route remains: `platform_neutral_prompt_readiness_manual_execution_log_contract`\n- active route authority: `execution_state.json.next_entrypoint`\n- status: `draft_pending_deepseek_round1_round2`\n- DeepSeek Round 1: `pending`\n- DeepSeek Round 2: `pending`\n- unresolved high/blocker findings: `pending`\n\nThis contract is a precondition for any future NOW-38 prompt-generation implementation. It does not generate prompts, does not render provider payloads for execution, does not execute provider jobs, does not run PDF/OCR extraction, does not implement UI, and does not create provider/media/asset/writeback/route/production authority.\n\nThe next implementation, if this contract lands, may only generate deterministic review-only draft prompt packet artifacts under the strict no-writeback boundary. It still may not execute providers, create final prompts, bind assets, write canonical state, mutate rows, transition routes, mutate outputs indexes, activate NOW-36, or claim production readiness.\n\n## Purpose\n\nNOW-38 schema/validator artifacts are now landed and validated. The next risk is allowing provider-facing syntax such as `@实体名称` to leak from an adapter prompt draft into canonical UID, asset binding, provider evidence, or production acceptance layers.\n\nThis contract defines the only safe future prompt-generation shape:\n\n- draft prompt candidates are review artifacts, not final prompt text;\n- every draft prompt candidate is derived from supported NOW-37 text evidence and the NOW-38 schema/validator packet;\n- every `@实体名称` / `@entity` mention is validated against an adapter-only `entity_mention_ledger`;\n- the Dramart PDF remains `future_extractor_debt`;\n- provider execution, media/assets, writeback, route transition, outputs-index mutation, NOW-36 activation, and production acceptance remain blocked.\n\n## Evidence Basis\n\nAuthoritative inputs:\n\n- route handoff: `docs/now37_39_route_plan_control_plane_handoff_20260609.md`\n- NOW-37 closeout decision contract: `docs/now37_resource_case_absorption_closeout_decision_contract_20260610.md`\n- NOW-37 supported-text final run: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442`\n- NOW-37 supported-text gate: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_gate.json`\n- NOW-37 resource refs: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_resource_ref_index.jsonl`\n- NOW-37 prompt patterns: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_prompt_patterns.jsonl`\n- NOW-37 platform constraints: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_platform_constraints.jsonl`\n- NOW-37 anti-patterns: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_anti_patterns.jsonl`\n- NOW-37 gap register: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_gap_register.jsonl`\n- NOW-38 schema/validator contract: `docs/now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_contract_20260610.md`\n- NOW-38 schema/validator final run: `outputs/now38_adapter_schema_validator_final_20260610_0529`\n- NOW-38 final gate: `outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_gate.json`\n- NOW-38 source coverage matrix: `outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_source_coverage_matrix.jsonl`\n- NOW-38 `entity_mention_ledger` schema/examples: `outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_entity_mention_ledger_schema.json`, `outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_entity_mention_ledger_examples.jsonl`\n- NOW-38 `@entity` validator spec/fixtures: `outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_at_entity_validator_spec.json`, `outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_at_entity_validator_fixtures.jsonl`\n- NOW-38 storyboard prompt packet schema: `outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_storyboard_prompt_packet_schema.json`\n- NOW-38 unsupported source/field reports: `outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_unsupported_source_report.jsonl`, `outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_unsupported_field_report.jsonl`\n- platform-neutral shot/scene/storyboard context authority: `outputs/p_plan_v2_22_neutral_prompt_draft_hold_boundary_20260605_0713/P2V_22_neutral_prompt_draft_rows.jsonl`, sha256=`1494f84aba637adec1f8d360d71e537f0490ca56aa1c288bf3a87b4f33c6265d`\n- platform-neutral shot/scene/schema gate: `outputs/p_plan_v2_22_neutral_prompt_draft_hold_boundary_20260605_0713/P2V_22_gate.json`\n- Now-32 readiness packaging boundary authority: `outputs/p_plan_v2_23_prompt_readiness_packaging_boundary_20260605_0730/P2V_23_prompt_readiness_package.json`, sha256=`a57ebbac6bef7390e5f5ff4abf46c479f3cd2f612fb66f356541dab5eee748d5`\n- Now-32 chapter readiness row authority: `outputs/p_plan_v2_23_prompt_readiness_packaging_boundary_20260605_0730/P2V_23_chapter_readiness_package_rows.jsonl`, sha256=`b69d6dc2c45b05f2605092c0442e5160eabd242acbe36f11d5324a9253861c60`\n- NOW-36 final gate: `outputs/now36_real_asset_evidence_activation_decision_final_20260609_0413/NOW36_ACTIVATION_DECISION_gate.json`\n- current control plane: `AGENTS.md`, `execution_state.json`, `phase_acceptance.json`, `workflow.json`, `workflow_index.json`, `retrospective_state.json`, `todo.md`, `projectreport.md`, `docs/midterm_autopilot_prompt.md`, `patchnote.md`\n\nKey facts:\n\n- NOW-38 schema/validator final gate has `pass=true`, `validator_status=pass`, `drift_status=pass`, and forbidden side-effect counters all `0`.\n- NOW-38 final gate records `source_coverage_has_supported_text=true`, `source_coverage_has_dramart_pdf_future_debt=true`, and `source_coverage_has_metadata_only=true`.\n- `NOW38_ADAPTER_storyboard_prompt_packet_schema.json` has `contains_generated_prompt_text=false`.\n- `NOW38_ADAPTER_unsupported_field_report.jsonl` explicitly blocks `final_prompt_text`, `provider_payload.execution_endpoint`, `dramart.pdf_specific_renderer_format`, `asset_reference.uri`, and `canonical_entity_uid`.\n- NOW-37 closeout records `dramart_pdf_gap_disposition=future_extractor_debt`.\n- NOW-37 closeout records `dramart_pdf_gap_blocks_now38_prompt_generation=true`. This contract narrows that blocker by allowing only a later review-only draft implementation that must not claim Dramart PDF-specific support and must fail if it consumes blocked PDF-derived fields.\n- P2V-22 neutral draft context has `validator_status=pass`, `provider_prompt_syntax_count=0`, `adapter_payload_count=0`, `provider_job_execution_count=0`, and `production_lane_accepted_count=0`; it is a read-only shot/scene context authority, not provider-ready prompt evidence.\n- P2V-23 readiness packaging has `validator_status=pass`, `provider_prompt_syntax_count=0`, `adapter_payload_count=0`, `provider_job_execution_count=0`, and `production_lane_accepted_count=0`; it is a read-only readiness/held boundary authority, not provider-ready prompt evidence.\n- NOW-36 remains blocked/no-execution: `production_activation_ready=false`, `provider_manual_execution_allowed=false`, `now36_activation_authorized=false`.\n\n## Scope Boundary\n\nAllowed in this contract:\n\n- define future draft prompt candidate input schemas;\n- define how supported NOW-37 text evidence can be cited by future draft prompt candidates;\n- define how the adapter-only `entity_mention_ledger` must be used by future draft prompt candidates;\n- define `@实体名称` / `@entity` validation requirements for future draft prompt candidates;\n- define Dramart PDF future-debt limits and blocked fields;\n- define validator, drift, rollback, replay-plan, review surface, and final gate requirements for a later implementation;\n- run DeepSeek v4 pro thinking/max Round 1/2 advisory for this contract;\n- update control plane only after this contract and advisory basis pass.\n\nForbidden in this contract:\n\n- generating any prompt candidate text;\n- generating `final_prompt_text`;\n- rendering provider payloads for execution;\n- creating execution endpoints, provider job IDs, media IDs, provider file IDs, provider/manual/operator evidence, or manual execution logs;\n- executing provider jobs or manual provider workflows;\n- generating images, audio, TTS, video, voice profiles, reference assets, thumbnails, embeddings, previews, or media derivatives;\n- acquiring, importing, uploading, or binding assets;\n- running PDF/OCR extraction or claiming Dramart PDF-specific renderer support;\n- accepting/rejecting canonical UID decisions;\n- writing accepted/operator overlay, canonical UID, canonical KG, raw KG, registry, entity store, draft rows, held rows, readiness rows, route state, replay state, or outputs indexes;\n- feedback intake, repair execution, replay execution, NOW-39 UI implementation, NOW-36 activation, provider readiness, production readiness, or production acceptance.\n\nDeepSeek/LLM advisory remains advisory-only. It is not evidence, operator acceptance, route authority, writeback authority, replay authority, outputs-index authority, NOW-36 activation, provider readiness, or production acceptance.\n\n## Future Implementation Output Contract\n\nThe next implementation, if authorized after this contract lands, must write a fresh output run using the `NOW38_PROMPT_DRAFT_*` prefix.\n\nRequired artifacts:\n\n- `NOW38_PROMPT_DRAFT_input.json`\n- `NOW38_PROMPT_DRAFT_source_evidence_map.jsonl`\n- `NOW38_PROMPT_DRAFT_entity_mention_ledger.jsonl`\n- `NOW38_PROMPT_DRAFT_allowed_entity_sets.jsonl`\n- `NOW38_PROMPT_DRAFT_prompt_candidate_packets.jsonl`\n- `NOW38_PROMPT_DRAFT_at_entity_validation_report.json`\n- `NOW38_PROMPT_DRAFT_unsupported_source_report.jsonl`\n- `NOW38_PROMPT_DRAFT_unsupported_field_report.jsonl`\n- `NOW38_PROMPT_DRAFT_drift_report.json`\n- `NOW38_PROMPT_DRAFT_validation_report.json`\n- `NOW38_PROMPT_DRAFT_rollback_plan.json`\n- `NOW38_PROMPT_DRAFT_replay_plan.json`\n- `NOW38_PROMPT_DRAFT_review.html`\n- `NOW38_PROMPT_DRAFT_gate.json`\n- `manifest.json`\n\nEvery artifact must include or inherit:\n\n- `artifact_authority_class=now38_prompt_generation_no_writeback_draft_packets`\n- `adapter_layer_only=true`\n- `review_only=true`\n- `draft_prompt_candidate_only=true`\n- `final_prompt_text_allowed=false`\n- `provider_payload_execution_allowed=false`\n- `provider_manual_execution_allowed=false`\n- `media_generation_allowed=false`\n- `asset_generation_or_acquisition_allowed=false`\n- `asset_binding_allowed=false`\n- `accepted_overlay_writeback_allowed=false`\n- `canonical_uid_writeback_allowed=false`\n- `canonical_kg_writeback_allowed=false`\n- `raw_kg_writeback_allowed=false`\n- `entity_store_writeback_allowed=false`\n- `row_mutation_allowed=false`\n- `feedback_repair_replay_allowed=false`\n- `route_transition_allowed=false`\n- `outputs_index_mutation_allowed=false`\n- `now36_activation_allowed=false`\n- `production_acceptance_claimed=false`\n- `deepseek_advisory_only=true`\n\n## Schema: Prompt Generation Input\n\n`NOW38_PROMPT_DRAFT_input.json` must capture:\n\n- `implementation_kind=now38_dramart_seedance_storyboard_prompt_generation_no_writeback_draft_packets`\n- source artifact refs and SHA-256 hashes for NOW-37 and NOW-38 inputs;\n- `execution_state.json.next_entrypoint` normalized value;\n- NOW-36 blocked/no-execution core flags;\n- NOW-37 supported-text completion flags;\n- NOW-37 Dramart PDF future-debt flags;\n- NOW-38 schema/validator final gate fields;\n- selected shot/scene/storyboard source refs for the draft packet run;\n- P2V-22 neutral draft row authority path and SHA-256;\n- P2V-23 readiness package boundary path and SHA-256;\n- declared provider families: `seedance | dramart | shared_adapter_schema`;\n- provider-family capability limits;\n- deterministic config fingerprint;\n- DeepSeek implementation Round 1/2 advisory refs for the future implementation.\n\nThe future implementation must fail if selected source refs include unsupported PDF, binary/media metadata-only rows, or any row without a valid `resource_ref` evidence chain.\n\nSelected shot/scene/storyboard refs must be validated against `outputs/p_plan_v2_22_neutral_prompt_draft_hold_boundary_20260605_0713/P2V_22_neutral_prompt_draft_rows.jsonl` and its gate/schema, with readiness/held status cross-checked against `outputs/p_plan_v2_23_prompt_readiness_packaging_boundary_20260605_0730/P2V_23_prompt_readiness_package.json` and `P2V_23_chapter_readiness_package_rows.jsonl`. These artifact paths and SHA-256 hashes must be recorded in `NOW38_PROMPT_DRAFT_input.json`. Unsupported-source filtering alone is not sufficient for shot/scene ref authority. No other shot/scene/storyboard source may be used unless it has a later explicit control-plane contract, SHA-256 hash, drift check, and no-writeback gate.\n\n## Schema: Source Evidence Map\n\n`NOW38_PROMPT_DRAFT_source_evidence_map.jsonl` must contain one row per source basis used by a prompt candidate.\n\nRequired fields:\n\n- `source_evidence_id`\n- `prompt_candidate_packet_id`\n- `candidate_field_path`\n- `source_family`: `now37_supported_text | now38_schema_validator | control_plane | now36_gate`\n- `source_artifact_path`\n- `source_artifact_sha256`\n- `source_record_ref`\n- `resource_ref_ids`\n- `coverage_row_ids`\n- `evidence_role`: `pattern | constraint | anti_pattern | allowed_entity | unsupported_boundary | control_boundary`\n- `allowed_use`\n- `blocked_use`\n- `review_status=pending_future_review_no_writeback`\n\nRules:\n\n- Every draft prompt candidate field must cite at least one source evidence row.\n- Evidence rows may cite supported NOW-37 text, NOW-38 schema/validator artifacts, or control-plane boundaries.\n- Evidence rows must not cite unsupported Dramart PDF semantics, media contents, real assets, voice profiles, provider jobs, manual execution, operator acceptance, accepted overlay, canonical writeback, or production evidence.\n\n## Schema: Allowed Entity Sets\n\n`NOW38_PROMPT_DRAFT_allowed_entity_sets.jsonl` must be local to the future adapter packet.\n\nRequired fields:\n\n- `allowed_entity_set_id`\n- `adapter_packet_id`\n- `shot_ref_id`\n- `scene_ref_id`\n- `local_entity_key`\n- `entity_display_name`\n- `allowed_scope`: `shot | scene | packet`\n- `source_context_ref_ids`\n- `source_evidence_ids`\n- `ambiguity_status`: `unambiguous | duplicate_display_name | requires_local_disambiguation | blocked`\n- `disambiguation_label`\n- `review_status=pending_future_review_no_writeback`\n\nRules:\n\n- `local_entity_key` is local to the adapter packet and is not a canonical UID.\n- The row must not contain `canonical_entity_uid`, asset URI, voice profile ID, provider file ID, or accepted overlay ID.\n- Duplicate display names must be blocked or locally disambiguated before prompt candidates can use them.\n- Entity display names and allowed scopes must be derived only from NOW-37 supported text case cards/resource refs plus the explicitly identified P2V-22 neutral draft rows and P2V-23 readiness package boundary rows. They must not be inferred from unsupported PDF sources, binary/media metadata, unlisted narrative-context files, assets, provider evidence, manual evidence, operator acceptance, or later artifacts without the same explicit control-plane contract, SHA-256 hash, drift check, and no-writeback gate.\n\n## Schema: Entity Mention Ledger\n\n`NOW38_PROMPT_DRAFT_entity_mention_ledger.jsonl` must extend the NOW-38 adapter-only ledger pattern without changing its authority class.\n\nRequired fields:\n\n- `ledger_entry_id`\n- `adapter_packet_id`\n- `prompt_candidate_packet_id`\n- `shot_ref_id`\n- `scene_ref_id`\n- `local_entity_key`\n- `entity_display_name`\n- `mention_token`\n- `allowed_entity_set_id`\n- `source_evidence_ids`\n- `coverage_row_ids`\n- `ambiguity_status`\n- `validator_status`: `valid | blocked | needs_review`\n- `review_status=pending_future_review_no_writeback`\n\nRules:\n\n- `mention_token` must be exactly `@` plus the allowed display name or approved local disambiguation label.\n- Ledger row IDs are deterministic hashes of local adapter fields, not canonical IDs.\n- Ledger rows must not create, infer, or update canonical UID, registry, KG, raw KG, entity store, accepted overlay, assets, provider evidence, or production evidence.\n\n## Schema: Prompt Candidate Packets\n\n`NOW38_PROMPT_DRAFT_prompt_candidate_packets.jsonl` may contain review-only draft prompt candidate text fields, never final prompt text.\n\nRequired fields:\n\n- `prompt_candidate_packet_id`\n- `adapter_packet_id`\n- `provider_family`: `seedance | dramart | shared_adapter_schema`\n- `shot_ref_id`\n- `scene_ref_id`\n- `candidate_status=draft_generated_for_review_no_writeback`\n- `source_evidence_ids`\n- `coverage_row_ids`\n- `entity_mention_ledger_ids`\n- `allowed_entity_set_ids`\n- `draft_prompt_candidate_text`\n- `draft_negative_prompt_candidate_text`\n- `structured_prompt_terms`\n- `unsupported_source_refs`\n- `unsupported_field_refs`\n- `validator_profile_refs`\n- `review_status=pending_future_review_no_writeback`\n\nRules:\n\n- `draft_prompt_candidate_text` is review-only and cannot be exported as provider-ready final prompt text.\n- The field name `final_prompt_text` remains forbidden.\n- Provider execution fields remain forbidden, including execution endpoints, job IDs, provider file IDs, upload refs, account refs, or media refs.\n- `provider_family=dramart` must not claim Dramart PDF-specific formatting, renderer syntax, screenplay format compliance, or production readiness while the Dramart PDF gap remains `future_extractor_debt`.\n- `provider_family=seedance` may use supported NOW-37 text patterns only as review-only draft guidance, not provider execution evidence.\n- Candidate packets must not contain canonical UID, asset URI, voice profile ID, accepted overlay ID, or production evidence fields.\n\n## Validator Requirements\n\nThe future implementation gate must fail if:\n\n- `execution_state.json.next_entrypoint` changes.\n- NOW-36 blocked/no-execution is not preserved.\n- NOW-38 schema/validator final gate is missing, not pass, or drifts silently.\n- NOW-37 supported-text final gate is missing, not pass, or drifts silently.\n- The Dramart PDF gap is omitted, normalized away, or treated as resolved.\n- Any prompt candidate uses unsupported PDF semantics, media contents, real asset refs, voice profiles, provider evidence, manual evidence, or operator acceptance.\n- Any artifact contains `final_prompt_text`.\n- Any artifact contains provider execution endpoint, provider job ID, provider file ID, media ID, uploaded asset ID, or manual execution log evidence.\n- Any `@entity` token lacks exactly one valid shot-local ledger row.\n- Any `@entity` token resembles a canonical UID, registry ID, storage path, URL, asset URI, or provider file ID.\n- Any duplicate display name passes without approved local disambiguation.\n- Any ledger row or allowed entity set is treated as canonical UID, real asset binding, accepted overlay, provider evidence, or production acceptance.\n- Any candidate packet lacks source evidence rows.\n- Any future implementation DeepSeek round is skipped, unavailable, timeout, parse fail, or has unresolved high/blocker findings.\n- Any forbidden side-effect counter is missing or nonzero.\n\nForbidden side-effect counters must include:\n\n- `final_prompt_text_count`\n- `provider_payload_execution_count`\n- `provider_job_execution_count`\n- `media_generation_count`\n- `image_generation_count`\n- `audio_generation_count`\n- `tts_generation_count`\n- `video_generation_count`\n- `manual_provider_evidence_count`\n- `operator_evidence_creation_count`\n- `asset_generation_count`\n- `asset_acquisition_count`\n- `asset_upload_count`\n- `asset_import_count`\n- `asset_binding_count`\n- `accepted_uid_decision_count`\n- `rejected_uid_decision_count`\n- `accepted_overlay_write_count`\n- `operator_overlay_write_count`\n- `canonical_uid_writeback_count`\n- `canonical_kg_writeback_count`\n- `raw_kg_writeback_count`\n- `entity_store_writeback_count`\n- `registry_mutation_count`\n- `row_mutation_count`\n- `feedback_intake_count`\n- `repair_execution_count`\n- `replay_action_count`\n- `route_transition_count`\n- `outputs_index_mutation_count`\n- `now36_activation_count`\n- `production_acceptance_count`\n\nEvery counter must remain `0`.\n\nThe future implementation may separately count `draft_prompt_candidate_count`, but that counter does not imply final prompt readiness, provider readiness, manual execution readiness, NOW-36 activation, or production acceptance.\n\n## Drift Checks\n\nThe future implementation must record hashes for:\n\n- this contract;\n- route handoff;\n- NOW-37 supported-text final gate and semantic JSONL inputs;\n- NOW-37 closeout contract;\n- NOW-38 schema/validator final gate and schema artifacts;\n- P2V-22 neutral draft rows/gate/schema as shot/scene/storyboard context authority;\n- P2V-23 prompt readiness package and chapter readiness rows as readiness/held boundary authority;\n- NOW-36 final gate;\n- control-plane files.\n\nThe drift report must fail if any required input disappears, if `next_entrypoint` changes, if NOW-36 blocked/no-execution flags change, if NOW-37/38 final gates are no longer pass, if P2V-22 or P2V-23 authority artifacts drift without an explicit waiver/contract, or if unsupported PDF/media rows disappear without a later explicit extractor/asset contract.\n\n## DeepSeek Advisory Basis\n\nThis contract requires two DeepSeek v4 pro thinking/max advisory rounds before it can be landed:\n\n- Round 1: evaluate whether the prompt-generation precontract safely defines only future review-only draft prompt candidate generation; check evidence inputs, `entity_mention_ledger`, `@entity` validation, Dramart PDF future-debt limits, unsupported fields, validators, drift checks, and side-effect counters.\n- Round 2: critique Round 1 for hidden provider payload execution, final prompt export, asset binding, canonical UID/writeback leakage, route/replay/outputs-index leakage, PDF/OCR leakage, Dramart PDF-specific claim leakage, NOW-39 UI leakage, and NOW-36/production acceptance confusion.\n\nRuntime preference:\n\n- model target: `deepseek-v4-pro`\n- reasoning: `max`\n- timeout: `600` seconds where tooling permits\n- timeout/unavailable/skipped/parse fail must be recorded and cannot be pass basis\n\nDeepSeek remains advisory-only. Its output is not evidence, operator acceptance, route authority, writeback authority, replay authority, outputs-index authority, NOW-36 activation, provider readiness, or production acceptance.\n\n## Control-Plane Closeout Requirements\n\nWhen this contract lands, update:\n\n- `execution_state.json`\n- `phase_acceptance.json`\n- `workflow.json`\n- `workflow_index.json`\n- `retrospective_state.json`\n- `AGENTS.md`\n- `todo.md`\n- `projectreport.md`\n- `docs/midterm_autopilot_prompt.md`\n- `docs/now37_39_route_plan_control_plane_handoff_20260609.md`\n- `patchnote.md`\n\nRequired closeout status:\n\n- `current_status=now38_dramart_seedance_storyboard_prompt_generation_contract_landed_validated`\n- `current_implementation_priority=now38_dramart_seedance_storyboard_prompt_generation_no_writeback_draft_packets`\n- `next_implementation_kind=now38_dramart_seedance_storyboard_prompt_generation_no_writeback_draft_packets`\n\nDo not change `execution_state.json.next_entrypoint`.\n\n## Next Step After This Contract\n\nOnly after this contract lands may the project implement `now38_dramart_seedance_storyboard_prompt_generation_no_writeback_draft_packets`.\n\nThat next implementation is still not final prompt export, not provider payload rendering for execution, not provider execution, not UI implementation, not PDF/OCR extraction, not media or asset work, not canonical writeback, not route transition, not outputs-index mutation, not NOW-36 activation, and not production acceptance.\n\n## Validator Markers\n\nThese exact markers are included for deterministic contract validation:\n\n- contract_before_prompt_generation\n- not provider-ready payloads\n- now36_blocked_no_execution_preserved\n",
  "handoff_excerpt": "# NOW-37/38/39 Route Plan Control-Plane Handoff\n\n更新时间：`2026-06-10T05:31:10+08:00`\n\n## Status\n\nThis document records the operator-approved route direction for the next thread after NOW-36 closeout. It is a control-plane handoff and planning artifact, not an implementation contract and not production authorization.\n\nFormal active route remains `Now-32 / Prompt-Readiness-Manual-Execution-Log-Contract`; `execution_state.json.next_entrypoint` remains `platform_neutral_prompt_readiness_manual_execution_log_contract`.\n\nNOW-36 remains closed as `blocked/no-execution`. NOW-37/38/39 must not create real assets, voice profiles, provider/manual evidence, production acceptance, route transition, accepted overlay, canonical UID/KG/raw KG/entity-store writeback, replay actions, or outputs-index mutation.\n\n## Advisory Basis\n\n- Round 1: `outputs/now37_39_route_plan_deepseek_round1_20260609_0603/consultation_parsed.json`\n  - `parse_status=pass`\n  - `verdict=supports_plan_with_corrections`\n  - `confidence=medium`\n  - high findings: `4`\n- Round 2: `outputs/now37_39_route_plan_deepseek_round2_20260609_0603/consultation_parsed.json`\n  - `parse_status=pass` after deterministic reparse from valid JSON response\n  - process blocker about Round 1 parse gap was superseded after the repair\n- Final Round 2b: `outputs/now37_39_route_plan_deepseek_round2b_20260609_0610/consultation_parsed.json`\n  - `parse_status=pass`\n  - `verdict=round1_supported_after_repair_with_corrections`\n  - `confidence=high`\n  - unresolved high/blocker findings: `0`\n  - remaining required corrections: `0`\n\nDeepSeek is advisory-only. Its output is not evidence, operator acceptance, route authority, writeback authority, provider/manual evidence, replay authority, or outputs-index authority.\n\n## Absorbed Corrections\n\nRound 1 required corrections are absorbed into the next-thread route:\n\n1. NOW-37 must start by landing a detail contract with versioned schemas for `resource_inventory`, `case_cards`, `platform_constraints`, `prompt_patterns`, `anti_patterns`, `absorption_report`, and `resource_ref` evidence chain.\n2. NOW-38 must define an adapter-only shadow `entity_mention_ledger` and `@entity` validator. The ledger is not canonical UID writeback, asset binding, accepted overlay, or entity-store mutation.\n3. NOW-39 must first produce frontend information architecture, page/component contracts, and a control-plane data alignment matrix before UI implementation.\n4. NOW-37 is allowed to start as a post-NOW36 strategy/analysis route only because it preserves NOW-36 blocked/no-execution and does not require real asset/provider/production authority.\n5. NOW-37 first cycle should be bounded: inventory all resources, then pilot extraction on a minimal resource subset before full corpus absorption.\n\n## NOW-37\n\n`now37_resource_case_absorption_read_only`\n\nGoal: repeatedly analyze `/wwwb/aitools/writer/docs/resource` cases and convert them into reusable project knowledge.\n\nInitial resource set:\n\n- `docs/resource/Dramart_标准剧本格式参考_1775308799.pdf`\n- `docs/resource/【对客】Doubao-Seedance-2.0：企业级业务场景指南.zip`\n- `docs/resource/火山剧创优秀短剧作品赏析--动画短片 PV 剧本：《微光巢穴》.zip`\n\nRequired next-thread first step:\n\n- Land a NOW-37 detail contract before implementation.\n- Define extraction schemas, evidence refs, validation rules, and forbidden side-effect counters.\n- Inventory all resources and pilot one bounded extraction before full absorption.\n\nForbidden:\n\n- Provider execution, media generation, asset generation/acquisition/binding, manual/provider/operator evidence, accepted overlay, canonical UID/KG/raw KG/entity-store writeback, draft/held/readiness mutation, feedback/repair/replay execution, route transition, outputs-index mutation, production acceptance.\n\n## NOW-38\n\n`now38_dramart_seedance_storyboard_prompt_adapter_design`\n\nGoal: design Dramart AI / Seedance 2.0 specialized storyboard prompt generation, including `@实体名称` references.\n\nRequired direction:\n\n- Keep canonical screenplay/shooting script platform-neutral.\n- Render Dramart/Seedance prompt packets only in adapter/operator packet layers.\n- Introduce an adapter-only `entity_mention_ledger`.\n- Validate every `@实体名称` against the allowed shot-local entity set and ledger.\n- Do not treat `@实体名称` as accepted UID, real asset binding, provider evidence, or production acceptance.\n\n## NOW-39\n\n`now39_review_ui_redesign_plan`\n\nGoal: redesign the frontend after NOW-37/38 data contracts exist.\n\nRequired direction:\n\n- Plan first; UI implementation later.\n- Produce information architecture, page contracts, component/data contracts, and a control-plane alignment matrix.\n- Required views should cover current stage/gates, resource absorption, prompt lab, entity ledger, evidence/deepseek gates, review queues, run browser, and trace/diff.\n\n## Current Handoff Pointer\n\nCurrent next implementation marker: `now38_dramart_seedance_storyboard_prompt_generation_contract_before_prompt_generation`.\n\nThe original next-thread entrypoint was `now37_resource_case_absorption_detail_contract_next_thread`; that detail contract, the bounded pilot, the continuation decision contract, the supported-text absorption run, the NOW-37 closeout decision contract, the NOW-38 schema/validator contract, and the NOW-38 no-writeback schema/validator implementation are now landed and validated. The next implementation may land a prompt-generation contract before prompt generation only. It must not generate prompts, render provider payloads for execution, run providers, implement UI, run PDF/OCR extraction, create media/assets/evidence, write canonical state, mutate rows, transition routes, mutate outputs indexes, activate NOW-36, or claim production acceptance.\n\n## Post-Handoff Status\n\nUpdated `2026-06-10T01:20:00+08:00`: NOW-37 detail contract is now landed and validated at `docs/now37_resource_case_absorption_detail_contract_20260610.md`.\n\n- Contract DeepSeek Round 1: `outputs/now37_resource_case_absorption_detail_contract_deepseek_round1_20260610_0048/consultation_parsed.json`, parse=`pass`, verdict=`supports_now37_contract`, confidence=`high`, high/blocker=`0`.\n- Contract DeepSeek Round 2: `outputs/now37_resource_case_absorption_detail_contract_deepseek_round2_20260610_0112/consultation_parsed.json`, parse=`pass`, verdict=`round1_supported_no_corrections`, confidence=`high`, high/blocker=`0`.\n- Absorbed correction: deterministic `resource_ref_id` and semantic row ID algorithms use canonical JSON plus SHA-256.\n- Current next implementation marker: `now37_resource_case_absorption_inventory_bounded_pilot_read_only`.\n\nThe next step is no longer to land the detail contract. It is to inventory all `docs/resource` files and then run the smallest deterministic bounded pilot extraction under the contract. The same forbidden side-effect boundaries remain in force.\n\nUpdated `2026-06-10T02:40:00+08:00`: NOW-37 inventory plus bounded pilot is now landed and validated.\n\n- Source: `src/novel2video/now37_resource_case_absorption.py`\n- Runner: `scripts/run_now37_resource_case_absorption.py`\n- DeepSeek runner: `scripts/run_now37_resource_case_absorption_deepseek_consultation.py`\n- Tests: `tests/test_now37_resource_case_absorption.py`\n- Final run: `outputs/now37_resource_case_absorption_inventory_bounded_pilot_final2_20260610_0238`\n- Final gate: `outputs/now37_resource_case_absorption_inventory_bounded_pilot_final2_20260610_0238/NOW37_RESOURCE_gate.json`, pass=`true`, validator=`pass`, status=`now37_resource_case_absorption_inventory_bounded_pilot_read_only_landed_validated`\n- Implementation DeepSeek Round 1: `outputs/now37_resource_case_absorption_deepseek_round1_20260610_0232/consultation_parsed.json`, parse=`pass`, verdict=`supports_with_required_corrections`, confidence=`high`, high/blocker=`0`\n- Implementation DeepSeek Round 2: `outputs/now37_resource_case_absorption_deepseek_round2_20260610_0234/consultation_parsed.json`, parse=`pass`, verdict=`round1_supported_with_corrections`, confidence=`high`, high/blocker=`0`\n- Inventory counts: top-level resources=`3`, container members=`74`, derived text units=`1`, inventory rows=`78`\n- Pilot selected: `docs/resource/火山剧创优秀短剧作品赏析--动画短片 PV 剧本：《微光巢穴》.zip` member `火山剧创优秀短剧作品赏析--动画短片 PV 剧本：《微光巢穴》.md`\n- Semantic pilot rows: case cards=`1`, platform constraints=`1`, prompt patterns=`2`, anti-patterns=`1`, resource refs=`5`\n- Drift status=`pass`; forbidden side-effect counters all `0`; `execution_state.json.next_entrypoint` unchanged; NOW-36 blocked/no-execution preserved.\n\nThe next step is no longer to run the bounded pilot. It is to land `now37_resource_case_absorption_full_corpus_continuation_decision_contract` before any full corpus absorption. Do not jump directly to full corpus extraction, NOW-38 prompt generation, or NOW-39 UI implementation.\n\nUpdated `2026-06-10T04:13:00+08:00`: NOW-37 full-corpus continuation decision contract is now landed and validated.\n\n- Contract: `docs/now37_resource_case_absorption_full_corpus_continuation_decision_contract_20260610.md`\n- Contract DeepSeek Round 1: `outputs/now37_full_corpus_continuation_decision_contract_deepseek_round1_20260610_0340/consultation_parsed.json`, parse=`pass`, verdict=`supports_continuation_contract`, confidence=`high`, high/blocker=`0`, low findings=`9`\n- Contract DeepSeek Round 2: `outputs/now37_full_corpus_continuation_decision_contract_deepseek_round2_20260610_0342/consultation_parsed.json`, parse=`pass`, verdict=`round1_supported_no_corrections`, confidence=`high`, high/blocker=`0`, low findings=`6`\n- Decision: `supported_text_corpus_absorption_authorized=true`; `entire_resource_corpus_absorption_authorized=false`; `unsupported_pdf_or_binary_semantic_absorption_authorized=false`\n- At the `2026-06-10T04:13:00+08:00` update, next implementation marker was `now37_resource_case_absorption_supported_text_corpus_absorption_no_writeback`.\n\nThat update authorized the now-completed supported-text no-writeback run: re-inventory all `docs/resource`, semantically absorb the two zip markdown text units, keep the Dramart PDF as unsupported/gap while no local PDF extractor exists, keep binary/media members metadata-only, enforce `resource_ref.excerpt` maximum `180` Unicode characters, run DeepSeek implementation Round 1/2, and produce a final read-only gate. The `2026-06-10T04:43:00+08:00` update below supersedes this as the current next-step pointer. This did not authorize PDF/OCR extraction, complete resource-corpus absorption, NOW-38 prompt generation, NOW-39 UI implementation, provider/manual execution, media generation, asset binding, canonical writeback, route transition, outputs-index mutation, NOW-36 activation, or production acceptance.\n\nUpdated `2026-06-10T04:43:00+08:00`: NOW-37 supported text corpus absorption no-writeback is now landed and validated.\n\n- Source: `src/novel2video/now37_resource_case_absorption.py`\n- Runner: `scripts/run_now37_resource_case_absorption.py`\n- DeepSeek runner: `scripts/run_now37_resource_case_absorption_deepseek_consultation.py`\n- Tests: `tests/test_now37_resource_case_absorption.py`\n- Final run: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442`\n- Final gate: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_gate.json`, pass=`true`, validator=`pass`, gate_status=`now37_resource_case_absorption_supported_text_corpus_absorption_pass_no_writeback`, status=`now37_resource_case_absorption_supported_text_corpus_absorption_no_writeback_landed_validated`\n- Implementation DeepSeek Round 1: `outputs/now37_resource_case_absorption_supported_text_corpus_deepseek_round1_20260610_0438/consultation_parsed.json`, parse=`pass`, verdict=`supports_now37_resource_case_absorption_supported_text_corpus`, confidence=`high`, high/blocker=`0`, low findings=`1`\n- Implementation DeepSeek Round 2: `outputs/now37_resource_case_absorption_supported_text_corpus_deepseek_round2_20260610_0440/consultation_parsed.json`, parse=`pass`, verdict=`round1_supported_with_corrections`, confidence=`high`, high/blocker=`0`, low findings=`1`\n- Counts: top-level resources=`3`, container members=`74`, inventory rows=`79`, text units=`2`, semantic text units=`2`, derived text units=`2`, case cards=`2`, platform constraints=`2`, prompt patterns=`4`, anti-patterns=`2`, resource refs=`10`, unsupported gap rows=`73`, blocked PDF resources=`1`, metadata-only binary/media members=`72`\n- Completion semantics: `supported_text_corpus_absorption_completed=true`; `entire_resource_corpus_absorption_completed=false`\n- Drift status=`pass`; forbidden side-effect counters all `0`; `execution_state.json.next_entrypoint` unchanged; NOW-36 blocked/no-execution preserved.\n- Current next implementation marker: `now37_resource_case_absorption_closeout_decision_contract`\n\nThe next step is no longer supported text corpus absorption. It is to land `now37_resource_case_absorption_closeout_decision_contract`, deciding whether the remaining Dramart PDF gap blocks NOW-38 or is recorded as future extractor debt. Do not enter NOW-38 adapter prompt design, NOW-38 prompt generation, NOW-39 UI implementation, PDF/OCR extraction, provider/manual execution, media generation, asset binding, canonical writeback, route transition, outputs-index mutation, NOW-36 activation, or production acceptance before that closeout decision is landed.\n\nUpdated `2026-06-10T05:00:00+08:00`: NOW-37 closeout decision contract is now landed and validated.\n\n- Contract: `docs/now37_resource_case_absorption_closeout_decision_contract_20260610.md`\n- Runner: `scripts/run_now37_resource_case_absorption_closeout_decision_contract_deepseek_consultation.py`\n- DeepSeek Round 1: `outputs/now37_resource_case_absorption_closeout_decision_contract_deepseek_round1_20260610_0458/consultation_parsed.json`, parse=`pass`, verdict=`supports_closeout_contract`, confidence=`high`, high/blocker=`0`, findings=`0`\n- DeepSeek Round 2: `outputs/now37_resource_case_absorption_closeout_decision_contract_deepseek_round2_20260610_0459/consultation_parsed.json`, parse=`pass`, verdict=`round1_supported_no_corrections`, confidence=`high`, high/blocker=`0`, findings=`0`\n- Decision: `dramart_pdf_gap_disposition=future_extractor_debt`; `dramart_pdf_gap_blocks_now38_schema_validator_contract=false`; `dramart_pdf_gap_blocks_now38_prompt_generation=true`; `dramart_pdf_gap_blocks_dramart_pdf_specific_renderer_claims=true`\n- Current next implementation marker: `now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_contract`\n\nThe next step is to land the NOW-38 adapter schema/validator contract only. That contract must define adapter-only `entity_mention_ledger`, `@entity` validator, source coverage matrix, unsupported-source report, validators, drift checks, DeepSeek advisory basis, and no-writeback/no-provider boundaries. It must not generate prompts, render provider payloads for execution, run providers, implement UI, run PDF/OCR extraction, create media/assets/evidence, write canonical state, mutate rows, transition routes, mutate outputs indexes, activate NOW-36, or claim production acceptance.\n\nUpdated `2026-06-10T05:12:00+08:00`: NOW-38 adapter schema/validator contract is now landed and validated.\n\n- Contract: `docs/now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_contract_20260610.md`\n- Runner: `scripts/run_now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_contract_deepseek_consultation.py`\n- DeepSeek Round 1: `outputs/now38_adapter_schema_validator_contract_deepseek_round1_20260610_0508/consultation_parsed.json`, parse=`pass`, verdict=`supports_now38_schema_validator_contract`, confidence=`high`, high/blocker=`0`, findings=`0`\n- DeepSeek Round 2: `outputs/now38_adapter_schema_validator_contract_deepseek_round2_20260610_0510/consultation_parsed.json`, parse=`pass`, verdict=`round1_supported_no_corrections`, confidence=`high`, high/blocker=`0`, findings=`0`\n- Current next implementation marker: `now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_no_writeback`\n\nThe next step is no longer to land the NOW-38 adapter schema/validator contract. It is to implement no-writeback schema/validator artifacts under the landed contract: `NOW38_ADAPTER_input.json`, schema, source coverage matrix, adapter-only `entity_mention_ledger`, `@entity` validator spec/fixtures, storyboard prompt packet schema, unsupported reports, validation/drift reports, rollback/replay plans, review HTML, manifest, and final gate. This still does not authorize prompt generation, provider payload execution, provider execution, UI implementation, PDF/OCR extraction, media/assets/evidence, canonical writeback, row mutation, route transition, outputs-index mutation, NOW-36 activation, or production acceptance.\n\nUpdated `2026-06-10T05:31:10+08:00`: NOW-38 adapter schema/validator no-writeback implementation is now landed and validated.\n\n- Source: `src/novel2video/now38_adapter_schema_validator.py`\n- Runner: `scripts/run_now38_dramart_seedance_storyboard_prompt_adapter_schema_validator.py`\n- DeepSeek runner: `scripts/run_now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_deepseek_consultation.py`\n- Tests: `tests/test_now38_adapter_schema_validator.py`\n- Backup: `backups/20260610_051934_now38_adapter_schema_validator_no_writeback_preedit`\n- Pending run: `outputs/now38_adapter_schema_validator_pending_20260610_0525`, blocked only on missing implementation DeepSeek advisory before final rerun.\n- Implementation DeepSeek Round 1: `outputs/now38_adapter_schema_validator_deepseek_round1_20260610_0526/consultation_parsed.json`, parse=`pass`, verdict=`supports_with_required_corrections`, confidence=`high`, low findings=`1`, high/blocker=`0`.\n- Implementation DeepSeek Round 2: `outputs/now38_adapter_schema_validator_deepseek_round2_20260610_0527/consultation_parsed.json`, parse=`pass`, verdict=`round1_supported_with_corrections`, confidence=`high`, low findings=`1`, high/blocker=`0`.\n- Final run: `outputs/now38_adapter_schema_validator_final_20260610_0529`\n- Final gate: `outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_gate.json`, pass=`true`, validator=`pass`, drift=`pass`, gate_status=`now38_adapter_schema_validator_no_writeback_pass`\n- Counts: coverage rows=`10`, ledger examples=`2`, validator fixtures=`6`, unsupported sources=`2`, unsupported fields=`6`\n- Coverage: supported text evidence=`true`, Dramart PDF `future_extractor_debt=true`, metadata-only media rows=`true`\n- Forbidden side-effect counters all `0`; `execution_state.json.next_entrypoint` unchanged; NOW-36 blocked/no-execution preserved.\n- Current next implementation marker: `now38_dramart_seedance_storyboard_prompt_generation_contract_before_prompt_generation`\n\nThe next step is no longer to implement NOW-38 schema/validator artifacts. It is to land a prompt-generation contract before any prompt generation. That contract must define future prompt-generation inputs, adapter-only `entity_mention_ledger` usage, `@entity` validation, Dramart PDF future-debt limits, validators, drift checks, DeepSeek Round 1/2 advisory basis, forbidden side-effect counters, and no-provider/no-media/no-asset/no-writeback/no-route/no-production boundaries. This still does not authorize prompt generation, provider payload execution, provider execution, UI implementation, PDF/OCR extraction, media/assets/evidence, canonical writeback, row mutation, route transition, outputs-index mutation, NOW-36 activation, or production acceptance.\n",
  "now37_closeout_contract_excerpt": "# NOW-37 Resource Case Absorption Closeout Decision Contract\n\n更新时间：`2026-06-10T04:54:00+08:00`\n\n## Status\n\n- contract id: `now37_resource_case_absorption_closeout_decision_contract`\n- stage id: `now37_resource_case_absorption_read_only`\n- implementation marker before this contract: `now37_resource_case_absorption_closeout_decision_contract`\n- expected next implementation marker after this contract lands: `now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_contract`\n- active route remains: `platform_neutral_prompt_readiness_manual_execution_log_contract`\n- active route authority: `execution_state.json.next_entrypoint`\n- status: `now37_resource_case_absorption_closeout_decision_contract_landed_validated`\n- DeepSeek Round 1: `outputs/now37_resource_case_absorption_closeout_decision_contract_deepseek_round1_20260610_0458/consultation_parsed.json`, parse=`pass`, verdict=`supports_closeout_contract`, confidence=`high`, high/blocker=`0`\n- DeepSeek Round 2: `outputs/now37_resource_case_absorption_closeout_decision_contract_deepseek_round2_20260610_0459/consultation_parsed.json`, parse=`pass`, verdict=`round1_supported_no_corrections`, confidence=`high`, high/blocker=`0`\n- absorbed advisory correction: none; both rounds returned no findings\n\nThis contract closes the NOW-37 supported-text absorption lane and decides how the remaining unsupported Dramart PDF gap affects NOW-38. It does not run extraction, does not run PDF/OCR, does not generate Dramart/Seedance prompts, does not implement UI, and does not create provider/media/asset/writeback/route/production authority.\n\n## Decision\n\nDecision:\n\n- `now37_supported_text_absorption_closed=true`\n- `dramart_pdf_gap_disposition=future_extractor_debt`\n- `dramart_pdf_gap_blocks_now38_schema_validator_contract=false`\n- `dramart_pdf_gap_blocks_now38_prompt_generation=true`\n- `dramart_pdf_gap_blocks_dramart_pdf_specific_renderer_claims=true`\n- `next_authorized_contract=now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_contract`\n\nReason:\n\nNOW-37 has completed every currently supported text-extractable unit in `docs/resource`: the two zip markdown units. The remaining top-level Dramart PDF is real and relevant, but it is currently unsupported because no local PDF text extractor is authorized or available for this route. That gap should not block a NOW-38 data-contract and validator design pass, because NOW-38 can define adapter-layer boundaries, an adapter-only `entity_mention_ledger`, and an `@entity` validator using the supported-text evidence and the existing route plan. The gap must block any claim that Dramart PDF-specific format rules have been absorbed, any PDF-derived renderer fields, any production-ready Dramart adapter profile, any generated provider prompt packets, and any provider/manual execution.\n\n## Evidence Basis\n\nAuthoritative inputs:\n\n- detail contract: `docs/now37_resource_case_absorption_detail_contract_20260610.md`\n- full-corpus continuation decision contract: `docs/now37_resource_case_absorption_full_corpus_continuation_decision_contract_20260610.md`\n- route handoff: `docs/now37_39_route_plan_control_plane_handoff_20260609.md`\n- NOW-36 final gate: `outputs/now36_real_asset_evidence_activation_decision_final_20260609_0413/NOW36_ACTIVATION_DECISION_gate.json`\n- NOW-37 bounded pilot final gate: `outputs/now37_resource_case_absorption_inventory_bounded_pilot_final2_20260610_0238/NOW37_RESOURCE_gate.json`\n- NOW-37 supported-text final run: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442`\n- NOW-37 supported-text final gate: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_gate.json`\n- NOW-37 supported-text report: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_absorption_report.json`\n- NOW-37 supported-text gap register: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_gap_register.jsonl`\n- NOW-37 supported-text resource refs: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_resource_ref_index.jsonl`\n- NOW-37 supported-text case cards: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_case_cards.jsonl`\n- NOW-37 supported-text platform constraints: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_platform_constraints.jsonl`\n- NOW-37 supported-text prompt patterns: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_prompt_patterns.jsonl`\n- NOW-37 supported-text anti-patterns: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_anti_patterns.jsonl`\n- NOW-37 supported-text DeepSeek Round 1: `outputs/now37_resource_case_absorption_supported_text_corpus_deepseek_round1_20260610_0438/consultation_parsed.json`\n- NOW-37 supported-text DeepSeek Round 2: `outputs/now37_resource_case_absorption_supported_text_corpus_deepseek_round2_20260610_0440/consultation_parsed.json`\n- current control plane: `AGENTS.md`, `execution_state.json`, `phase_acceptance.json`, `workflow.json`, `workflow_index.json`, `retrospective_state.json`, `todo.md`, `projectreport.md`, `docs/midterm_autopilot_prompt.md`, `patchnote.md`\n\nSupported-text facts:\n\n- final gate `pass=true`\n- validator `pass`\n- status `now37_resource_case_absorption_supported_text_corpus_absorption_no_writeback_landed_validated`\n- `absorption_mode=supported_text_corpus`\n- top-level resources `3`\n- container members `74`\n- inventory rows `79`\n- text units `2`\n- semantic text units `2`\n- derived text units `2`\n- case cards `2`\n- platform constraints `2`\n- prompt patterns `4`\n- anti-patterns `2`\n- resource refs `10`\n- gap register rows `73`\n- blocked PDF resources `1`\n- metadata-only binary/media members `72`\n- `supported_text_corpus_absorption_completed=true`\n- `entire_resource_corpus_absorption_completed=false`\n- drift `pass`\n- forbidden side-effect counters all `0`\n- `execution_state.json.next_entrypoint` unchanged\n- NOW-36 blocked/no-execution preserved\n\nGap facts:\n\n- `gap_type=unsupported_pdf_resource` count `1`\n- PDF path: `docs/resource/Dramart_标准剧本格式参考_1775308799.pdf`\n- PDF current handling: `inventory_or_metadata_only`\n- PDF semantic absorption status: `blocked_or_metadata_only_no_writeback`\n- PDF future unblock requirement: `separate explicit contract and validation gate`\n- binary/media gap count `72`\n- binary/media members remain metadata-only, not assets and not evidence\n\n## Closeout Semantics\n\nNOW-37 is closed only for the supported text corpus currently available to the route. The closeout does not mean:\n\n- complete `docs/resource` semantic absorption;\n- PDF/OCR extraction success;\n- Dramart standard-format rules absorbed from the PDF;\n- provider prompt generation authorization;\n- provider/manual execution authorization;\n- media generation authorization;\n- asset generation/acquisition/binding authorization;\n- accepted/operator overlay writeback;\n- canonical UID/KG/raw KG/entity-store writeback;\n- draft/held/readiness row mutation;\n- feedback/repair/replay;\n- route transition;\n- outputs-index mutation;\n- NOW-36 activation;\n- production readiness or production acceptance.\n\nThe unsupported Dramart PDF gap is carried forward as `future_extractor_debt`. It must be visible in NOW-38 as an input limitation and validator warning source, not hidden or normalized away.\n\n## Next Contract Authorization\n\nAfter this closeout contract lands with two DeepSeek parse-pass rounds and no unresolved high/blocker findings, the next implementation may land only:\n\n`now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_contract`\n\nThat NOW-38 contract may define:\n\n- adapter-only prompt packet and storyboard prompt data contracts;\n- adapter-only `entity_mention_ledger` schema;\n- `@entity` validator semantics against shot-local allowed entity sets;\n- source coverage matrix that separates supported NOW-37 text evidence from missing Dramart PDF evidence;\n- unsupported-field and unsupported-source reports;\n- deterministic validators, drift checks, no-writeback side-effect counters, and review surfaces;\n- DeepSeek Round 1/2 advisory requirements for NOW-38 design.\n\nThat NOW-38 contract must not:\n\n- generate final prompts;\n- render provider payloads for execution;\n- execute provider jobs or manual provider workflows;\n- generate or bind images, audio, TTS, video, voice profiles, or reference assets;\n- treat `@实体名称` as canonical UID, real asset binding, accepted overlay, provider evidence, or production acceptance;\n- write accepted/operator overlay, canonical UID/KG/raw KG/entity-store, draft/held/readiness rows, replay, route state, or outputs indexes;\n- claim Dramart PDF-specific format support while the PDF gap remains unresolved;\n- claim production readiness, provider readiness, or NOW-36 activation.\n\n## Validators For This Closeout\n\nThis closeout contract must not be marked landed unless:\n\n- `execution_state.json.next_entrypoint` remains `platform_neutral_prompt_readiness_manual_execution_log_contract`.\n- NOW-36 remains `blocked/no-execution`.\n- Supported-text final gate exists and has `pass=true`.\n- Supported-text validation has `validator_status=pass`, no failures, and no warnings.\n- Supported-text implementation DeepSeek Round 1/2 are parse pass with no high/blocker findings.\n- Gap register contains exactly one `unsupported_pdf_resource` row for the Dramart PDF and records a separate explicit contract requirement before semantic PDF extraction.\n- Gap register keeps binary/media members metadata-only.\n- `supported_text_corpus_absorption_completed=true`.\n- `entire_resource_corpus_absorption_completed=false`.\n- Forbidden side-effect counters remain present and all zero.\n- This contract has DeepSeek Round 1/2 consultation outputs with parse pass and no unresolved high/blocker findings.\n- No control-plane field grants provider/media/asset/writeback/route/NOW-36/production authority.\n\n## DeepSeek Advisory Basis\n\nThis closeout decision requires two DeepSeek v4 pro thinking/max advisory rounds before it can be landed:\n\n- Round 1: evaluate whether treating the Dramart PDF gap as future extractor debt, while allowing only the NOW-38 schema/validator contract, is safe and correctly bounded.\n- Round 2: critique Round 1 for hidden overreach, hallucination, unsupported NOW-38 authorization, PDF/OCR leakage, prompt-generation leakage, provider/media/asset/writeback leakage, route/replay/outputs-index leakage, and NOW-36/production acceptance confusion.\n\nRuntime preference:\n\n- model target: `deepseek-v4-pro`\n- reasoning: `max`\n- timeout: `600` seconds where tooling permits\n- timeout/unavailable/skipped/parse fail must be recorded and cannot be pass basis\n\nDeepSeek remains advisory-only. Its output is not evidence, operator acceptance, route authority, writeback authority, replay authority, outputs-index authority, NOW-36 activation, provider readiness, or production acceptance.\n\n## Control-Plane Closeout Requirements\n\nWhen this contract lands, update:\n\n- `execution_state.json`\n- `phase_acceptance.json`\n- `workflow.json`\n- `workflow_index.json`\n- `retrospective_state.json`\n- `AGENTS.md`\n- `todo.md`\n- `projectreport.md`\n- `docs/midterm_autopilot_prompt.md`\n- `docs/now37_39_route_plan_control_plane_handoff_20260609.md`\n- `patchnote.md`\n\nRequired closeout status:\n\n- `current_status=now37_resource_case_absorption_closeout_decision_contract_landed_validated`\n- `current_implementation_priority=now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_contract`\n- `next_implementation_kind=now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_contract`\n\nDo not change `execution_state.json.next_entrypoint`.\n\n## Next Step After This Contract\n\nOnly after this contract lands may the project proceed to the NOW-38 schema/validator contract. It is still not authorized to generate prompts, build the frontend, run providers, create assets, bind assets, write canonical state, mutate rows, transition routes, mutate outputs indexes, activate NOW-36, or claim production acceptance.\n",
  "now38_schema_contract_excerpt": "# NOW-38 Dramart/Seedance Storyboard Prompt Adapter Schema/Validator Contract\n\n更新时间：`2026-06-10T05:12:00+08:00`\n\n## Status\n\n- contract id: `now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_contract`\n- stage id: `now38_dramart_seedance_storyboard_prompt_adapter_design`\n- implementation marker before this contract: `now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_contract`\n- expected next implementation marker after this contract lands: `now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_no_writeback`\n- active route remains: `platform_neutral_prompt_readiness_manual_execution_log_contract`\n- active route authority: `execution_state.json.next_entrypoint`\n- status: `now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_contract_landed_validated`\n- DeepSeek Round 1: `outputs/now38_adapter_schema_validator_contract_deepseek_round1_20260610_0508/consultation_parsed.json`\n- DeepSeek Round 2: `outputs/now38_adapter_schema_validator_contract_deepseek_round2_20260610_0510/consultation_parsed.json`\n- DeepSeek parse status: `pass / pass`\n- DeepSeek verdicts: `supports_now38_schema_validator_contract` / `round1_supported_no_corrections`\n- DeepSeek confidence: `high / high`\n- unresolved high/blocker findings: `0`\n- absorbed corrections: `[]`\n\nThis contract defines the data-contract and validator layer for future Dramart AI / Seedance 2.0 storyboard prompt adapter work. It does not generate prompts, does not render provider payloads for execution, does not execute provider jobs, does not implement UI, and does not create provider/media/asset/writeback/route/production authority.\n\nThis landed contract authorizes only the next no-writeback implementation marker: `now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_no_writeback`.\n\n## Purpose\n\nNOW-38 turns NOW-37 resource absorption knowledge into adapter-layer contracts for later prompt rendering. The key design issue is entity mention syntax such as `@实体名称`: it must be useful for Dramart/Seedance-style adapter packets without becoming a canonical entity UID, real asset binding, accepted overlay, provider evidence, or production acceptance.\n\nThis contract authorizes only a future no-writeback implementation that emits deterministic schema/validator artifacts. The implementation may produce specs, matrices, validator fixtures, and review surfaces. It must not generate final prompts or provider-executable payloads.\n\n## Evidence Basis\n\nAuthoritative inputs:\n\n- route handoff: `docs/now37_39_route_plan_control_plane_handoff_20260609.md`\n- NOW-37 detail contract: `docs/now37_resource_case_absorption_detail_contract_20260610.md`\n- NOW-37 continuation contract: `docs/now37_resource_case_absorption_full_corpus_continuation_decision_contract_20260610.md`\n- NOW-37 supported-text final gate: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_gate.json`\n- NOW-37 supported-text report: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_absorption_report.json`\n- NOW-37 supported-text case cards: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_case_cards.jsonl`\n- NOW-37 supported-text platform constraints: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_platform_constraints.jsonl`\n- NOW-37 supported-text prompt patterns: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_prompt_patterns.jsonl`\n- NOW-37 supported-text anti-patterns: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_anti_patterns.jsonl`\n- NOW-37 supported-text resource refs: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_resource_ref_index.jsonl`\n- NOW-37 supported-text gap register: `outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_gap_register.jsonl`\n- NOW-37 closeout decision contract: `docs/now37_resource_case_absorption_closeout_decision_contract_20260610.md`\n- NOW-37 closeout DeepSeek Round 1: `outputs/now37_resource_case_absorption_closeout_decision_contract_deepseek_round1_20260610_0458/consultation_parsed.json`\n- NOW-37 closeout DeepSeek Round 2: `outputs/now37_resource_case_absorption_closeout_decision_contract_deepseek_round2_20260610_0459/consultation_parsed.json`\n- NOW-36 final gate: `outputs/now36_real_asset_evidence_activation_decision_final_20260609_0413/NOW36_ACTIVATION_DECISION_gate.json`\n- current control plane: `AGENTS.md`, `execution_state.json`, `phase_acceptance.json`, `workflow.json`, `workflow_index.json`, `retrospective_state.json`, `todo.md`, `projectreport.md`, `docs/midterm_autopilot_prompt.md`, `patchnote.md`\n\nSource basis facts:\n\n- NOW-37 supported text corpus has `supported_text_corpus_absorption_completed=true`.\n- NOW-37 entire resource corpus remains incomplete: `entire_resource_corpus_absorption_completed=false`.\n- Dramart PDF gap disposition is `future_extractor_debt`.\n- Dramart PDF gap does not block this schema/validator contract.\n- Dramart PDF gap blocks prompt generation, PDF-derived Dramart renderer claims, production-ready Dramart profiles, provider execution, and production acceptance.\n- Binary/media members remain metadata-only and are not assets or evidence.\n- NOW-36 remains blocked/no-execution.\n\n## Scope Boundary\n\nAllowed for the future implementation:\n\n- read current NOW-37 artifacts and control-plane files;\n- define adapter-only schemas for storyboard prompt packets;\n- define `entity_mention_ledger` schema and deterministic row IDs;\n- define `@entity` validator rules and fixtures;\n- define a source coverage matrix that separates supported-text evidence, future extractor debt, and unsupported/media-only inputs;\n- define unsupported-source and unsupported-field reports;\n- define validator reports, drift checks, rollback/replay information plans, review HTML, and final gate semantics;\n- run DeepSeek v4 pro thinking/max Round 1/2 advisory for the implementation;\n- keep every artifact no-writeback and non-executable.\n\nForbidden:\n\n- generating final prompts;\n- rendering provider payloads for execution;\n- executing provider jobs or manual provider workflows;\n- generating images, audio, TTS, video, voice profiles, reference assets, thumbnails, embeddings, previews, or media derivatives;\n- acquiring, importing, uploading, or binding assets;\n- creating provider/manual/operator evidence;\n- accepting/rejecting canonical UID decisions;\n- writing accepted/operator overlay, canonical UID, canonical KG, raw KG, registry, entity store, draft rows, held rows, readiness rows, route state, replay state, or outputs indexes;\n- feedback intake, repair execution, or replay execution;\n- PDF/OCR extraction or PDF-derived Dramart renderer claims;\n- NOW-39 UI implementation;\n- NOW-36 activation, provider readiness, production readiness, or production acceptance.\n\nDeepSeek/LLM advisory remains advisory-only. It is not evidence, operator acceptance, route authority, writeback authority, replay authority, outputs-index authority, NOW-36 activation, provider readiness, or production acceptance.\n\n## Required Output Artifacts For Future Implementation\n\nThe future no-writeback implementation must write a fresh output run using the `NOW38_ADAPTER_*` prefix:\n\n- `NOW38_ADAPTER_input.json`\n- `NOW38_ADAPTER_schema.json`\n- `NOW38_ADAPTER_source_coverage_matrix.jsonl`\n- `NOW38_ADAPTER_entity_mention_ledger_schema.json`\n- `NOW38_ADAPTER_entity_mention_ledger_examples.jsonl`\n- `NOW38_ADAPTER_at_entity_validator_spec.json`\n- `NOW38_ADAPTER_at_entity_validator_fixtures.jsonl`\n- `NOW38_ADAPTER_storyboard_prompt_packet_schema.json`\n- `NOW38_ADAPTER_unsupported_source_report.jsonl`\n- `NOW38_ADAPTER_unsupported_field_report.jsonl`\n- `NOW38_ADAPTER_validation_report.json`\n- `NOW38_ADAPTER_drift_report.json`\n- `NOW38_ADAPTER_rollback_plan.json`\n- `NOW38_ADAPTER_replay_plan.json`\n- `NOW38_ADAPTER_gate.json`\n- `NOW38_ADAPTER_review.html`\n- `manifest.json`\n\nEvery artifact must include or inherit:\n\n- `artifact_authority_class=now38_adapter_schema_validator_no_writeback`\n- `adapter_layer_only=true`\n- `schema_validator_only=true`\n- `prompt_generation_allowed=false`\n- `provider_payload_execution_allowed=false`\n- `provider_manual_execution_allowed=false`\n- `media_generation_allowed=false`\n- `asset_generation_or_acquisition_allowed=false`\n- `asset_binding_allowed=false`\n- `accepted_overlay_writeback_allowed=false`\n- `canonical_uid_writeback_allowed=false`\n- `canonical_kg_writeback_allowed=false`\n- `raw_kg_writeback_allowed=false`\n- `entity_store_writeback_allowed=false`\n- `row_mutation_allowed=false`\n- `feedback_repair_replay_allowed=false`\n- `route_transition_allowed=false`\n- `outputs_index_mutation_allowed=false`\n- `now36_activation_allowed=false`\n- `production_acceptance_claimed=false`\n- `deepseek_advisory_only=true`\n\n## Schema: Source Coverage Matrix\n\n`NOW38_ADAPTER_source_coverage_matrix.jsonl` must contain one row per source basis category.\n\nRequired fields:\n\n- `coverage_row_id`\n- `source_family`: `now37_supported_text | now37_gap_register | route_handoff | control_plane | now36_gate`\n- `source_artifact_path`\n- `source_artifact_sha256`\n- `source_record_ref`\n- `coverage_status`: `supported_text_evidence | future_extractor_debt | metadata_only | control_boundary | unavailable`\n- `applies_to`: `seedance_schema | dramart_schema | entity_mention_ledger | at_entity_validator | unsupported_field_report | review_surface`\n- `allowed_use`\n- `blocked_use`\n- `risk_flags`\n- `review_status=pending_future_review_no_writeback`\n- no-writeback boundary metadata\n\nRules:\n\n- The Dramart PDF row must have `coverage_status=future_extractor_debt`.\n- The Dramart PDF row must block `dramart_pdf_specific_renderer_claims`, `prompt_generation`, `provider_execution`, and `production_acceptance`.\n- Supported markdown rows may inform schema design but not final prompt text.\n- Binary/media rows must remain `metadata_only`.\n\n## Schema: Entity Mention Ledger\n\n`NOW38_ADAPTER_entity_mention_ledger_schema.json` defines an adapter-only ledger, not a canonical entity store.\n\nRequired logical fields:\n\n- `ledger_entry_id`\n- `adapter_packet_id`\n- `shot_ref_id`\n- `scene_ref_id`\n- `local_entity_key`\n- `entity_display_name`\n- `mention_token`\n- `allowed_scope`: `shot | scene | packet`\n- `source_allowed_entity_set_ref`\n- `source_context_ref_ids`\n- `source_coverage_row_ids`\n- `ambiguity_status`: `unambiguous | duplicate_display_name | requires_local_disambiguation | blocked`\n- `disambiguation_label`\n- `validator_status`: `valid | blocked | needs_review`\n- `review_status=pending_future_review_no_writeback`\n- no-writeback boundary metadata\n\nRules:\n\n- `mention_token` must be exactly `@` plus the allowed display name or approved local disambiguation label.\n- `local_entity_key` is local to the adapter packet. It is not a canonical UID.\n- Ledger rows must not create or mutate canonical UID, registry, KG, raw KG, entity store, accepted overlay, or assets.\n- Ledger rows must not include real asset refs, voice profiles, provider evidence, or production acceptance.\n- Duplicate display names must be blocked or disambiguated locally before a mention can validate.\n- The ledger may carry read-only source/context refs, but those refs do not become writeback authority.\n\n## Validator: @entity\n\n`NOW38_ADAPTER_at_entity_validator_spec.json` must define deterministic checks:\n\n- every `@...` token in an adapter-layer prompt field must match exactly one valid ledger row in the shot-local allowed set;\n- no `@...` token may reference an entity outside the shot-local allowed set;\n- no token may look like a canonical UID, registry ID, asset URI, provider file ID, URL, or storage path;\n- no duplicate display name may pass without approved local disambiguation;\n- every ledger row used by a token must cite source coverage rows;\n- every mention must remain adapter-layer only and must not be written into canonical screenplay, KG, registry, accepted overlay, or asset binding records;\n- invalid mentions must emit deterministic validator errors with row IDs and field paths;\n- validator fixtures must include pass, duplicate-name fail, missing-ledger fail, out-of-scope fail, canonical-UID-like fail, and asset-ref-like fail cases.\n\n## Schema: Storyboard Prompt Packet\n\n`NOW38_ADAPTER_storyboard_prompt_packet_schema.json` may define fields for future adapter packet structure, but it must not contain real generated prompts.\n\nAllowed schema families:\n\n- `adapter_packet_id`\n- `provider_family`: `dramart | seedance | shared_adapter_schema`\n- `source_coverage_row_ids`\n- `shot_ref_id`\n- `scene_ref_id`\n- `storyboard_slot_refs`\n- `entity_mention_ledger_refs`\n- `allowed_entity_mentions`\n- `prompt_field_contracts`\n- `negative_prompt_field_contracts`\n- `unsupported_source_refs`\n- `unsupported_field_refs`\n- `validator_profile_refs`\n- `review_status=pending_future_review_no_writeback`\n- no-writeback boundary metadata\n\nRules:\n\n- The schema can describe fields and constraints, not final prompt prose.\n- Provider-specific syntax is allowed only as contract metadata for adapter-layer validation.\n- Seedance-supported guidance may be sourced from NOW-37 supported text evidence.\n- Dramart PDF-specific syntax must be blocked or marked unknown until a future extractor contract resolves the PDF gap.\n\n## Validators\n\nThe future implementation gate must fail if:\n\n- `execution_state.json.next_entrypoint` changes.\n- NOW-36 blocked/no-execution is not preserved.\n- Required NOW-37 artifacts or closeout decision inputs are missing or drift silently.\n- The Dramart PDF gap is omitted from source coverage.\n- Any artifact claims Dramart PDF-specific format support.\n- Any artifact includes generated final prompt text.\n- Any artifact renders provider payloads for execution.\n- Any `@entity` mention validates without a ledger row.\n- Any ledger row is treated as canonical UID, real asset binding, accepted overlay, provider evidence, or production acceptance.\n- Any forbidden side-effect counter is missing or nonzero.\n- Any DeepSeek implementation round is skipped, unavailable, timeout, parse fail, or has unresolved high/blocker findings.\n\nForbidden side-effect counters must include:\n\n- `prompt_generation_count`\n- `provider_payload_execution_count`\n- `provider_job_execution_count`\n- `media_generation_count`\n- `image_generation_count`\n- `audio_generation_count`\n- `tts_generation_count`\n- `video_generation_count`\n- `manual_provider_evidence_count`\n- `operator_evidence_creation_count`\n- `asset_generation_count`\n- `asset_acquisition_count`\n- `asset_upload_count`\n- `asset_import_count`\n- `asset_binding_count`\n- `accepted_uid_decision_count`\n- `rejected_uid_decision_count`\n- `accepted_overlay_write_count`\n- `operator_overlay_write_count`\n- `canonical_uid_writeback_count`\n- `canonical_kg_writeback_count`\n- `raw_kg_writeback_count`\n- `entity_store_writeback_count`\n- `registry_mutation_count`\n- `row_mutation_count`\n- `feedback_intake_count`\n- `repair_execution_count`\n- `replay_action_count`\n- `route_transition_count`\n- `outputs_index_mutation_count`\n- `now36_activation_count`\n- `production_acceptance_count`\n\nEvery counter must remain `0`.\n\n## DeepSeek Advisory Basis\n\nThis contract requires two DeepSeek v4 pro thinking/max advisory rounds before it can be landed:\n\n- Round 1: evaluate the schema/validator contract, source coverage matrix, Dramart PDF future-debt handling, adapter-only ledger boundary, `@entity` validator, forbidden side-effect counters, and NOW-39 sequencing.\n- Round 2: critique Round 1 for hidden prompt generation, provider execution, asset binding, canonical UID/writeback leakage, route/output-index leakage, PDF/OCR leakage, NOW-39 UI leakage, and production acceptance confusion.\n\nRuntime preference:\n\n- model target: `deepseek-v4-pro`\n- reasoning: `max`\n- timeout: `600` seconds where tooling permits\n- timeout/unavailable/skipped/parse fail must be recorded and cannot be pass basis\n\nDeepSeek remains advisory-only. Its output is not evidence, operator acceptance, route authority, writeback authority, replay authority, outputs-index authority, NOW-36 activation, provider readiness, or production acceptance.\n\n## Control-Plane Closeout Requirements\n\nWhen this contract lands, update:\n\n- `execution_state.json`\n- `phase_acceptance.json`\n- `workflow.json`\n- `workflow_index.json`\n- `retrospective_state.json`\n- `AGENTS.md`\n- `todo.md`\n- `projectreport.md`\n- `docs/midterm_autopilot_prompt.md`\n- `docs/now37_39_route_plan_control_plane_handoff_20260609.md`\n- `patchnote.md`\n\nRequired closeout status:\n\n- `current_status=now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_contract_landed_validated`\n- `current_implementation_priority=now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_no_writeback`\n- `next_implementation_kind=now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_no_writeback`\n\nDo not change `execution_state.json.next_entrypoint`.\n\n## Next Step After This Contract\n\nOnly after this contract lands may the project implement the no-writeback schema/validator artifacts. That next implementation is still not prompt generation, not provider payload execution, not UI implementation, not PDF/OCR extraction, not media or asset work, not canonical writeback, not route transition, not NOW-36 activation, and not production acceptance.\n",
  "artifact_refs": {
    "contract": {
      "path": "/wwwb/aitools/writer/docs/now38_dramart_seedance_storyboard_prompt_generation_contract_20260610.md",
      "exists": true,
      "sha256": "1047769902d45d19a1c1a0e7b654fbecb43128bfb2e676decbc132be65d300c7",
      "size_bytes": 24584
    },
    "route_handoff": {
      "path": "/wwwb/aitools/writer/docs/now37_39_route_plan_control_plane_handoff_20260609.md",
      "exists": true,
      "sha256": "bcde34c5a3e1c07aa891aea44e230ca2e8741a4a68984f35b3ab1ce86b550914",
      "size_bytes": 19690
    },
    "now37_closeout_contract": {
      "path": "/wwwb/aitools/writer/docs/now37_resource_case_absorption_closeout_decision_contract_20260610.md",
      "exists": true,
      "sha256": "0783575f83a63d36576886da30a7f5ebc4fc8aa00c2b1a4dca5f8f98ba7dd6ef",
      "size_bytes": 12240
    },
    "now38_schema_contract": {
      "path": "/wwwb/aitools/writer/docs/now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_contract_20260610.md",
      "exists": true,
      "sha256": "d54adf6f6f723ad564027edd800cfcbb0c3fab0695bd7260e8423d76cbdcc4e9",
      "size_bytes": 17517
    },
    "agents": {
      "path": "/wwwb/aitools/writer/AGENTS.md",
      "exists": true,
      "sha256": "f3f27345cf37e762e0951c8cb5b51f375c4da257b06eedacb677a825acabe350",
      "size_bytes": 26146
    },
    "execution_state": {
      "path": "/wwwb/aitools/writer/execution_state.json",
      "exists": true,
      "sha256": "1f77962554bc9f1641c883420dea51188903e77fa8755cf90add65458c9ab30c",
      "size_bytes": 137282
    },
    "phase_acceptance": {
      "path": "/wwwb/aitools/writer/phase_acceptance.json",
      "exists": true,
      "sha256": "002395654636a441f752ff2e1309567de1eaf65a1fb49a31e8f223c1cebe61af",
      "size_bytes": 169492
    },
    "workflow": {
      "path": "/wwwb/aitools/writer/workflow.json",
      "exists": true,
      "sha256": "7bb1fca530a2d599bbf4d4bb489ceb7c4e373df4548e56a4f4be390ad7a831f6",
      "size_bytes": 210087
    },
    "workflow_index": {
      "path": "/wwwb/aitools/writer/workflow_index.json",
      "exists": true,
      "sha256": "1a58253877578c0bb2c475cb0e1563574eddb2d5c6790a32ce3d3fd758388a82",
      "size_bytes": 132706
    },
    "retrospective_state": {
      "path": "/wwwb/aitools/writer/retrospective_state.json",
      "exists": true,
      "sha256": "cb48560466ec388cbca5512f53af61e95b66a0e6b94b144a5d93fd0ba8f45d0e",
      "size_bytes": 150178
    },
    "todo": {
      "path": "/wwwb/aitools/writer/todo.md",
      "exists": true,
      "sha256": "050b91e97f1c011f72135c63b2a10234220fa5999f87ea682b78d6a881093549",
      "size_bytes": 8173
    },
    "projectreport": {
      "path": "/wwwb/aitools/writer/projectreport.md",
      "exists": true,
      "sha256": "f9bb3b3993633c8a1c7967edc1ef0e78729a1d964cd280ea566c5f2660dd2608",
      "size_bytes": 8468
    },
    "midterm_autopilot_prompt": {
      "path": "/wwwb/aitools/writer/docs/midterm_autopilot_prompt.md",
      "exists": true,
      "sha256": "17d1e864477da7e621da63c4a66bbf311a1f96e5baac2e2de0c95e717a69a3fe",
      "size_bytes": 8107
    },
    "patchnote": {
      "path": "/wwwb/aitools/writer/patchnote.md",
      "exists": true,
      "sha256": "08f5fb85aaf4951a641f31808efe1db9b77bb18378abd8a2e970dd6845151f1e",
      "size_bytes": 886446
    },
    "now36_gate": {
      "path": "/wwwb/aitools/writer/outputs/now36_real_asset_evidence_activation_decision_final_20260609_0413/NOW36_ACTIVATION_DECISION_gate.json",
      "exists": true,
      "sha256": "8a1297c116207a5ebc6ea64f1c4029d07c97d42e56ad6b209517012b854e0585",
      "size_bytes": 37274
    },
    "now37_supported_gate": {
      "path": "/wwwb/aitools/writer/outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_gate.json",
      "exists": true,
      "sha256": "18c35d709603b1aba54bd7d148bd1d2994b59c6426ae06071d30a6be6d3b5876",
      "size_bytes": 26038
    },
    "now37_resource_refs": {
      "path": "/wwwb/aitools/writer/outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_resource_ref_index.jsonl",
      "exists": true,
      "sha256": "00c4c6dbba7350a933d66ff80aa1bd6f184a533d37b7abedb06d98347cf83370",
      "size_bytes": 25415
    },
    "now37_prompt_patterns": {
      "path": "/wwwb/aitools/writer/outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_prompt_patterns.jsonl",
      "exists": true,
      "sha256": "a5e967cba05a8273a38bfee2bfdb79183cc45141ade125da40b65719f688058d",
      "size_bytes": 8650
    },
    "now37_platform_constraints": {
      "path": "/wwwb/aitools/writer/outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_platform_constraints.jsonl",
      "exists": true,
      "sha256": "5d78251f1db4787d04681a8da7d44cfe4992db711826720e436193d864eaf94a",
      "size_bytes": 3869
    },
    "now37_anti_patterns": {
      "path": "/wwwb/aitools/writer/outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_anti_patterns.jsonl",
      "exists": true,
      "sha256": "e2d17528fb9e08ec1eb6d55b4d570e1101bc46f16b656eb0363f07e360f4dbeb",
      "size_bytes": 4066
    },
    "now37_gap_register": {
      "path": "/wwwb/aitools/writer/outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_gap_register.jsonl",
      "exists": true,
      "sha256": "925df2a5e8cbd75517eb689706dd680594c08aef28ee2057e9cddd1b5198f26f",
      "size_bytes": 164715
    },
    "now38_gate": {
      "path": "/wwwb/aitools/writer/outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_gate.json",
      "exists": true,
      "sha256": "3173482fb35543c175a3f80fe1263e20dbf6ad4747c286e1e57796557cd3c4d2",
      "size_bytes": 10149
    },
    "now38_source_coverage": {
      "path": "/wwwb/aitools/writer/outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_source_coverage_matrix.jsonl",
      "exists": true,
      "sha256": "d69292419109585cbff5e09a400007c2e6528488092850872a5efc2bac9d3f7c",
      "size_bytes": 17488
    },
    "now38_ledger_schema": {
      "path": "/wwwb/aitools/writer/outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_entity_mention_ledger_schema.json",
      "exists": true,
      "sha256": "a4ce3395ee87ecc29163ba5b41169293b93a52e84308d48b6e6ef62b5fd2793d",
      "size_bytes": 2360
    },
    "now38_ledger_examples": {
      "path": "/wwwb/aitools/writer/outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_entity_mention_ledger_examples.jsonl",
      "exists": true,
      "sha256": "555fefd291f17dc28d5aba9f257a852bbb8a0735dc4f985aed79c3c6dec12241",
      "size_bytes": 3245
    },
    "now38_at_entity_spec": {
      "path": "/wwwb/aitools/writer/outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_at_entity_validator_spec.json",
      "exists": true,
      "sha256": "2e60ca8872d138136829aff0f79a4c98fbe50a26f3785277c64994c5390068e1",
      "size_bytes": 1989
    },
    "now38_at_entity_fixtures": {
      "path": "/wwwb/aitools/writer/outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_at_entity_validator_fixtures.jsonl",
      "exists": true,
      "sha256": "26ceaddf305601b10f25669f53c24f39470085e81baf41854fe33ea3b46e047a",
      "size_bytes": 7583
    },
    "now38_storyboard_packet_schema": {
      "path": "/wwwb/aitools/writer/outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_storyboard_prompt_packet_schema.json",
      "exists": true,
      "sha256": "aab51e9d8761900bb8b3d43963375d66abc9fd9bf16e6afa62288e990f380ac9",
      "size_bytes": 1664
    },
    "now38_unsupported_sources": {
      "path": "/wwwb/aitools/writer/outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_unsupported_source_report.jsonl",
      "exists": true,
      "sha256": "6d16e5c62a22a9a4e30e26b47ec284e3d6543823dcce9ca793128ff59db391bb",
      "size_bytes": 3053
    },
    "now38_unsupported_fields": {
      "path": "/wwwb/aitools/writer/outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_unsupported_field_report.jsonl",
      "exists": true,
      "sha256": "b60723d456f27990fbb9f4aa975352276817b98f044f2f58b9254ca7279285bd",
      "size_bytes": 7497
    },
    "now38_validation": {
      "path": "/wwwb/aitools/writer/outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_validation_report.json",
      "exists": true,
      "sha256": "fb417a7c47b5ddcabf035216b030b441ff2fd46288f6e3c679166ad1113fbc2a",
      "size_bytes": 2922
    },
    "now38_drift": {
      "path": "/wwwb/aitools/writer/outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_drift_report.json",
      "exists": true,
      "sha256": "9877f4ee5b3e9635adaa8e4e1add57815866b71ca4c4d4d832c134c2060d5ac0",
      "size_bytes": 3203
    },
    "p2v22_gate": {
      "path": "/wwwb/aitools/writer/outputs/p_plan_v2_22_neutral_prompt_draft_hold_boundary_20260605_0713/P2V_22_gate.json",
      "exists": true,
      "sha256": "aa22e6e9c5c1bd1690aa1b719207b622cb3f98f31014c712055176a8f4cd2126",
      "size_bytes": 2598
    },
    "p2v22_schema": {
      "path": "/wwwb/aitools/writer/outputs/p_plan_v2_22_neutral_prompt_draft_hold_boundary_20260605_0713/P2V_22_neutral_prompt_draft_schema.json",
      "exists": true,
      "sha256": "8d5166ed7a69e78cdf4668cfd429d31586ba58987689e15d98d44befa2718880",
      "size_bytes": 2092
    },
    "p2v22_neutral_draft_rows": {
      "path": "/wwwb/aitools/writer/outputs/p_plan_v2_22_neutral_prompt_draft_hold_boundary_20260605_0713/P2V_22_neutral_prompt_draft_rows.jsonl",
      "exists": true,
      "sha256": "1494f84aba637adec1f8d360d71e537f0490ca56aa1c288bf3a87b4f33c6265d",
      "size_bytes": 2395301
    },
    "p2v22_held_rows": {
      "path": "/wwwb/aitools/writer/outputs/p_plan_v2_22_neutral_prompt_draft_hold_boundary_20260605_0713/P2V_22_held_row_boundary_rows.jsonl",
      "exists": true,
      "sha256": "079b8317236a67d0bc8415b7200be5fb3ebe3d829d5fbac3d3e7e1dc71421b01",
      "size_bytes": 254336
    },
    "p2v23_gate": {
      "path": "/wwwb/aitools/writer/outputs/p_plan_v2_23_prompt_readiness_packaging_boundary_20260605_0730/P2V_23_gate.json",
      "exists": true,
      "sha256": "1a6884b405cab82d0df525d160cb2004ed9bd4ee92c06b734b3ba68786fee2bc",
      "size_bytes": 2773
    },
    "p2v23_schema": {
      "path": "/wwwb/aitools/writer/outputs/p_plan_v2_23_prompt_readiness_packaging_boundary_20260605_0730/P2V_23_prompt_readiness_package_schema.json",
      "exists": true,
      "sha256": "1e4e8154b78b193e15a47a5a84a04c462b5ae7d3eede98951c5dcdfbd5db0a86",
      "size_bytes": 2443
    },
    "p2v23_prompt_readiness_package": {
      "path": "/wwwb/aitools/writer/outputs/p_plan_v2_23_prompt_readiness_packaging_boundary_20260605_0730/P2V_23_prompt_readiness_package.json",
      "exists": true,
      "sha256": "a57ebbac6bef7390e5f5ff4abf46c479f3cd2f612fb66f356541dab5eee748d5",
      "size_bytes": 11758
    },
    "p2v23_chapter_rows": {
      "path": "/wwwb/aitools/writer/outputs/p_plan_v2_23_prompt_readiness_packaging_boundary_20260605_0730/P2V_23_chapter_readiness_package_rows.jsonl",
      "exists": true,
      "sha256": "b69d6dc2c45b05f2605092c0442e5160eabd242acbe36f11d5324a9253861c60",
      "size_bytes": 248325
    },
    "p2v23_held_rows": {
      "path": "/wwwb/aitools/writer/outputs/p_plan_v2_23_prompt_readiness_packaging_boundary_20260605_0730/P2V_23_held_row_package_rows.jsonl",
      "exists": true,
      "sha256": "4635c55a78bbb0fe95a0580a8437402dff9374ca653ff7343a305675ce3ddb36",
      "size_bytes": 278536
    }
  },
  "control_plane_state": {
    "execution_next_entrypoint": "platform_neutral_prompt_readiness_manual_execution_log_contract",
    "execution_current_status": "now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_no_writeback_landed_validated",
    "execution_current_implementation_priority": "now38_dramart_seedance_storyboard_prompt_generation_contract_before_prompt_generation",
    "execution_next_implementation_kind": "now38_dramart_seedance_storyboard_prompt_generation_contract_before_prompt_generation",
    "phase_gate_status": "now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_no_writeback_landed_validated",
    "phase_current_implementation_priority": "now38_dramart_seedance_storyboard_prompt_generation_contract_before_prompt_generation",
    "workflow_current_status": "now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_no_writeback_landed_validated",
    "workflow_current_implementation_priority": "now38_dramart_seedance_storyboard_prompt_generation_contract_before_prompt_generation",
    "workflow_next_implementation_kind": "now38_dramart_seedance_storyboard_prompt_generation_contract_before_prompt_generation",
    "retrospective_current_implementation_priority": "now38_dramart_seedance_storyboard_prompt_generation_contract_before_prompt_generation"
  },
  "now36_gate_core": {
    "pass": true,
    "status": "now36_real_asset_evidence_activation_decision_closed_blocked_no_execution_landed_validated",
    "gate_status": "now36_activation_decision_pass_blocked_no_execution",
    "validator_status": "pass",
    "production_activation_ready": false,
    "provider_manual_execution_allowed": false,
    "now36_activation_authorized": false,
    "activation_decision": null,
    "next_entrypoint_unchanged": true
  },
  "now37_supported_gate_core": {
    "pass": true,
    "status": "now37_resource_case_absorption_supported_text_corpus_absorption_no_writeback_landed_validated",
    "gate_status": "now37_resource_case_absorption_supported_text_corpus_absorption_pass_no_writeback",
    "validator_status": "pass",
    "supported_text_corpus_absorption_completed": true,
    "entire_resource_corpus_absorption_completed": false,
    "blocked_pdf_resource_count": null,
    "metadata_only_binary_member_count": null
  },
  "now38_gate_core": {
    "pass": true,
    "status": "now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_no_writeback_landed_validated",
    "gate_status": "now38_adapter_schema_validator_no_writeback_pass",
    "validator_status": "pass",
    "drift_status": "pass",
    "coverage_row_count": 10,
    "ledger_example_count": 2,
    "validator_fixture_count": 6,
    "unsupported_source_count": 2,
    "unsupported_field_count": 6,
    "source_coverage_has_dramart_pdf_future_debt": true,
    "source_coverage_has_supported_text": true,
    "source_coverage_has_metadata_only": true,
    "forbidden_side_effect_counts_all_zero": true,
    "next_entrypoint_unchanged": true,
    "now36_blocked_no_execution_preserved": true
  },
  "p2v22_neutral_draft_core": {
    "gate": {
      "pass": null,
      "status": "pending_deepseek_advisory_and_closeout",
      "gate_status": "p2v_22_neutral_prompt_draft_hold_boundary_pass_pending_deepseek_advisory_and_closeout",
      "validator_status": "pass",
      "validator_failure_count": 0,
      "production_lane_accepted": false,
      "provider_manual_execution_allowed": false
    },
    "summary": {
      "draft_row_count": 1638,
      "held_row_count": 240,
      "provider_prompt_syntax_count": 0,
      "provider_prompt_count": 0,
      "adapter_payload_count": 0,
      "provider_job_execution_count": 0,
      "media_generation_count": 0,
      "production_lane_accepted_count": 0
    },
    "policy": {
      "stage": "P计划_V2_22_neutral_prompt_draft_hold_boundary",
      "neutral_draft_hold_boundary_only": true,
      "provider_specific_prompt_allowed": false,
      "adapter_payload_allowed": false,
      "provider_job_execution_allowed": false,
      "media_generation_allowed": false,
      "manual_provider_evidence_creation_allowed": false,
      "operator_evidence_creation_allowed": false,
      "feedback_intake_allowed": false,
      "repair_execution_allowed": false,
      "replay_execution_allowed": false,
      "accepted_overlay_writeback_allowed": false,
      "operator_overlay_writeback_allowed": false,
      "canonical_kg_writeback_allowed": false,
      "raw_kg_writeback_allowed": false,
      "outputs_index_mutation_allowed": false,
      "operator_production_acceptance_claimed": false,
      "deepseek_advisory_may_substitute_for_expert_advice": true,
      "deepseek_advisory_is_operator_production_acceptance": false,
      "runtime_branch_by_work_title_entity_name_or_sample_text_allowed": false,
      "active_route_authority": "execution_state.json.next_entrypoint",
      "execution_state_next_entrypoint_unchanged": true
    }
  },
  "p2v23_prompt_readiness_core": {
    "gate": {
      "pass": null,
      "status": "pending_deepseek_advisory_and_closeout",
      "gate_status": "p2v_23_prompt_readiness_packaging_boundary_pass_pending_deepseek_advisory_and_closeout",
      "validator_status": "pass",
      "validator_failure_count": 0,
      "production_lane_accepted": false,
      "provider_manual_execution_allowed": false
    },
    "summary": {
      "chapter_package_count": 20,
      "draft_row_count": 1638,
      "held_row_count": 240,
      "provider_prompt_syntax_count": 0,
      "provider_prompt_count": 0,
      "adapter_payload_count": 0,
      "provider_job_execution_count": 0,
      "media_generation_count": 0,
      "production_lane_accepted_count": 0
    },
    "policy": {
      "stage": "P计划_V2_23_prompt_readiness_packaging_boundary",
      "prompt_readiness_packaging_boundary_only": true,
      "provider_specific_prompt_allowed": false,
      "adapter_payload_allowed": false,
      "provider_job_execution_allowed": false,
      "media_generation_allowed": false,
      "manual_provider_evidence_creation_allowed": false,
      "operator_evidence_creation_allowed": false,
      "feedback_intake_allowed": false,
      "repair_execution_allowed": false,
      "replay_execution_allowed": false,
      "accepted_overlay_writeback_allowed": false,
      "operator_overlay_writeback_allowed": false,
      "canonical_kg_writeback_allowed": false,
      "raw_kg_writeback_allowed": false,
      "outputs_index_mutation_allowed": false,
      "operator_production_acceptance_claimed": false,
      "deepseek_advisory_may_substitute_for_expert_advice": true,
      "deepseek_advisory_is_operator_production_acceptance": false,
      "runtime_branch_by_work_title_entity_name_or_sample_text_allowed": false,
      "active_route_authority": "execution_state.json.next_entrypoint",
      "execution_state_next_entrypoint_unchanged": true
    }
  },
  "schema_validator_core": {
    "storyboard_prompt_packet_schema": {
      "version": "now38_adapter_schema_validator.v1",
      "schema_id": "NOW38_ADAPTER_storyboard_prompt_packet_schema",
      "provider_family_values": [
        "dramart",
        "seedance",
        "shared_adapter_schema"
      ],
      "required_fields": [
        "adapter_packet_id",
        "provider_family",
        "source_coverage_row_ids",
        "shot_ref_id",
        "scene_ref_id",
        "storyboard_slot_refs",
        "entity_mention_ledger_refs",
        "allowed_entity_mentions",
        "prompt_field_contracts",
        "negative_prompt_field_contracts",
        "unsupported_source_refs",
        "unsupported_field_refs",
        "validator_profile_refs"
      ],
      "contains_generated_prompt_text": false,
      "provider_payload_execution_allowed": false,
      "dramart_pdf_specific_fields_blocked_until_future_extractor_contract": true,
      "artifact_authority_class": "now38_adapter_schema_validator_no_writeback",
      "adapter_layer_only": true,
      "schema_validator_only": true,
      "prompt_generation_allowed": false,
      "provider_manual_execution_allowed": false,
      "media_generation_allowed": false,
      "asset_generation_or_acquisition_allowed": false,
      "asset_binding_allowed": false,
      "accepted_overlay_writeback_allowed": false,
      "canonical_uid_writeback_allowed": false,
      "canonical_kg_writeback_allowed": false,
      "raw_kg_writeback_allowed": false,
      "entity_store_writeback_allowed": false,
      "row_mutation_allowed": false,
      "feedback_repair_replay_allowed": false,
      "route_transition_allowed": false,
      "outputs_index_mutation_allowed": false,
      "now36_activation_allowed": false,
      "production_acceptance_claimed": false,
      "deepseek_advisory_only": true,
      "not_evidence_or_acceptance_or_route_authority": true
    },
    "entity_mention_ledger_schema": {
      "version": "now38_adapter_schema_validator.v1",
      "schema_id": "NOW38_ADAPTER_entity_mention_ledger_schema",
      "description": "Adapter-only mention ledger. Rows are local to an adapter packet and never become canonical entity IDs.",
      "required_fields": [
        "ledger_entry_id",
        "adapter_packet_id",
        "shot_ref_id",
        "scene_ref_id",
        "local_entity_key",
        "entity_display_name",
        "mention_token",
        "allowed_scope",
        "source_allowed_entity_set_ref",
        "source_context_ref_ids",
        "source_coverage_row_ids",
        "ambiguity_status",
        "disambiguation_label",
        "validator_status",
        "review_status"
      ],
      "id_algorithm": "ledger_entry_id = ledger_ + sha256(canonical_json(adapter_packet_id, shot_ref_id, local_entity_key, mention_token, source_coverage_row_ids))[0:24]",
      "mention_token_rule": "mention_token must equal @ plus entity_display_name or an approved local disambiguation label.",
      "coverage_row_ids_available": [
        "coverage_3f076f60f39327ed162699f5",
        "coverage_aaa9542fbf27adca717c1ce2",
        "coverage_ce08b2636189c2f1b724859f",
        "coverage_cf69359cdf9db85efebb8fe1",
        "coverage_ecdef14c21895761e2d82319",
        "coverage_2953dcbcf946aad40d161cef",
        "coverage_5d5bae9bf51e5bb2d09a871d",
        "coverage_6fde0213c44b976e7da93bc7"
      ],
      "not_canonical_uid": true,
      "not_registry_or_entity_store": true,
      "not_asset_binding": true,
      "not_provider_evidence": true,
      "artifact_authority_class": "now38_adapter_schema_validator_no_writeback",
      "adapter_layer_only": true,
      "schema_validator_only": true,
      "prompt_generation_allowed": false,
      "provider_payload_execution_allowed": false,
      "provider_manual_execution_allowed": false,
      "media_generation_allowed": false,
      "asset_generation_or_acquisition_allowed": false,
      "asset_binding_allowed": false,
      "accepted_overlay_writeback_allowed": false,
      "canonical_uid_writeback_allowed": false,
      "canonical_kg_writeback_allowed": false,
      "raw_kg_writeback_allowed": false,
      "entity_store_writeback_allowed": false,
      "row_mutation_allowed": false,
      "feedback_repair_replay_allowed": false,
      "route_transition_allowed": false,
      "outputs_index_mutation_allowed": false,
      "now36_activation_allowed": false,
      "production_acceptance_claimed": false,
      "deepseek_advisory_only": true,
      "not_evidence_or_acceptance_or_route_authority": true
    },
    "at_entity_validator_spec": {
      "version": "now38_adapter_schema_validator.v1",
      "schema_id": "NOW38_ADAPTER_at_entity_validator_spec",
      "token_pattern": "(?<!\\\\w)@[\\\\w\\\\u4e00-\\\\u9fff][\\\\w\\\\u4e00-\\\\u9fff·_-]*",
      "checks": [
        "Every @ token in an adapter-layer prompt field must match exactly one valid shot-local ledger row.",
        "No token may reference an entity outside the shot-local allowed set.",
        "Duplicate display names require local disambiguation before a token can pass.",
        "Tokens that resemble canonical UIDs, registry IDs, URLs, storage paths, provider file IDs, or asset refs must fail.",
        "Used ledger rows must cite source coverage rows.",
        "Validated mentions remain adapter-layer only and cannot be written to canonical screenplay, KG, registry, accepted overlay, or asset binding records."
      ],
      "error_codes": [
        "at_entity_missing_ledger",
        "at_entity_out_of_scope",
        "at_entity_duplicate_display_name",
        "at_entity_canonical_uid_like",
        "at_entity_asset_ref_like",
        "at_entity_missing_source_coverage"
      ],
      "artifact_authority_class": "now38_adapter_schema_validator_no_writeback",
      "adapter_layer_only": true,
      "schema_validator_only": true,
      "prompt_generation_allowed": false,
      "provider_payload_execution_allowed": false,
      "provider_manual_execution_allowed": false,
      "media_generation_allowed": false,
      "asset_generation_or_acquisition_allowed": false,
      "asset_binding_allowed": false,
      "accepted_overlay_writeback_allowed": false,
      "canonical_uid_writeback_allowed": false,
      "canonical_kg_writeback_allowed": false,
      "raw_kg_writeback_allowed": false,
      "entity_store_writeback_allowed": false,
      "row_mutation_allowed": false,
      "feedback_repair_replay_allowed": false,
      "route_transition_allowed": false,
      "outputs_index_mutation_allowed": false,
      "now36_activation_allowed": false,
      "production_acceptance_claimed": false,
      "deepseek_advisory_only": true,
      "not_evidence_or_acceptance_or_route_authority": true
    },
    "validation_report": {
      "version": "now38_adapter_schema_validator.v1",
      "created_at": "2026-06-09T21:28:44.031503Z",
      "implementation_kind": "now38_dramart_seedance_storyboard_prompt_adapter_schema_validator_no_writeback",
      "validator_status": "pass",
      "failure_count": 0,
      "warning_count": 0,
      "failures": [],
      "warnings": [],
      "checks": {
        "coverage_row_count": 10,
        "ledger_example_count": 2,
        "validator_fixture_count": 6,
        "unsupported_source_count": 2,
        "forbidden_side_effect_counts_all_zero": true
      },
      "deepseek_implementation_status": {
        "round1": {
          "round_id": "implementation_round1",
          "dir": "outputs/now38_adapter_schema_validator_deepseek_round1_20260610_0526",
          "call_status": "success",
          "parse_status": "pass",
          "verdict": "supports_with_required_corrections",
          "confidence": "high",
          "finding_counts": {
            "low": 1
          },
          "high_or_blocker_findings": 0,
          "required_corrections": [
            "Run missing DeepSeek implementation round evaluations (round1 and round2) as per the NOW-38 adapter schema validator contract, then re-run gate to confirm pass."
          ]
        },
        "round2": {
          "round_id": "implementation_round2",
          "dir": "outputs/now38_adapter_schema_validator_deepseek_round2_20260610_0527",
          "call_status": "success",
          "parse_status": "pass",
          "verdict": "round1_supported_with_corrections",
          "confidence": "high",
          "finding_counts": {
            "low": 1
          },
          "high_or_blocker_findings": 0,
          "required_corrections": [
            "Record the DeepSeek round2 implementation evaluation (this advisory) in the outputs directory and update the gate's deepseek_implementation_status.round2 with parse_status=pass, verdict=round1_supported_with_corrections, and appropriate confidence; also ensure round1 status from the previous round is similarly recorded if not already present, then re-run the gate to eliminate the blocker failures."
          ]
        }
      },
      "artifact_authority_class": "now38_adapter_schema_validator_no_writeback",
      "adapter_layer_only": true,
      "schema_validator_only": true,
      "prompt_generation_allowed": false,
      "provider_payload_execution_allowed": false,
      "provider_manual_execution_allowed": false,
      "media_generation_allowed": false,
      "asset_generation_or_acquisition_allowed": false,
      "asset_binding_allowed": false,
      "accepted_overlay_writeback_allowed": false,
      "canonical_uid_writeback_allowed": false,
      "canonical_kg_writeback_allowed": false,
      "raw_kg_writeback_allowed": false,
      "entity_store_writeback_allowed": false,
      "row_mutation_allowed": false,
      "feedback_repair_replay_allowed": false,
      "route_transition_allowed": false,
      "outputs_index_mutation_allowed": false,
      "now36_activation_allowed": false,
      "production_acceptance_claimed": false,
      "deepseek_advisory_only": true,
      "not_evidence_or_acceptance_or_route_authority": true
    },
    "drift_report": {
      "version": "now38_adapter_schema_validator.v1",
      "created_at": "2026-06-09T21:28:44.031530Z",
      "drift_status": "pass",
      "missing_artifact_keys": [],
      "artifact_hashes": {
        "contract": "d54adf6f6f723ad564027edd800cfcbb0c3fab0695bd7260e8423d76cbdcc4e9",
        "handoff": "6295be37a6eb10aef0db5ed17c2c37e8b73140414e1e488d339fd87a2eb395d4",
        "now37_closeout_contract": "0783575f83a63d36576886da30a7f5ebc4fc8aa00c2b1a4dca5f8f98ba7dd6ef",
        "execution_state": "e2641cd49f0da03f91d86572b1f91537bd8077001e7e01b8d553cdb7ae143a9a",
        "phase_acceptance": "842d96781fc3fbcfb74cebb3a0031811086ae2456bf765706a7b707ea94142a7",
        "workflow": "347257d4cc1ddd9dfb13ca37ad3e4df72181b40383a931f1fa92186b09b4a8b7",
        "workflow_index": "488a01e9e3534597e01a741e11aa28ca4bbb5f99509dcdc71c72e24b2d8f3c3a",
        "retrospective_state": "74cedc3f44647f607ebad3625fb501875c40e67da956c391ea1560e4207f060a",
        "todo": "2ae69a26913ec2d53393794a1fed85a8c5680c6b1ff98d1154997ed22daba002",
        "projectreport": "714877ff6efbe219a030b54278cc6f95cd58a8d08ece143cce3873c58587b2b4",
        "now36_gate": "8a1297c116207a5ebc6ea64f1c4029d07c97d42e56ad6b209517012b854e0585",
        "now37_gate": "18c35d709603b1aba54bd7d148bd1d2994b59c6426ae06071d30a6be6d3b5876",
        "now37_report": "18f62a771fe5749164bba9b6642bed91e1aea8e3f1bf89b73bfe247a8d6c495a",
        "now37_inventory": "7ba05f7d4ed5b682f8758bc05af9467223e13f308ae8737902260fa848082ec2",
        "now37_resource_refs": "00c4c6dbba7350a933d66ff80aa1bd6f184a533d37b7abedb06d98347cf83370",
        "now37_case_cards": "3cdae74056b0f8a75efcb2c40c82f95dd2b53a082ac9826e2677056406156f4b",
        "now37_platform_constraints": "5d78251f1db4787d04681a8da7d44cfe4992db711826720e436193d864eaf94a",
        "now37_prompt_patterns": "a5e967cba05a8273a38bfee2bfdb79183cc45141ade125da40b65719f688058d",
        "now37_anti_patterns": "e2d17528fb9e08ec1eb6d55b4d570e1101bc46f16b656eb0363f07e360f4dbeb",
        "now37_gap_register": "925df2a5e8cbd75517eb689706dd680594c08aef28ee2057e9cddd1b5198f26f",
        "contract_round1": "9fddb2ea97d48b48072ed6f50271a87e8c2b7945c165230842074bb0b1b4bf99",
        "contract_round2": "7aa8f414041fe55759ade01a1e75fee318cbea7bfb90493f3d987be838010148"
      },
      "input_fingerprint": "0a17af397cb67f883ce22ff6e4723cf0b65f55580880c4023ed55add3fa2b71c",
      "artifact_authority_class": "now38_adapter_schema_validator_no_writeback",
      "adapter_layer_only": true,
      "schema_validator_only": true,
      "prompt_generation_allowed": false,
      "provider_payload_execution_allowed": false,
      "provider_manual_execution_allowed": false,
      "media_generation_allowed": false,
      "asset_generation_or_acquisition_allowed": false,
      "asset_binding_allowed": false,
      "accepted_overlay_writeback_allowed": false,
      "canonical_uid_writeback_allowed": false,
      "canonical_kg_writeback_allowed": false,
      "raw_kg_writeback_allowed": false,
      "entity_store_writeback_allowed": false,
      "row_mutation_allowed": false,
      "feedback_repair_replay_allowed": false,
      "route_transition_allowed": false,
      "outputs_index_mutation_allowed": false,
      "now36_activation_allowed": false,
      "production_acceptance_claimed": false,
      "deepseek_advisory_only": true,
      "not_evidence_or_acceptance_or_route_authority": true
    }
  },
  "jsonl_summaries": {
    "now37_resource_refs": {
      "path": "/wwwb/aitools/writer/outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_resource_ref_index.jsonl",
      "row_count": 10,
      "parse_failures": 0,
      "samples": [
        {
          "id": "resref_e8909a7ed1e898022c865a61",
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "resref_1b9bdf2bc4ff9dac4c278c8a",
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "resref_0592c8fb298343a5998f9395",
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "resref_4f474249683e607d0050c293",
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "resref_919a73c873d0de5ddb3ac654",
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "resref_81f06b43fa2a4dd97f22f133",
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "resref_a6a3d522c665c2025f134a7c",
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "resref_1ff0670c332a35eff38dac3e",
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        }
      ]
    },
    "now37_prompt_patterns": {
      "path": "/wwwb/aitools/writer/outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_prompt_patterns.jsonl",
      "row_count": 4,
      "parse_failures": 0,
      "samples": [
        {
          "id": null,
          "summary": "Pilot source uses shot or camera language as a structured screenplay/storyboard section.",
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": "Pilot source carries style and rhythm instructions that should remain evidence-linked when later adapted.",
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": "Pilot source uses shot or camera language as a structured screenplay/storyboard section.",
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": "Pilot source carries style and rhythm instructions that should remain evidence-linked when later adapted.",
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        }
      ]
    },
    "now37_platform_constraints": {
      "path": "/wwwb/aitools/writer/outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_platform_constraints.jsonl",
      "row_count": 2,
      "parse_failures": 0,
      "samples": [
        {
          "id": "constraint_ca23bcb7ed1bbc35a99b959c",
          "summary": "short-form video scripts may carry explicit duration or timecode blocks; preserve as advisory source-grounded structure.",
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "constraint_52cee199e2ae31b6cd61ab1b",
          "summary": "short-form video scripts may carry explicit duration or timecode blocks; preserve as advisory source-grounded structure.",
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        }
      ]
    },
    "now37_anti_patterns": {
      "path": "/wwwb/aitools/writer/outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_anti_patterns.jsonl",
      "row_count": 2,
      "parse_failures": 0,
      "samples": [
        {
          "id": "antipattern_ba8883882b24ccac8a6e9614",
          "summary": "Markdown image references inside external examples must not be treated as project real asset bindings.",
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "antipattern_edeb4c5d6b8f0b7389e288af",
          "summary": "Markdown image references inside external examples must not be treated as project real asset bindings.",
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        }
      ]
    },
    "now37_gap_register": {
      "path": "/wwwb/aitools/writer/outputs/now37_resource_case_absorption_supported_text_corpus_final_20260610_0442/NOW37_RESOURCE_gap_register.jsonl",
      "row_count": 73,
      "parse_failures": 0,
      "samples": [
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        }
      ]
    },
    "now38_source_coverage": {
      "path": "/wwwb/aitools/writer/outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_source_coverage_matrix.jsonl",
      "row_count": 10,
      "parse_failures": 0,
      "samples": [
        {
          "id": "coverage_3f076f60f39327ed162699f5",
          "summary": "May inform schema and validator contracts; may not become final prompt text or provider payload.",
          "coverage_status": "supported_text_evidence",
          "source_family": "now37_supported_text",
          "blocked_use": [
            "prompt_generation",
            "provider_execution",
            "canonical_writeback",
            "asset_binding",
            "production_acceptance"
          ],
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "coverage_aaa9542fbf27adca717c1ce2",
          "summary": "May inform schema and validator contracts; may not become final prompt text or provider payload.",
          "coverage_status": "supported_text_evidence",
          "source_family": "now37_supported_text",
          "blocked_use": [
            "prompt_generation",
            "provider_execution",
            "canonical_writeback",
            "asset_binding",
            "production_acceptance"
          ],
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "coverage_ce08b2636189c2f1b724859f",
          "summary": "May inform schema and validator contracts; may not become final prompt text or provider payload.",
          "coverage_status": "supported_text_evidence",
          "source_family": "now37_supported_text",
          "blocked_use": [
            "prompt_generation",
            "provider_execution",
            "canonical_writeback",
            "asset_binding",
            "production_acceptance"
          ],
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "coverage_cf69359cdf9db85efebb8fe1",
          "summary": "May inform schema and validator contracts; may not become final prompt text or provider payload.",
          "coverage_status": "supported_text_evidence",
          "source_family": "now37_supported_text",
          "blocked_use": [
            "prompt_generation",
            "provider_execution",
            "canonical_writeback",
            "asset_binding",
            "production_acceptance"
          ],
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "coverage_ecdef14c21895761e2d82319",
          "summary": "May inform schema and validator contracts; may not become final prompt text or provider payload.",
          "coverage_status": "supported_text_evidence",
          "source_family": "now37_supported_text",
          "blocked_use": [
            "prompt_generation",
            "provider_execution",
            "canonical_writeback",
            "asset_binding",
            "production_acceptance"
          ],
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "coverage_2953dcbcf946aad40d161cef",
          "summary": "May appear only as a blocked source coverage row and future extractor debt.",
          "coverage_status": "future_extractor_debt",
          "source_family": "now37_gap_register",
          "blocked_use": [
            "dramart_pdf_specific_renderer_claims",
            "prompt_generation",
            "provider_execution",
            "production_acceptance",
            "pdf_ocr_extraction"
          ],
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "coverage_5d5bae9bf51e5bb2d09a871d",
          "summary": "May count metadata-only unsupported media members; may not inspect or bind assets.",
          "coverage_status": "metadata_only",
          "source_family": "now37_gap_register",
          "blocked_use": [
            "asset_generation",
            "asset_acquisition",
            "asset_binding",
            "image_analysis",
            "media_processing"
          ],
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "coverage_6fde0213c44b976e7da93bc7",
          "summary": "May constrain adapter schema/validator boundaries.",
          "coverage_status": "control_boundary",
          "source_family": "route_handoff",
          "blocked_use": [
            "provider_execution",
            "route_transition",
            "production_acceptance",
            "outputs_index_mutation"
          ],
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "coverage_882efe6624df38c3f3660f72",
          "summary": "May constrain adapter schema/validator boundaries.",
          "coverage_status": "control_boundary",
          "source_family": "control_plane",
          "blocked_use": [
            "provider_execution",
            "route_transition",
            "production_acceptance",
            "outputs_index_mutation"
          ],
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "coverage_7052c0ba2129d169b725762a",
          "summary": "May constrain adapter schema/validator boundaries.",
          "coverage_status": "control_boundary",
          "source_family": "now36_gate",
          "blocked_use": [
            "provider_execution",
            "route_transition",
            "production_acceptance",
            "outputs_index_mutation"
          ],
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        }
      ]
    },
    "now38_ledger_examples": {
      "path": "/wwwb/aitools/writer/outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_entity_mention_ledger_examples.jsonl",
      "row_count": 2,
      "parse_failures": 0,
      "samples": [
        {
          "id": "ledger_905e154ede57ad349b6e31ab",
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": "valid",
          "expected_errors": null
        },
        {
          "id": "ledger_248fe47791b4d382f9f73ecb",
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": "blocked",
          "expected_errors": null
        }
      ]
    },
    "now38_at_entity_fixtures": {
      "path": "/wwwb/aitools/writer/outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_at_entity_validator_fixtures.jsonl",
      "row_count": 6,
      "parse_failures": 0,
      "samples": [
        {
          "id": "fixture_pass_shot_local_mention",
          "summary": "$.storyboard_slots[0].entity_mentions[0]",
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": "$.storyboard_slots[0].entity_mentions[0]",
          "validator_status": null,
          "expected_errors": []
        },
        {
          "id": "fixture_fail_duplicate_display_name",
          "summary": "$.storyboard_slots[0].entity_mentions[0]",
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": "$.storyboard_slots[0].entity_mentions[0]",
          "validator_status": null,
          "expected_errors": [
            "at_entity_duplicate_display_name"
          ]
        },
        {
          "id": "fixture_fail_missing_ledger",
          "summary": "$.storyboard_slots[0].entity_mentions[0]",
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": "$.storyboard_slots[0].entity_mentions[0]",
          "validator_status": null,
          "expected_errors": [
            "at_entity_missing_ledger"
          ]
        },
        {
          "id": "fixture_fail_out_of_scope",
          "summary": "$.storyboard_slots[1].entity_mentions[0]",
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": "$.storyboard_slots[1].entity_mentions[0]",
          "validator_status": null,
          "expected_errors": [
            "at_entity_out_of_scope"
          ]
        },
        {
          "id": "fixture_fail_canonical_uid_like",
          "summary": "$.storyboard_slots[0].entity_mentions[0]",
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": "$.storyboard_slots[0].entity_mentions[0]",
          "validator_status": null,
          "expected_errors": [
            "at_entity_canonical_uid_like"
          ]
        },
        {
          "id": "fixture_fail_asset_ref_like",
          "summary": "$.storyboard_slots[0].entity_mentions[0]",
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": "$.storyboard_slots[0].entity_mentions[0]",
          "validator_status": null,
          "expected_errors": [
            "at_entity_asset_ref_like"
          ]
        }
      ]
    },
    "now38_unsupported_sources": {
      "path": "/wwwb/aitools/writer/outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_unsupported_source_report.jsonl",
      "row_count": 2,
      "parse_failures": 0,
      "samples": [
        {
          "id": "coverage_2953dcbcf946aad40d161cef",
          "summary": null,
          "coverage_status": "future_extractor_debt",
          "source_family": null,
          "blocked_use": [
            "dramart_pdf_specific_renderer_claims",
            "prompt_generation",
            "provider_execution",
            "production_acceptance",
            "pdf_ocr_extraction"
          ],
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "coverage_5d5bae9bf51e5bb2d09a871d",
          "summary": null,
          "coverage_status": "metadata_only",
          "source_family": null,
          "blocked_use": [
            "asset_generation",
            "asset_acquisition",
            "asset_binding",
            "image_analysis",
            "media_processing"
          ],
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        }
      ]
    },
    "now38_unsupported_fields": {
      "path": "/wwwb/aitools/writer/outputs/now38_adapter_schema_validator_final_20260610_0529/NOW38_ADAPTER_unsupported_field_report.jsonl",
      "row_count": 6,
      "parse_failures": 0,
      "samples": [
        {
          "id": "unsupported_field_a4ed134db2624c59125c",
          "summary": "final_prompt_text",
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": "final_prompt_text",
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "unsupported_field_7eb8111ddab4ae0830e9",
          "summary": "provider_payload.execution_endpoint",
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": "provider_payload.execution_endpoint",
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "unsupported_field_d4f67b21484f7bbbdb15",
          "summary": "dramart.pdf_specific_renderer_format",
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": "dramart.pdf_specific_renderer_format",
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "unsupported_field_6f0a567207fb934146a3",
          "summary": "asset_reference.uri",
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": "asset_reference.uri",
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "unsupported_field_f41fc20394cb63b7c2e8",
          "summary": "canonical_entity_uid",
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": "canonical_entity_uid",
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": "unsupported_field_0596c1a0659edc364e93",
          "summary": "voice_profile_id",
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": "voice_profile_id",
          "validator_status": null,
          "expected_errors": null
        }
      ]
    },
    "p2v22_neutral_draft_rows": {
      "path": "/wwwb/aitools/writer/outputs/p_plan_v2_22_neutral_prompt_draft_hold_boundary_20260605_0713/P2V_22_neutral_prompt_draft_rows.jsonl",
      "row_count": 1638,
      "parse_failures": 0,
      "samples": [
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        }
      ]
    },
    "p2v22_held_rows": {
      "path": "/wwwb/aitools/writer/outputs/p_plan_v2_22_neutral_prompt_draft_hold_boundary_20260605_0713/P2V_22_held_row_boundary_rows.jsonl",
      "row_count": 240,
      "parse_failures": 0,
      "samples": [
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        }
      ]
    },
    "p2v23_chapter_rows": {
      "path": "/wwwb/aitools/writer/outputs/p_plan_v2_23_prompt_readiness_packaging_boundary_20260605_0730/P2V_23_chapter_readiness_package_rows.jsonl",
      "row_count": 20,
      "parse_failures": 0,
      "samples": [
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        }
      ]
    },
    "p2v23_held_rows": {
      "path": "/wwwb/aitools/writer/outputs/p_plan_v2_23_prompt_readiness_packaging_boundary_20260605_0730/P2V_23_held_row_package_rows.jsonl",
      "row_count": 240,
      "parse_failures": 0,
      "samples": [
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        },
        {
          "id": null,
          "summary": null,
          "coverage_status": null,
          "source_family": null,
          "blocked_use": null,
          "field_path": null,
          "validator_status": null,
          "expected_errors": null
        }
      ]
    }
  },
  "previous_round": {
    "dir": "",
    "parsed": {}
  },
  "hard_boundaries": [
    "This is a contract before prompt generation. The contract itself must not generate any prompt candidate text.",
    "A later implementation may create review-only draft prompt candidate packets only if this contract lands and all validators pass.",
    "Draft prompt candidates are not final_prompt_text, not provider-ready payloads, not execution evidence, and not production acceptance.",
    "entity_mention_ledger and @entity mentions remain adapter-only and cannot become canonical UID, real asset binding, accepted overlay, provider evidence, or production acceptance.",
    "Dramart PDF remains future_extractor_debt; no PDF/OCR extraction or PDF-derived Dramart renderer claim is authorized.",
    "No provider/media/asset/writeback/route/outputs-index/NOW-36/production authority is allowed.",
    "DeepSeek is advisory-only and cannot become evidence, acceptance, route authority, writeback authority, replay authority, outputs-index authority, NOW-36 activation, or production acceptance."
  ],
  "input_fingerprint": "281caaf58185c354377d88cf4e3b95937e88a4820b601cdb5799deafb9f5e6f2"
}