Repository navigation
§ 5.4 — Formats and assets: pinned specs, what the buyer supplies, and how an asset was made (#87) - #152
§ 5.4 — Formats and assets: pinned specs, what the buyer supplies, and how an asset was made (#87)#152KonstantinMirin wants to merge 359 commits into
Conversation
|
@KonstantinMirin thanks, I read the seller-built entries in 5160e65. That settles where provenance lives for a recorded read. One gap left: nothing says what a receiver does when a seller-built asset states |
|
Thanks, @cdorsey88. Agreed, and this PR adds it. § 5.4 defines We stopped short of a duty to report the mismatch, because the draft gives the buyer no channel to report on a seller-built asset. That's the gap in question 5 of the PR description. The key list marks Analyzed and generated with the help of Claude, fully reviewed by me. |
The decline rule no longer counts a line item whose preemption names exclusivity, so the sale that preempts it can go through. Preempted delivery is a shortfall. The reason holds where and when the line item delivers, notice becomes notice_duration as on the cancellation option, and paid_zone names the part of a venue past its paid entry. Refs IABTechLab#146
A seller MUST keep a rejection whose retry is not same until offer_window.end, or as long as it keeps a proposal with no end. Any commit that wrote an entry stays findable by its key, and a replay the seller no longer remembers runs the checks as a new commit with that key. Refs IABTechLab#128
What this changes
Draft 1 doesn't say whether
specsholds a format's spec or only points at a registry entry, and a format id carries no version. A registry edit could change what an agreed line item requires. Nor can a line item say what the buyer supplies, who built an asset, or how it was made. This PR pins each spec in the record to one version and adds those three.specsbecomesformat_specs, a map fromFormatIdtoFormatSpec. AFormatSpecholds the wholespec, and aspec_refwhen the spec comes from a registry.spec_refis anEntryRef(§ 2.2), so it names one exact version. A pinnedspecequals that version's content, and the format id SHOULD match its<collection>/<entry_id>.draft, every offered format has an entry.FormatIdstarts with the line item'schannel.specMAY stateasset, what the buyer supplies, andvoice. A synthetic asset doesn't conform tovoice: human_only.AssetMAY stateprovenance: how it was made and how it's marked or disclosed.assets[]also records seller-built creative, throughbuilt_by.voice: human_onlyreports that mismatch, naming theasset_id, theDigestof the bytes it reviewed, thespeckey it conflicts with, and what was observed. The report never changesprovenance. This follows @cdorsey88's evidence from their checker.approvalandcreative_policyare prose.creative_policymoves here from § 5.6.specificationsbecomesmedia_kit_detail.specas open text the counterparty wrote.Related issue
Closes #87, a change request from Postindustria (IAB Tech Lab member).
Refs #5 and #32.
Builds on
This PR builds on our video and audio PR and our audience PR.
Through them it builds on our placement PR (#120) and these PRs of ours:
Through our PRs it carries #17, #18, and #70 to #72 by @Sirajmx, #73 to #76 by @Kishore-2572, and #117 and #118 by @aleksUIX. Review the commits "Fix earlier text and widen the example checks", a fix that changes no rule, "Write the line items into proposal.yaml and check the extracts", and "Pin each format spec to one version and rename the format fields". Review the checker fixes "Let the example manifest omit an OPTIONAL key", "Check a term that refers to another field's list", "Don't read a linked core-term list as the backticked names", and "Call the checker's three-argument err in the pricing checks". Also review "Add asset provenance and the seller's voice keys", "Let assets record the creative the seller builds", and "Define the voice key and flag a synthetic asset under human_only", which add
provenance,built_by, andvoice, and which the task force can drop. "Let a receiver report a synthetic asset under human_only" builds on them and goes with them.Type
Checklist
docs/open-questions.md. "Write the line items into proposal.yaml and check the extracts" updates § 6.1, and "Fix earlier text and widen the example checks" rewords § 2.6, § 5.8, § 6.6, § 8 question 3, and OQ-3media_kit_detail,formats,format_specs, andapprovalrows take the new names and types.creative_policymoves to § 5.4.scripts/check_appendix.pypasses: 97 field names, 99 rowsseller-set, and no count changes: 6requestable, 27 of 99 touched by the buyerexamples/is updated and still parses. Every offered format has a wholespec. The CTV example pins two formats and definesctv/instream-6sitself, and seller-defined entries stateasset. Bothrecord_digestvalues are recomputed.scripts/check_examples.pychecks each format id against its channel, an entry per offered format, onespecperspec_refacross examples, and theEntryRefform. In "Write the line items into proposal.yaml and check the extracts",proposal.yamlholds its line items, the checker compares the extracts with them, andmanifest.jsonis regenerated. "Fix earlier text and widen the example checks" widens the checker. Each commit passesscripts/check_appendix.py,scripts/check_examples.py, andscripts/check_pricing_fixtures.py, 60 of 60format_specs,approval, andcreative_policysit on the line item;provenanceon the assetselectabledeclaresavailable[]andincluded[]; anythingsettabledeclares bounds (§ 3.1, § 3.2) —formatsdeclares both; no newselectableorsettablefieldsKnock-on effects
specs,specifications, anapprovalorcreative_policyobject, or a format id that doesn't start with itschannelno longer conforms.registry_refobject becomesspec_ref, anEntryRefstring with no digest (question 2). Question 3 stays open.specspath that @VJAlkimi's #32 proposes and @unreconciled supports on #5.dooh/*entries @premesh proposes and theaudio/*entries @cdorsey88 proposes can travel as seller-defined specs.assetlets [Change] § 5.4 — Validateassets[].format_refagainst the resolvedformatsselection at submission, not at creative review #32's check accept the valid script or artwork that @bhillman-TelevisaUnivision and @premesh warn it could reject.provenance,voice, and the host-read example'spronunciation_guidecome from @cdorsey88 on #5 and on this PR.assets[].format_refagainst the resolvedformatsselection at submission, not at creative review #32's submission check, and theformat_unresolvedreport andagreedbar proposed on OQ-4 — The format registry has no entries foraudio/*,ctv/*ordooh/*#5, stay on those issues.Open questions
spec_refname, and how does a reader fetch an entry? This is [Change] § 5.4 — Pin each format's spec to a version and keep it in the agreed record #87 question 3, tracked on OQ-4 — The format registry has no entries foraudio/*,ctv/*ordooh/*#5.draftline item on apublishedproposal needs entries, because the condition reads the proposal'sstatus(§ 4.3.3). Should it read the line item'sstatusinstead?format_specskeys toformats.available[]. Should it?format_specsenough, or does such an id need a namespace beyond its channel?voice: human_only, with the digest of the bytes it reviewed, but nothing carries the report yet, and @cdorsey88 would leave the buyer workflow toapprovals[]in [Change] § 5.4 — Validateassets[].format_refagainst the resolvedformatsselection at submission, not at creative review #32. Still open: a seller-built entry has no field for the buyer's approval, becauseapproval_statusis the seller's review. Our #32 comment proposesapprovals[]. Should that land here or with [Change] § 5.4 — Validateassets[].format_refagainst the resolvedformatsselection at submission, not at creative review #32?By opening this pull request I agree my contribution may be published under this
repository's licence, as set out in CONTRIBUTING.md.
Analyzed and generated with the help of Claude, fully reviewed by me.