applied · Level 3

AI product catalogues and truthful descriptions

A practical evidence workbook for variant facts, held claims and accountable catalogue review.

By Mickarle Sean Junior Wagstaff-Irons - Micky Irons

  • Level 3Building
  • 720 min
  • 8 chapters
  • Online course and PDF workbook
original-sector-illustrationapplied / 03

Read, practise and review

Your next step

Start this course online

Register your start, then work through the lessons and exercises at your own pace. You can download the PDF separately. Where a scored exam is available, you will find it after the lessons.

Register or resume your course

Mickai privately records this registration and sends its team a course-start notification. It records your intention to start, not proof of attendance or completion. Our course-start privacy notice explains the details and the 30-day resume cookie.

Follow the Mickai company page on LinkedIn

You can start learning without subscribing or following. Newsletter email confirmation and provider enrolment are recorded separately.

Start with the essentials

The short answer

Start from admitted evidence for the intended product and variant. Extract exact attributes, retain contradictions, calculate known mandatory price components and keep stock snapshots distinct from promises. Review missing safety, rights, promotion and disclosure evidence before any actual use. Nacre is fictional: a complete private audit packet is neither a released listing nor permission for real product, commercial, legal or supplier action.

What you will learn

  • Bind each extracted attribute to its intended product, variant, source, version, unit and permitted use.
  • Retain the slate width conflict and refuse photo-based measurement or cross-variant transplantation.
  • Draft a bounded source-linked description while holding unsupported safety, compatibility and environmental claims.
  • Separate item and mandatory delivery arithmetic from stock, promotion and trader-information gaps.
  • Recover after a code-owned correction or withdrawal using current permission and fresh checks and review.
  • Report a fixed-denominator comparison and complete audit packet without suppressing held evidence or approving real use.

Who it is for

Adult store operations, ecommerce, merchandising and customer-support staff, leads and reviewers. No actual retailers, products, customers or workplace events are used.

Before you start

  • Understand basic AI limitations and the difference between evidence and generated wording.
  • Understand data minimisation and separate source-use, processing and supplier decisions.
  • Optional offline rehearsal uses Python 3.10+ standard library; the printed records and complete keys provide a non-AI route.

Jurisdiction and study scope

These are selected reference pathways. Choose the relevant pathway before applying the exercises. This does not determine applicable law or provide worldwide coverage.

All pathway limits
  • Actual applicability unresolved: Identify product, territory, audience, trader, processing purpose, source rights and provider before actual use. The fictional lab selects no real duties, approvals or licences.
  • Scoped Great Britain and UK guidance: Selected CMA207/CAP/pricing/CTSI/OPSS/IPO/ICO guidance. Guidance is not full operative law or product clearance. CMA pricing page and PDF dates remain unreconciled; operative DMCC section226 retrieval failed. ICO DUAA review and consumer/B2B exceptions remain material.
  • Northern Ireland and other territories: Selected OPSS NI factsheet and scope reference, including EU2023/988 application from13December2024. Future NI product-liability changes after9December2026 are not treated as operative on1October2026. Product-specific, EU and other-territory qualified review remains open.

Owner-commissioned original teaching prepared with AI assistance. Nacre records, proposed products, notices, roles and sample are authored fiction. No actual retail experience, practitioner qualification, supplier authenticity, rights, identity, model or product approval is asserted.

Learn in your browser · Chapter 01 of 08

01

Product identity and supplier evidence

Admit the right synthetic evidence for a particular variant and proposed use.

A truthful catalogue starts with a specific product identity and a bounded question. For Alder Shelf, the question is whether supplied fictional records support a narrow description of the amber organiser, not whether an attractive household photograph makes the whole range suitable for every shelf. Separate product family, variant, attribute, unit, source and proposed use before editing prose. The amber and slate organisers share a material family but have different records. Their similarity is not permission to transfer measurements. A catalogue editor should be able to point from each retained attribute to an admitted source, explain the limit of that source, and show what has not been established.

The first artefact is an admission ledger, not a polished paragraph. For N01, list S01 as the amber supplier specification and S02 as the separate amber photo label. Both begin at revision 1 with inclusive teaching expiry day 3 and the fictional training rights label. S01 supplies painted steel, widthMm 240 and finish amber. S02 supplies PHOTO-AMBER, a caption without scale inference, catalogue-illustration-only permission and fictional-training-only label rights. These fields answer different questions. A specification supplies an attribute; a photo label identifies an intended representation and its stated use. Neither makes the organiser an actual tested product or authenticates a real supplier.

Product identity is a join condition. A join condition describes what must match before two records may support the same claim. Here, case, variant and source associations are fixed: N01 joins S01 and S02 for AMBER; N02 joins S03 and S04 for SLATE. Do not join on a familiar word such as organiser, a matching colour impression or a convenient filename. An ordinary shortcut takes the first available width and inserts it everywhere. An advanced editor first checks the variant relationship, preserves source identifiers, then compares the actual attributes. The consequence is practical: an incorrect join can make a well-written listing describe a different physical item.

A record can be available without being usable for the intended action. N04 carries S06, an internal concept-photo label with internal-only rights and unknown label rights. N08 carries withdrawn S11, an obsolete amber specification showing 230 mm. Both are supplied to expose boundaries. Their presence in the fixture does not authorise descriptive enrichment. Nacre holds their analytical use before semantic body admission. That conservative rule is a fictional exercise choice, not a complete legal determination about every photograph or withdrawn document. Preserve a ledger row for the hold so that the editor cannot silently lose the source and later mistake absence for approval.

Be precise about what the program has already read. Nacre opens and parses one aggregate fixture file when constructed. That file contains every source body, including the records that later receive holds. Its bodyAdmissions counter measures semantic accesses during checks, not physical file reads or a confidentiality barrier. An analyst who reports that no excluded bytes entered memory would misdescribe the implementation. The honest report says that the local teaching file was read once, then selected records were rejected from analytical use. A real system needing separation before access would require a different architecture and independent verification; this finite workshop does not demonstrate that architecture.

Reading, extracting, describing and publishing are separate proposed actions. A source may support an internal field comparison without settling commercial image reuse, supplier disclosure, external model processing or a public listing. State the receiving artefact and audience: a private synthetic evidence packet for an adult editor. The initial permissions in Nacre are assumed strings and a current version number. They are not authenticated identities, contractual source rights or a lawful basis. Do not turn the availability of a constructor or an export method into organisational approval. The local exercise can illustrate a proposed separation of responsibilities while leaving the actual retailer's authority decisions open.

The useful ledger columns are case, variant, source, kind, revision, expiry day, admitted fields, proposed use, disposition and unresolved check. Fill them concretely. N01 contains AMBER, S01/S02, supplier_spec/photo_label, revision 1, expiry 3, three named specification fields and a scoped illustration label; disposition is an attributes draft. N08 contains AMBER, S11, supplier_spec, revision 1, expiry 3 and withdrawn status; disposition is a hold rather than a second current width. The unresolved check for both is actual source authenticity and real-use approval. Those checks are not solved by keeping tidy columns, but columns make the unmade decisions visible to the next reviewer.

Supplier evidence is evidence about a stated source assertion, not automatically proof of the physical world. S01 is code-owned fictional material. Its exact value can be checked against the contract, yet no steel has been examined and no organiser has been measured. In a real catalogue, the reviewer would distinguish supplier declarations, technical files, independent observations, sample measurements and permitted photographs, and would decide which were appropriate for the particular claim. Do not invent such a hierarchy as a universal law. The workshop's narrower lesson is that the source type and verification scope should survive into the output rather than disappear when wording becomes fluent.

Source currentness needs two separate identifiers. A record's revision describes the supplied source version; the session version describes the workflow state against which permissions and checks apply. S01 starts at source revision 1 and the session starts at version 1. A later WIDTH_NOTICE changes the code-owned width and increments both the relevant record revision and the session version. A source revision match alone cannot revive an old packet review. Conversely, merely typing the current session version does not make a drifted source body match its approved content. Maintain both relationships in the ledger and ask which precise change invalidated the older conclusion.

An instruction inside a source note remains source material. The fixture deliberately includes a passive note urging publication. An editor should treat it as an example of irrelevant imperative wording, not an instruction from the teacher, controller or retailer. Nacre does not execute such notes. This demonstrates a finite handling convention, not general resistance to every prompt injection or hostile Python program. A paper workflow should similarly distinguish the task instruction, evidence body and analyst comment. Copying an imperative note into the control channel would change who appears to be giving orders and bypass the evidence question that the catalogue was meant to answer.

Privacy minimisation is relevant when real supplier or customer details accompany product data, but product data is not automatically personal data. The reviewed ICO source, ico-minimisation, concerns UK GDPR personal data and carries a Data (Use and Access) Act review notice. Our fictional fixture has no actual people. For a real inventory, choose the necessary product fields before importing names, contact histories or unrelated customer messages. Record an actual purpose and handling review instead of assuming that catalogue enrichment needs every available field. The lab does not select a legal basis, establish anonymisation or show that a provider may receive an unrestricted supplier file.

Consumer-facing descriptions also require scope-aware source review. The reviewed cma-ucp guidance describes the DMCC unfair-trading provisions for practices from 6 April 2025, and distinguishes different kinds of prohibited practice. It is regulator guidance, not the statute or a complete assessment of a listing. An attempted operative-section retrieval failed and remains documented. Our ledger method is original teaching that helps expose unsupported attributes and omissions; it does not implement the legal tests. Business-to-consumer, business-to-business, product-specific and jurisdictional contexts can change what review is needed. Keep the source date and those limitations beside the claim rather than imply that a single citation approves publication.

A paper verification pass is deliberately slower than asking for a persuasive paragraph first. Take N01, identify AMBER, read the three exact specification fields, preserve S02's distinct image-use limit, and write the draft disposition with no safety or availability promise. Take N08 next, record withdrawal and the historical 230 mm value only as excluded evidence. Compare the two rows: the second record is not a tie-breaker or corroboration for the first. The advanced result is a smaller, auditable attribute set. Its quality comes from retained relationships and honest exclusions, not from the number of adjectives or the absence of visible holds.

Finish this chapter by checking what another adult reviewer could reconstruct without asking you. They should find the exact sources and versions, the proposed internal use, the three admitted N01 attributes, the photo-use limitation and the N08 exclusion. They should also see that reading the aggregate fixture preceded semantic admission and that no actual source authenticity was tested. If a colleague cannot identify why a source was held, the ledger is incomplete even if the description sounds correct. This is the discipline that later chapters apply to contradictions, descriptions, safety and rights. It supports accountable paper reasoning while leaving real professional and publication decisions with the appropriate people.

  1. Define an internal amber-attribute question and intended output.
  2. Inventory case/variant/source IDs and source kinds.
  3. Record revision, expiry, rights and withdrawal before semantic use.
  4. Retain admitted fields with their source, rather than embellish.
  5. Record held sources and real-use unknowns.
  6. Verify that another reviewer can reconstruct each relationship.

Scroll sideways to see every column.

Product identity and supplier evidence · Table 1
Case/sourceSupplied basisPrivate disposition
N01/S01+S02AMBER painted steel;240mm;amber;scoped illustration labelATTRIBUTES_DRAFT only
N04/S06Internal-only photo;label rights unknownHOLD rights
N08/S11Withdrawn amber230mmHOLD withdrawn
text · 6 lines
ROLE: Adult Nacre source-ledger editor.
CONSTRAINTS: Invented Alder Shelf records only; internal paper packet, no real catalogue/model/customer action.
PROCESS: Fill N01/N04/N08 identity and source-use rows; separate available data from admitted use.
VERIFICATION: N01=S01/S02 AMBER; N04 internal-only; N08 withdrawn; fixture read precedes semantic gates.
OUTPUT SCHEMA: case;variant;source;kind;revision;expiryDay;rights;withdrawn;admittedFields;disposition;unknown;realUse=HOLD.
FAILURE MODES: Hold wrong joins, reused withdrawn records, source-note commands and invented actual rights approval. Paper prompt only.

Product identity and supplier evidence

Evidence advances only within its scope; real use stays held.

Specific variantSource ledgerAdmitted fieldsPrivate draftUnknown real useHeld source
Steps
  • Specific variant: Paper reasoning only
  • Source ledger: Paper reasoning only
  • Admitted fields: Paper reasoning only
  • Private draft: Paper reasoning only
  • Unknown real use: Paper reasoning only
  • Held source: Keep the gap visible
Relationships and conditions
  1. Specific variant to Source ledger: check before continuing
  2. Source ledger to Admitted fields: check before continuing
  3. Admitted fields to Private draft: check before continuing
  4. Private draft to Unknown real use: check before continuing
  5. Admitted fields to Held source: unsupported or conflicting: hold

Diagram text equivalent: Specific variant then Source ledger then Admitted fields then Private draft then Unknown real use. At Admitted fields, unsupported or conflicting evidence branches to Held source. The branch remains in the packet; no actual approval is supplied.

Try it yourself · Activity 01

25-35 minutes, unpiloted planning estimate

Fill the variant admission ledger

Fill N01/N04/N08 rows with variant,source,revision,expiry,use and disposition. Explain the aggregate-read limit and add the complete block16 paper prompt.

  1. Define an internal amber-attribute question and intended output.
  2. Inventory case/variant/source IDs and source kinds.
  3. Record revision, expiry, rights and withdrawal before semantic use.
  4. Retain admitted fields with their source, rather than embellish.
  5. Record held sources and real-use unknowns.
  6. Verify that another reviewer can reconstruct each relationship.

Which convenient edit would hide the strongest unresolved evidence gap? Explain the consequence and how you would keep it visible.

Worked answer

Filled initial paper ledger, session1/day1: N01|AMBER|S01 supplier_spec+S02 photo_label|both revision1,expiry3,training,not withdrawn|S01 material=painted steel,widthMm=240,finish=amber;S02 PHOTO-AMBER,caption without scale inference,catalogue-illustration-only,fictional-training-only label rights|ATTRIBUTES_DRAFT for private synthetic work|actual source authenticity and commercial-use approval unresolved. N04|AMBER|S06 photo_label|revision1,expiry3,internal-only,not withdrawn|no semantic body use admitted|HOLD(RIGHTS_SCOPE)|actual intended image/label permission unresolved. N08|AMBER|S11 supplier_spec|revision1,expiry3,training,withdrawn|230mm retained as excluded historical fixture content,not a current attribute|HOLD(WITHDRAWN). The aggregate fixture was already opened/parsed at construction; these holds are semantic-use gates,not pre-IO protection. The complete six-component paper prompt is supplied in block16; the receiving output is a private ledger,not publication. Full supplied paper prompt: ROLE: Adult Nacre source-ledger editor. CONSTRAINTS: Invented Alder Shelf records only; internal paper packet, no real catalogue/model/customer action. PROCESS: Fill N01/N04/N08 identity and source-use rows; separate available data from admitted use. VERIFICATION: N01=S01/S02 AMBER; N04 internal-only; N08 withdrawn; fixture read precedes semantic gates. OUTPUT SCHEMA: case;variant;source;kind;revision;expiryDay;rights;withdrawn;admittedFields;disposition;unknown;realUse=HOLD. FAILURE MODES: Hold wrong joins, reused withdrawn records, source-note commands and invented actual rights approval. Paper prompt only.

Try it yourself · Activity 02

15-20 minutes, unpiloted planning estimate

Six answered chapter review questions

Attempt before reading the separate key. 1. Why is a variant token a join condition rather than a cosmetic label? 2. What does N01 supply and what remains unestablished? 3. Why retain N08 instead of silently deleting it from the ledger? 4. What did the fixture open establish about confidentiality? 5. Why reject the publication instruction in a note? 6. What limits accompany the ICO/CMA source use?

  1. Answer with evidence and scope.
  2. Compare the exact supplied key after attempting.

Which answer would become misleading if its source or scope qualifier were removed?

Worked answer

1. It binds each source assertion to the receiving product variant; shared organiser/material words do not permit attribute transfer. 2. S01 supplies painted steel,240mm,amber;S02 a scoped fictional illustration label. Actual supplier authenticity,safety,commercial rights and publication remain unestablished. 3. Its withdrawn historical230mm value must not be reused as current corroboration; the explicit hold records the reason and exclusion. 4. Nothing about pre-IO confidentiality: the aggregate was read/parsed before semantic gates; bodyAdmissions counts analytical accesses. 5. A source note has no controller/task authority; treating it as an instruction would bypass the bounded evidence question. 6. ICO covers personal data and has a DUAA review notice; CMA is scoped guidance/current-practice context,with operative retrieval gap,not blanket legal approval.

Apply what you learned · Practice

Why is a variant token a join condition rather than a cosmetic label?

Explanation and answer

It binds each source assertion to the receiving product variant; shared organiser/material words do not permit attribute transfer. It binds each source assertion to the receiving product variant; shared organiser/material words do not permit attribute transfer.

Practice only. This does not count towards your exam or certificate.

Next chapter

Learn in your browser · Chapter 02 of 08

02

Extraction, units and variant contradictions

Preserve values, units and variant relationships before resolving catalogue discrepancies.

Extraction is the controlled movement of a particular source field into a proposed catalogue field. It is not the conversion of every plausible detail into a product fact. For Nacre, the source values are structured and code-owned; there is no optical character recognition, computer vision or language model. This matters because a successful exact comparison tells us about a fixed local representation, not about extraction reliability from varied supplier files. The paper method nevertheless transfers a useful habit: preserve the original value, its unit and its variant before normalising anything. Only then can an editor explain whether a mismatch is a parsing error, conflicting evidence or an unsupported inference.

Begin with the measurement schema. widthMm is an integer measured in millimetres; it is not a free-text width field into which 24, 240 mm and True may be treated as interchangeable values. The initial amber specification supplies widthMm 240. The proposed candidate row supplies 24, which is wrong against that field. A human might suspect a centimetre conversion was intended, but suspicion does not authorise a silent repair. Keep the observed candidate value and name the discrepancy. A separate authorised process must decide whether there is a conversion error and what evidence supports the corrected value. Nacre performs only its exact, finite comparison.

Exact types can protect a field comparison from deceptively convenient coercion. In some programming contexts a boolean can behave numerically, but stock count True is not the supplied count 4 and source revision True is not the integer revision 1. Nacre rejects wrong source-body types and inappropriate version types. An ordinary import often lets spreadsheet or parser defaults decide these meanings. An advanced import records its expected type, unit, missing-value representation and permitted range, then tests examples that violate each expectation. That is a proposed engineering discipline for catalogue quality, not proof that the entire application is secure or that every product has a valid measurement.

N02 makes a different problem visible. S03 says the slate organiser is 260 mm wide; S04 records an invented bench observation of 255 mm. Both refer to SLATE. The correct paper result is a variant-width conflict, not a calculation of 257.5 mm, a preference for the nicer number or substitution of amber's 240 mm. Arithmetic cannot establish which evidence describes the intended physical item. The reviewer needs the actual measurement method, scope, variant identifier and authority to resolve the contradiction. In this synthetic workshop those additional facts are not supplied, so the conflict remains visible and the check is held.

Separate a discrepancy from its cause. We can name the difference of 5 mm between 260 and 255, but cannot conclude that a caliper was miscalibrated, a supplier lied, paint changed the width or the organiser was measured at a different point. Those are possible questions for a real investigation, not supplied findings. A catalogue record should therefore carry the two values, their sources, the contested field, the proposed use and the unresolved next check. The reviewer should not overwrite the original supplier assertion merely to make a single database cell convenient. The unresolved row is part of the output, not an embarrassment to remove.

Variant evidence requires a complete join before a value comparison. AMBER and SLATE are explicit invented variant tokens, not a colour-recognition result. S01 belongs to AMBER and cannot resolve N02, even though both variants use painted steel. Material agreement does not establish equal dimensions, accessories, load capacity or supplier revision. Compare the three relations separately: source to variant, field to unit, and assertion to receiving claim. A broken relation can make a numerically valid value irrelevant. This is why source provenance must be preserved alongside values rather than relegated to a general reference list that does not identify which variant it supports.

A photo can clarify appearance while leaving measurement unresolved. S02's caption expressly permits no scale inference. A thumbnail, a perspective view or a familiar household object is not a calibrated measurement scale. The paper reviewer should not count pixels and present the result as an exact catalogue width. Even an actual photograph with a scale would need an appropriate measurement method and verification for the proposed claim. Here the lab processes no image bytes at all; PHOTO-AMBER is a fictional label. Keep that distinction clear when describing what the exercise demonstrates. Image appearance, image permission and measurement evidence are three different questions.

The source-admission sequence is also part of verification. Nacre checks current session version, assumed role, running state and current assumed permission before it attempts semantic access. It then compares source metadata, checks withdrawal, expiry and rights, and compares the exact body against code-owned approved values. A wrong source revision or variant therefore fails before its body admission counter increments. A wrong admitted body increments that counter before being rejected. The aggregate fixture has already been read at construction in both cases. These distinctions let the reviewer describe a real test precisely without inflating a semantic gate into a confidentiality claim.

An import batch should not quietly process its acceptable prefix and bury a malformed tail. Nacre's check_batch expects a nonempty list of distinct known case strings. Duplicate case IDs, an unknown ID or a malformed entry cause a preflight hold, clear previous case results and produce no semantic body admissions for that batch. This is a finite chosen contract, not a general standard for every catalogue import. Its educational value is that the reviewer must define duplicate handling before counting outcomes. If duplicates could count twice in a quality denominator, the apparent error rate might improve merely because a correct record was repeated.

Missing values need their own representation. A missing safety load is not zero kilograms, a missing compatibility statement is not compatible with nothing, and absent technical documentation is not a successful check with an empty attachment. N03 retains those unknowns. Import rules should state how null, empty text, missing keys and explicit negative findings differ for the receiving decision. Nacre uses fixed bodies so it can reject unexpected structures; a real extraction system would need broader schema rules and independent testing. Do not use a default that converts every uncertain field into a value which looks easy to compare but makes the catalogue less truthful.

The reviewed wcag-images source adds a technical presentation consideration. WCAG 2.2 is a W3C Recommendation, with purpose-equivalent alternatives for meaningful non-text content and a rule against using colour as the only cue. It is not itself a universal retail law or a completed accessibility assessment. In the proposed ledger, write AMBER and SLATE as text labels rather than require a reviewer to distinguish swatches alone. If an image communicates a variant or defect, its alternative should carry the relevant function. Actual user, keyboard and assistive-technology verification remain separate from the fact that this paper workflow has readable labels.

A useful verification schema therefore keeps rawSourceValue, proposedValue, unit, variant, sourceId, sourceRevision, sessionVersion, disposition and unresolvedCheck. Fill it for N02 rather than merely list the column names. The first row contains S03, SLATE, revision 1, widthMm 260 and session 1. The second contains S04, SLATE, revision 1, widthMm 255 and session 1. Both units are mm; disposition is HOLD because the current sources disagree. The unresolved check asks for an authorised resolution of the specific width evidence. It does not ask the model to choose a number or manufacture a measurement certificate.

Average work reports that the schema passed, therefore the value is reliable. Advanced work asks which part passed and which conclusion follows. A record may have the right keys and types while its content is wrong; a value may match an approved fictional source while the actual supplier remains unauthenticated. A conflict can survive both schema and identity checks. Make these intermediate results visible so a reviewer can challenge the final disposition. The best outcome of N02 is not a completed width field. It is a well-defined reason why that field must remain unresolved and which evidence would be needed outside this exercise.

For the hands-on task, keep the candidate amber value 24, source amber value 240, slate supplier value 260 and slate observation value 255 in four distinct rows. Classify the first pair as a candidate-field discrepancy and the second as unresolved source conflict. Do not call both an extraction error, because their evidential relationships differ. Verify that the rows retain variant, source, unit and intended use. Then explain why neither a photo nor averaging can settle N02. The task succeeds when another reviewer can distinguish an incorrect proposed value from contested original evidence without guessing your hidden assumptions or treating a held case as a successful catalogue update.

  1. Preserve raw candidate and source values.
  2. Bind each value to variant/source/revision and unit.
  3. Check exact type and declared field semantics.
  4. Separate candidate discrepancy from conflicting source assertions.
  5. Keep N02 held without averaging or amber substitution.
  6. Document the concrete unresolved evidence check.

Scroll sideways to see every column.

Extraction, units and variant contradictions · Table 2
Variant/fieldEvidence valuesDecision
AMBER widthMmCandidate24;S01 source240;integer mmCandidate discrepancy
SLATE widthMmS03 supplier260;S04 observation255;mmHOLD conflict
AMBER photoPHOTO-AMBER caption;no scale inferenceNot a width measurement
text · 6 lines
ROLE: Adult variant-evidence reviewer.
CONSTRAINTS: Four supplied width values only; no physical measurement/image analysis/model run.
PROCESS: Bind candidate24 and S01 source240 to AMBER; S03 260 and S04 255 to SLATE.
VERIFICATION: Exact integer mm,source IDs/revisions and distinct candidate discrepancy/source conflict.
OUTPUT SCHEMA: variant;source;rawValue;unit;proposedValue;disposition;unresolvedCheck.
FAILURE MODES: No averaging, cross-variant transfer, pixel scale inference or invented cause. Paper prompt only.

Extraction, units and variant contradictions

Evidence advances only within its scope; real use stays held.

Bind variantPreserve raw valuesCompare units/typesSeparate disagreementRecord unresolved checkHeld discrepancy
Steps
  • Bind variant: Paper reasoning only
  • Preserve raw values: Paper reasoning only
  • Compare units/types: Paper reasoning only
  • Separate disagreement: Paper reasoning only
  • Record unresolved check: Paper reasoning only
  • Held discrepancy: Keep the gap visible
Relationships and conditions
  1. Bind variant to Preserve raw values: check before continuing
  2. Preserve raw values to Compare units/types: check before continuing
  3. Compare units/types to Separate disagreement: check before continuing
  4. Separate disagreement to Record unresolved check: check before continuing
  5. Compare units/types to Held discrepancy: unsupported or conflicting: hold

Diagram text equivalent: Bind variant then Preserve raw values then Compare units/types then Separate disagreement then Record unresolved check. At Compare units/types, unsupported or conflicting evidence branches to Held discrepancy. A same-SLATE source conflict is distinct from a wrong variant join. The branch remains in the packet; no actual approval is supplied.

Try it yourself · Activity 03

25-35 minutes, unpiloted planning estimate

Distinguish candidate error from source conflict

Supply the four AMBER/SLATE width rows,units/source bindings and decisions. Explain why averaging,photo scale and amber substitution cannot resolve N02.

  1. Preserve raw candidate and source values.
  2. Bind each value to variant/source/revision and unit.
  3. Check exact type and declared field semantics.
  4. Separate candidate discrepancy from conflicting source assertions.
  5. Keep N02 held without averaging or amber substitution.
  6. Document the concrete unresolved evidence check.

Which convenient edit would hide the strongest unresolved evidence gap? Explain the consequence and how you would keep it visible.

Worked answer

Filled paper rows: AMBER|candidateRows.widthMm|proposed24|integer mm|compare S01 revision1 source240|candidate discrepancy; retain24 and source240 and do not invent conversion cause. AMBER|S01|source240|integer mm|bounded attribute for N01 only. SLATE|S03 revision1|supplier260|mm|SLATE width conflict. SLATE|S04 revision1|invented observation255|mm|same unresolved conflict. Difference260-255=5mm does not establish its cause or a resolved width;257.5mm average and AMBER240 substitution are rejected. PHOTO-AMBER contains no scale measurement. Current analytical N02 expectation is HOLD(VARIANT_WIDTH_CONFLICT); this paper key is not an executed measurement or model result. Proposed next check: an authorised product-data reviewer should confirm the width measurement definition and intended SLATE variant, then obtain current same-variant supplier and measurement evidence with source revision, method and scope recorded. Keep N02 HOLD and the cause unknown until that evidence resolves the conflict; this is a review proposal, not an executed measurement or approval. Full supplied paper prompt: ROLE: Adult variant-evidence reviewer. CONSTRAINTS: Four supplied width values only; no physical measurement/image analysis/model run. PROCESS: Bind candidate24 and S01 source240 to AMBER; S03 260 and S04 255 to SLATE. VERIFICATION: Exact integer mm,source IDs/revisions and distinct candidate discrepancy/source conflict. OUTPUT SCHEMA: variant;source;rawValue;unit;proposedValue;disposition;unresolvedCheck. FAILURE MODES: No averaging, cross-variant transfer, pixel scale inference or invented cause. Paper prompt only.

Try it yourself · Activity 04

15-20 minutes, unpiloted planning estimate

Six answered chapter review questions

Attempt before reading the separate key. 1. Why is24 versus240 different from260 versus255? 2. Can the5mm difference establish measurement error? 3. Why reject an AMBER width as N02 recovery? 4. What does a boolean source value demonstrate? 5. Why hold a duplicate batch before processing N01? 6. What can the photograph contribute to width checking?

  1. Answer with evidence and scope.
  2. Compare the exact supplied key after attempting.

Which answer would become misleading if its source or scope qualifier were removed?

Worked answer

1. The first is an incorrect candidate against its supplied source; the second is conflicting source evidence for SLATE with no supplied resolution. 2. No; it identifies disagreement,not cause,truth or measurement authority. 3. S01 belongs to a different variant; material agreement does not bind its dimensions to SLATE. 4. An exact field type mismatch; bool cannot be silently used as a numeric catalogue field. 5. The finite contract rejects duplicate/invalid case entries without partial semantic admissions and clears earlier batch results. 6. Only its supplied label/caption; there are no image bytes or calibrated scale analysis,and S02 forbids scale inference.

Apply what you learned · Practice

Why is24 versus240 different from260 versus255?

Explanation and answer

The first is an incorrect candidate against its supplied source; the second is conflicting source evidence for SLATE with no supplied resolution. The first is an incorrect candidate against its supplied source; the second is conflicting source evidence for SLATE with no supplied resolution.

Practice only. This does not count towards your exam or certificate.

AMBER N01 uses S01 width 240 mm and a separate S02 photo label. SLATE N02 retains supplier 260 mm and observation 255 mm as an unresolved width conflict. No averaging or cross-variant transfer.
Compare within the variant. The fictional amber attribute draft does not resolve the slate width conflict. Values are source assertions, not actual product measurements or model results.

Illustration description: The left text-labelled AMBER/N01 panel shows painted steel, amber finish and S01 supplier width 240 millimetres, with a separate S02 photo label and ATTRIBUTES_DRAFT only. The right text-labelled SLATE/N02 panel shows S03 supplier width 260 millimetres and S04 invented observation 255 millimetres for the same slate variant, with HOLD width conflict. The bottom band rejects cross-variant transplantation and averaging; a 5 millimetre disagreement is not its cause or a resolved width. Photo labels supply no scale measurement. All records and observations are invented. Both variant names and all decisions are written in text; colour is supplementary. These images do not depict actual products or prove physical size, safety, rights or supplier authenticity.

Next chapter

Learn in your browser · Chapter 03 of 08

03

Truthful descriptions and claim provenance

Keep each description claim within its evidence and return unsupported wording to review.

A defensible description is assembled from admitted attributes with their limits intact. It is not an invitation to add whatever would make a listing more persuasive. Nacre's initial allowed wording is: Amber painted-steel organiser, 240 mm wide. Fictional catalogue training example. The sentence is intentionally modest. It describes the amber supplier fields while marking the fictional setting; it does not promise load capacity, universal fit, safety, sustainability, availability or approval. The exercise uses an exact accepted string so an adult can inspect the whole boundary. It does not claim that arbitrary wording can be assessed by a general semantic truth detector.

Separate the attribute ledger from the description draft. S01 supplies material painted steel, widthMm 240 and finish amber. The material is not bamboo, the width is not 24 mm and the finish is not inferred solely from a photograph. Record these facts before proposing wording. A reader should be able to reverse the draft into the three source fields without introducing an extra attribute. When a sentence cannot be reversed into supplied evidence, identify its added claim explicitly. This is especially useful for adjectives that appear harmless but imply performance, suitability or comparative quality to an ordinary reader.

Claim provenance is field-specific. In the finite lab, audit_claim accepts only the keys material, widthMm and finish after a current N01 check. The bounded output names S01 and the supplied value. Passing the key material does not admit a separate statement that painted steel is the strongest household material, suitable for food contact or harmless to children. The source contains no such claims. An ordinary workflow treats a verified material noun as permission to embellish nearby sentences. An advanced editor draws a separate claim row for each added proposition and asks what documentary evidence, scope and qualified review would be needed to support it.

Consider the proposed phrase compatible with every shelf. It contains a universal compatibility claim, not merely a friendly synonym for organiser. Width alone cannot establish the shape, attachment system, weight, surface condition or intended use of every shelf. N03 explicitly leaves compatibility and load evidence unknown. The reviewer should reject the claim rather than insert a footnote that customers should check for themselves and call the original statement supported. A caveat can communicate a genuine limitation; it cannot magically supply absent evidence. The finite workflow holds unsupported claims and preserves the missing evidence as a separate question for real professional review.

Consider eco-friendly painted steel. S01 establishes a material assertion within the fictional record, not the organiser's whole environmental impact. Manufacturing, coating, transport, use, repair and disposal could matter to a broader claim. The reviewed cma-green checklist supports keeping scope and current evidence clear and cautions against broad environmental claims based on partial information. It is older explanatory guidance, read with current CMA207 rather than treated as a replacement statute. Our original teaching conclusion is to keep the material description separate from an environmental assertion. No life-cycle evidence, comparative assessment or qualified approval is supplied for this invented organiser.

Non-broadcast advertising rules are another scoped input. The reviewed cap-misleading source requires substantiation for objective claims and considers omissions and overall impression. It is a regulatory code within its remit, not legislation or a universal approval of every catalogue. Apply it here as a reason to ask whether wording implies an additional fact, then record that question for the appropriate real review. A list of true individual attributes can still be arranged to suggest unsupported safety or superiority. Conversely, this workshop does not declare every promotional adjective unlawful; it teaches evidence tracing without deciding a live advertising complaint.

A prompt can make this discipline explicit without pretending that it has been executed. State the role as an adult catalogue evidence editor; constrain the input to the supplied synthetic N01 fields; require a process of claim splitting and source matching; verify variant, type, unit, revision and permitted use; ask for a schema containing the proposed wording, source field and unresolved gap; and specify failure behaviour. The failure behaviour is to hold unsupported statements, not to invent a stronger source or apologise while still outputting the claim. This is supplied paper prompt design. Nacre is ordinary deterministic Python and does not send the prompt to a model.

Description checking is deliberately downstream of source checking. draft_description requires current N01 verification. Calling it with elegant text before checking N01 is held because the context is missing. Calling it with unsupported text clears the prior description and packet review. That clearing rule prevents an old successful draft from being mistaken for the result of the new failed attempt. It does not erase all historical exported copies or make mutable memory a secure store. Explain the exact current-state effect rather than describe the workshop as a durable approval system. Readers need to know which artefact can still be relied upon after a failed operation.

Changes also affect wording. The code-owned WIDTH_NOTICE updates S01's width from 240 to 245 mm and increments the relevant source revision and session version. It clears assumed permission, checks, description and review. After renewal and a fresh N01 check, the allowed description says 245 mm. Changing the caller's returned draft object to 245 is not the same operation: it changes only that copy and does not revise the stored source. This distinction exposes a common editing error. A corrected-looking sentence is insufficient unless its provenance and the current evidence state support the correction.

Different outputs need different vocabulary. ATTRIBUTES_DRAFT means a finite variant fact set is available for private teaching work. DESCRIPTION_DRAFT means an exact allowed local sentence was returned. BOUNDED_PACKET_REVIEW means assumed review of a current packet with every case visible. None means listing approved, product safe, photograph licensed for all uses or customer disclosure complete. Public-ready wording belongs to a later integration and qualified review process. Using stage names carefully is an operational habit: it reduces the chance that a downstream colleague reads a draft label as a publication decision, but the lab itself cannot enforce that colleague's behaviour.

Write a rejection ledger as well as an accepted draft. For N01, accepted material, width and finish each point to S01. For compatibility with every shelf, record unsupported and point to the missing compatibility evidence in N03. For eco-friendly, record absent environmental substantiation. For in stock now, record that the separate N05 stock snapshot does not promise current availability. This ledger is more informative than a confidence score because it states the exact proposition and why it is held. No numeric confidence is supplied by the lab, and inventing one would add an apparently precise fact without a defined measurement process.

Description and consumer disclosure are related but distinct. A short accurate sentence does not fill N07's missing trader details or cancellation terms. The reviewed ctsi-online guidance addresses business-to-consumer online selling and pre-contractual information, with exemptions and jurisdiction limits. It does not mean that every workshop sentence must contain the entire contract, nor that a platform automatically provides every required disclosure. Our catalogue packet should name the separate unknown instead of falsely presenting a concise description as a complete offer. Actual consumer-facing design and legal review must determine the appropriate disclosure content, placement, timing and applicable product conditions.

An advanced editor checks the receiving reader's likely interpretation alongside the literal fields. Does the adjacency of a badge imply certification? Does a heading turn a material field into a safety promise? Does a cropped photo conceal the slate variant label? Those are original review questions, not measured outcomes or automatic lab features. They belong in a human checklist with evidence and a responsible decision owner. Nacre accepts one narrow string, so do not claim it performs this broader review. The useful comparison is that average work asks whether a sentence sounds convincing, while advanced work asks exactly which assertion the reader may take away.

Complete the paper exercise by separating four candidate statements. Retain the exact fictional description. Reject safe for children because there is no supporting safety evidence. Hold universal compatibility because N03 leaves it unresolved. Hold an environmental superlative because neither S01 nor the other records supply the comparative or life-cycle evidence. Show the accepted source field beside each retained phrase and a concrete missing check beside each rejected one. Then propose an appropriately constrained paper prompt and explain its limits. Success is an auditable small draft and visible rejection reasons, not a simulated publication, a persuasive unsupported paragraph or an assertion that a model has proved truthfulness.

  1. Split proposed description into material claims.
  2. Match each accepted attribute to current N01/S01.
  3. Reject compatibility, safety or comparative claims lacking evidence.
  4. Use the exact allowed synthetic sentence only after current verification.
  5. Record rejected wording and missing checks in a separate ledger.
  6. Recheck version/source binding after changes; no publication inference.

Scroll sideways to see every column.

Truthful descriptions and claim provenance · Table 3
Proposed wordingEvidenceDecision
Exact allowed N01 descriptionS01 material,widthMm,finishPrivate draft only
Safe for childrenN03 safety evidence absentUnsupported
Compatible with every shelfCompatibility nullHOLD missing evidence
Eco-friendlyNo life-cycle evidenceHOLD unsupported environmental claim
text · 6 lines
ROLE: Adult catalogue claim editor.
CONSTRAINTS: Current synthetic N01/S01 facts only; realUse=HOLD; no model or publication.
PROCESS: Split each claim; match material,widthMm,finish; retain exact allowed sentence; record rejected safety/compatibility/environmental additions.
VERIFICATION: AMBER,revision/session current,240mm initially; no additional unsupported assertion.
OUTPUT SCHEMA: proposedPhrase;source;field;value;scope;acceptedDraft;rejectedClaim;missingCheck.
FAILURE MODES: Clear unsupported draft; retain missing evidence instead of inventing stronger substantiation. Paper prompt only.

Truthful descriptions and claim provenance

Evidence advances only within its scope; real use stays held.

Split claimsMatch S01 fieldsExact private wordingRetain rejection ledgerCurrent state recheckUnsupported claim
Steps
  • Split claims: Paper reasoning only
  • Match S01 fields: Paper reasoning only
  • Exact private wording: Paper reasoning only
  • Retain rejection ledger: Paper reasoning only
  • Current state recheck: Paper reasoning only
  • Unsupported claim: Keep the gap visible
Relationships and conditions
  1. Split claims to Match S01 fields: check before continuing
  2. Match S01 fields to Exact private wording: check before continuing
  3. Exact private wording to Retain rejection ledger: check before continuing
  4. Retain rejection ledger to Current state recheck: check before continuing
  5. Exact private wording to Unsupported claim: unsupported or conflicting: hold

Diagram text equivalent: Split claims then Match S01 fields then Exact private wording then Retain rejection ledger then Current state recheck. At Exact private wording, unsupported or conflicting evidence branches to Unsupported claim. The branch remains in the packet; no actual approval is supplied.

Try it yourself · Activity 05

25-35 minutes, unpiloted planning estimate

Prepare a truthful draft and rejection ledger

Classify the exact description,safe-for-children,universal compatibility and eco-friendly proposals. Supply a narrow draft,rejection reasons and the six-component block16 paper prompt; explain width-change recovery.

  1. Split proposed description into material claims.
  2. Match each accepted attribute to current N01/S01.
  3. Reject compatibility, safety or comparative claims lacking evidence.
  4. Use the exact allowed synthetic sentence only after current verification.
  5. Record rejected wording and missing checks in a separate ledger.
  6. Recheck version/source binding after changes; no publication inference.

Which convenient edit would hide the strongest unresolved evidence gap? Explain the consequence and how you would keep it visible.

Worked answer

Filled paper claim ledger: exact sentence Amber painted-steel organiser, 240 mm wide. Fictional catalogue training example.|S01 material,widthMm,finish|retain as initial private draft after current N01 check. Safe for children|no safety substantiation in S01;N03 load/technical evidence missing|reject unsupported safety assertion. Compatible with every shelf|N03 compatibility null|HOLD,no universal fit evidence. Eco-friendly|only material assertion,no life-cycle/comparative environmental evidence|HOLD,do not infer environmental benefit from painted steel. In stock now is also not supported by a dated N05 snapshot as a current promise. Use block16 full paper prompt,including role,constraints,process,verification,schema and failure behaviour; no prompt/model run or listing approval claimed. After WIDTH_NOTICE,renew current assumed permission and freshly check N01; the exact draft must instead say245mm. Full supplied paper prompt: ROLE: Adult catalogue claim editor. CONSTRAINTS: Current synthetic N01/S01 facts only; realUse=HOLD; no model or publication. PROCESS: Split each claim; match material,widthMm,finish; retain exact allowed sentence; record rejected safety/compatibility/environmental additions. VERIFICATION: AMBER,revision/session current,240mm initially; no additional unsupported assertion. OUTPUT SCHEMA: proposedPhrase;source;field;value;scope;acceptedDraft;rejectedClaim;missingCheck. FAILURE MODES: Clear unsupported draft; retain missing evidence instead of inventing stronger substantiation. Paper prompt only.

Try it yourself · Activity 06

15-20 minutes, unpiloted planning estimate

Six answered chapter review questions

Attempt before reading the separate key. 1. Which three audit_claim keys have finite support? 2. Why cannot a compatibility caveat substantiate every shelf? 3. Why keep environmental claims separate from material? 4. What must change after WIDTH_NOTICE? 5. What follows an unsupported draft_description call? 6. Why is a short accurate description not a complete offer?

  1. Answer with evidence and scope.
  2. Compare the exact supplied key after attempting.

Which answer would become misleading if its source or scope qualifier were removed?

Worked answer

1. material,widthMm,finish after current N01 verification,each supplied by S01. 2. It does not supply the absent relationship evidence; a limitation cannot turn an unsupported universal assertion into a verified fact. 3. A material assertion alone lacks broader life-cycle/current comparative environmental evidence. 4. Current permissions/checks/draft/review are cleared; after renewal/fresh N01 verification the exact allowed width wording is245mm. 5. The prior draft and packet review are cleared; no successful new draft or publication approval is implied. 6. N07 trader/cancellation information remains absent; description and applicable consumer disclosures are separate review questions.

Apply what you learned · Practice

Which three audit_claim keys have finite support?

Explanation and answer

material,widthMm,finish after current N01 verification,each supplied by S01. material,widthMm,finish after current N01 verification,each supplied by S01.

Practice only. This does not count towards your exam or certificate.

Next chapter

Learn in your browser · Chapter 04 of 08

04

Safety, compatibility and rights gaps

Keep safety, compatibility, imagery and label rights in separate evidence lanes.

Safety, compatibility, image rights and label rights are different evidence questions. A catalogue team should not merge them into a single approved flag. An organiser could have a correctly transcribed material description while its load evidence is absent, an image could accurately show a variant while its commercial reuse scope is unresolved, and an attractive label could imply an unauthorised endorsement. Start by listing the actual claim and intended action in each lane. The Nacre fixtures then expose gaps without asking an adult learner to test a physical object, select a real conformity regime or decide that a product can lawfully be sold.

N03 supplies S05, a safety-gap body with loadKg null, compatibility null and technicalFile missing. The correct interpretation is three unresolved fields, not zero load capacity, incompatibility with every shelf or a passed safety check without paperwork. Each invented value would change the catalogue meaning. A cautious reviewer keeps the source, the missing element, the intended safety or compatibility claim and the required next evidence together. Here no technical file, competent safety assessment or actual product-specific standard is supplied. The lab therefore returns a hold rather than a product authorisation. That disposition protects the teaching boundary without claiming that a simple field test establishes compliance.

The reviewed opss-safety guidance distinguishes catalogue records from the appropriate demonstration of product safety, including technical documentation, labelling and instructions. Its page was updated on 21 July 2026 and explains that GB and NI arrangements can differ. It also notes future NI product-liability changes after 9 December 2026, not an already current rule on 1 October. These scoped facts motivate asking which product, market and role must be reviewed. They do not identify the specific standards or marking requirements for our invented organiser. The course has not performed a consolidated statutory or product conformity assessment.

The separate opss-ni factsheet is expressly about Northern Ireland and the EU general product safety regime applying there from 13 December 2024, with scope, exemption and transition distinctions. Do not apply every line as a GB-wide rule or infer that a fictional product has the necessary responsible economic operator. A jurisdiction selector in a real proposed workflow should preserve market, product category, supply-chain role and relevant dates before requesting qualified review. In this adult workshop, the selector is a paper question, not an executed legal engine. The unresolved category and market-specific requirements remain part of the packet's real-use hold.

Compatibility needs its own evidence because a measurement is not a relationship. Knowing amber width 240 mm does not tell us what loads it can bear, how it attaches, whether another component fits or whether a particular surface is appropriate. A broad statement such as suitable for any kitchen shelf adds conditions and user expectations that the supplier fields do not contain. Record the exact intended compatibility claim before asking for evidence. An average reviewer searches for a reassuring adjective. An advanced reviewer describes the relationship that needs verification and refuses to convert a single size field into a universal suitability assertion.

N04 demonstrates a separate rights failure. S06 is an internal concept-photo label; its rights metadata is internal-only and its label rights are unknown. The finite rule holds it before semantic body admission, although the aggregate fixture was already parsed. Do not pretend that the image was analysed or that its label was identified by computer vision. The point is that an available asset locator and a matching product appearance would not themselves settle the intended publication use. A real team must examine actual rights and licence scope for the precise action, together with any other relevant contractual or personal-data restrictions.

The reviewed ipo-images notice explains that ownership and permitted use of web imagery need careful attention and that exceptions can apply. It is explanatory UK guidance, updated in 2021, not a conclusive legal view of a particular case. Our internal-only hold is a deliberately conservative fictional rule; it is not a teaching claim that every use always requires new permission or that linking and copying are identical acts. Distinguish possession, display, reproduction, modification and redistribution in the rights ledger. Identify what the supplied permission actually covers and retain uncertainty instead of expanding a useful licence phrase into every future use.

S02 and S06 show why rights cannot be inferred from the product match. S02 is linked to AMBER and provides a fictional catalogue-illustration-only licence, while S06 describes an internal concept sketch and has internal-only rights. Both could sound relevant to the same organiser, but their use dispositions differ. Neither licence has been verified against a real rights holder. Retain the photo ID, variant, caption, intended action, rights scope and separate label-rights statement. The review should be able to explain why one synthetic illustration label can accompany a private teaching draft and why the other remains held without assuming either is commercially cleared.

An endorsement or conformity mark is also an assertion with a source and scope. A badge next to a product can imply more than the surrounding prose literally says. Do not add a certification logo because the material field matches, because a supplier uses a familiar abbreviation or because the photograph has space for a premium-looking label. Nacre supplies no actual test report, authorised mark, standard compliance or supplier accreditation. The original paper method is to ask what the mark would communicate, who may authorise it and what current evidence covers the product and market. Until those questions are answered outside the exercise, the implied claim remains unsupported.

Use a three-lane review packet. The first lane contains factual attributes with their admitted source fields. The second contains safety and compatibility questions with missing documentation and the exact proposed wording that cannot yet be supported. The third contains image and label use with current rights scope and unresolved authority. A human reviewer may accept the completeness of this packet while rejecting publication. Nacre reflects that distinction by keeping realUseStatus HOLD in reviewed and exported packets. Its role strings are assumed, so a caller passing data_reviewer or catalogue_chair is not evidence that a qualified or independent professional has performed the actual review.

Withdrawal needs a specific artefact relationship. PHOTO_WITHDRAWAL changes code-owned S02's withdrawn flag and source revision, increments the session version and clears current permissions, checks, description and review. Renewal cannot unwithdraw it. N01 consequently loses the full required evidence combination, even though the underlying S01 attributes may still be individually present. A correct paper recovery records the changed photo status and does not reuse an old complete N01 conclusion. This is a finite local state rule, not a live rights notice, an authenticated revocation channel or a mechanism that recalls every copy previously handed to a colleague.

No local history can substitute for durable authority. A returned export is a deep copy; editing or retaining it does not update the current source. A fresh process reloads the original fictional fixture, resetting the withdrawal and clock. The lab deliberately demonstrates this reset so learners do not mistake memory for an enforced secure store. A real withdrawal process needs appropriate persistence, distribution, access controls, review and verification that this exercise does not provide. Old copies can still exist outside the object. A polite notice in the export can state a limitation, but cannot technically prevent an unauthorised downstream reuse.

For the paper task, fill the safety and rights matrix rather than write seek approval everywhere. The N03 row names S05, absent loadKg, absent compatibility, missing technicalFile, unsupported safe-for-children wording and a required actual product safety review. The N04 row names S06, internal-only rights, unknown label rights, proposed catalogue display and a required scoped rights decision. The N01 row names S02, its narrow fictional illustration permission and unresolved actual commercial use. Each row has an owner function, not an invented signatory or credential. That level of detail helps the next person understand which evidence gap matters and why.

The advanced outcome is a packet that allows different experts to answer different questions without losing the original exclusions. A catalogue editor checks field provenance; a rights owner or appropriate adviser addresses the intended asset use; an appropriately qualified product reviewer addresses safety and compatibility; publication authority remains separate. These are proposed responsibilities, not certifications supplied by the course. Reflect on which apparently harmless edit could collapse two lanes, such as replacing missing with approved or using a product match to infer an image licence. Success means the truthful narrow attributes remain useful while real-use uncertainty remains explicit, visible and resistant to being mistaken for a completed approval.

  1. Name safety, compatibility, image and label claims separately.
  2. Record absent technical evidence without inventing negative findings.
  3. Select the intended market/product/supply-chain questions for qualified review.
  4. Compare the exact intended image use with its supplied rights scope.
  5. Record each gap and appropriate owner function without fabricated credentials.
  6. Retain real-use HOLD and explain current-state/old-copy limits.

Scroll sideways to see every column.

Safety, compatibility and rights gaps · Table 4
LaneSupplied gapNext real review
N03/S05 safetyloadKg null;compatibility null;technicalFile missingProduct-specific qualified review
N04/S06 rightsInternal-only image;label rights unknownScoped rights/label-use decision
N01/S02 illustrationFictional catalogue-illustration-only;training label rightsActual commercial-use review open
text · 6 lines
ROLE: Adult safety-and-rights packet coordinator, not a qualified approval signatory.
CONSTRAINTS: N03/S05,N04/S06,N01/S02 synthetic evidence only; actual product/market rights remain unreviewed.
PROCESS: Fill three separate safety/rights rows; name exact gap,intended use and appropriate real reviewer.
VERIFICATION: Null is unknown,internal-only is not catalogue permission,fictional illustration scope is not actual licence clearance.
OUTPUT SCHEMA: case;source;lane;proposedClaimOrUse;suppliedEvidence;unknown;nextReview;realUse=HOLD.
FAILURE MODES: Hold invented safety findings,universal compatibility,mark approvals and unauthorised image use; no real action. Paper prompt only.

Safety, compatibility and rights gaps

Evidence advances only within its scope; real use stays held.

Separate lanesRecord supplied evidenceName missing checkAssign real reviewPrivate held packetUnsupported approval
Steps
  • Separate lanes: Paper reasoning only
  • Record supplied evidence: Paper reasoning only
  • Name missing check: Paper reasoning only
  • Assign real review: Paper reasoning only
  • Private held packet: Paper reasoning only
  • Unsupported approval: Keep the gap visible
Relationships and conditions
  1. Separate lanes to Record supplied evidence: check before continuing
  2. Record supplied evidence to Name missing check: check before continuing
  3. Name missing check to Assign real review: check before continuing
  4. Assign real review to Private held packet: check before continuing
  5. Name missing check to Unsupported approval: unsupported or conflicting: hold

Diagram text equivalent: Separate lanes then Record supplied evidence then Name missing check then Assign real review then Private held packet. At Name missing check, unsupported or conflicting evidence branches to Unsupported approval. The branch remains in the packet; no actual approval is supplied.

Try it yourself · Activity 07

25-35 minutes, unpiloted planning estimate

Build the three-lane safety and rights matrix

Fill N03/S05,N04/S06,N01/S02 matrix with intended claim/use,missing evidence,hold and real reviewer function. Explain PHOTO_WITHDRAWAL and process/copy limits.

  1. Name safety, compatibility, image and label claims separately.
  2. Record absent technical evidence without inventing negative findings.
  3. Select the intended market/product/supply-chain questions for qualified review.
  4. Compare the exact intended image use with its supplied rights scope.
  5. Record each gap and appropriate owner function without fabricated credentials.
  6. Retain real-use HOLD and explain current-state/old-copy limits.

Which convenient edit would hide the strongest unresolved evidence gap? Explain the consequence and how you would keep it visible.

Worked answer

Filled paper matrix: N03|S05|safety/compatibility|safe for children or fits every shelf|loadKg=null,compatibility=null,technicalFile=missing|HOLD(MISSING_SAFETY_AND_COMPATIBILITY)|actual product-specific competent safety/compatibility review,not zero load or universal incompatibility. N04|S06|image/label rights|catalogue display|internal-only rights;label rights unknown|HOLD(RIGHTS_SCOPE)|actual scoped rights decision,not a real licence/signature. N01|S02|illustration use|PHOTO-AMBER with caption|catalogue-illustration-only and fictional-training-only label rights|bounded private teaching illustration context,actual commercial clearance unresolved. Real-use status stays HOLD in all lanes. PHOTO_WITHDRAWAL changes S02 withdrawn/source revision and session version,clears permissions/checks/draft/review; renewal cannot restore rights. Old exported copies remain and fresh processes reload original fixture,so this is not durable revocation. GB/NI/product/date selection remains a qualified review question,not a legal-engine result. Full supplied paper prompt: ROLE: Adult safety-and-rights packet coordinator, not a qualified approval signatory. CONSTRAINTS: N03/S05,N04/S06,N01/S02 synthetic evidence only; actual product/market rights remain unreviewed. PROCESS: Fill three separate safety/rights rows; name exact gap,intended use and appropriate real reviewer. VERIFICATION: Null is unknown,internal-only is not catalogue permission,fictional illustration scope is not actual licence clearance. OUTPUT SCHEMA: case;source;lane;proposedClaimOrUse;suppliedEvidence;unknown;nextReview;realUse=HOLD. FAILURE MODES: Hold invented safety findings,universal compatibility,mark approvals and unauthorised image use; no real action. Paper prompt only.

Try it yourself · Activity 08

15-20 minutes, unpiloted planning estimate

Six answered chapter review questions

Attempt before reading the separate key. 1. What does null loadKg mean here? 2. Why do N01 and N04 photo-use decisions differ? 3. Does the IPO notice make every use require permission? 4. Which dated NI distinction is necessary on1October2026? 5. What does a passed assumed reviewer role establish? 6. What happens to old copies and fresh-process state after withdrawal?

  1. Answer with evidence and scope.
  2. Compare the exact supplied key after attempting.

Which answer would become misleading if its source or scope qualifier were removed?

Worked answer

1. Unknown/not supplied; neither zero rated load nor demonstrated safety. 2. S02 has a narrow fictional illustration scope;S06 is internal-only with unknown label rights; product relevance does not merge permissions. 3. No; scope,ownership/licences and exceptions matter; it is explanatory guidance,not a conclusive decision on a live case. 4. NI general product safety applies from13December2024; the OPSS future liability note after9December2026 is not yet a current rule on1October. 5. Only the finite role string/state condition; not professional competence,identity or legal/product approval. 6. Old exports remain separate copies; a fresh process resets to original fixture,so local withdrawal is not durable enforcement.

Apply what you learned · Practice

What does null loadKg mean here?

Explanation and answer

Unknown/not supplied; neither zero rated load nor demonstrated safety. Unknown/not supplied; neither zero rated load nor demonstrated safety.

Practice only. This does not count towards your exam or certificate.

Next chapter

Learn in your browser · Chapter 05 of 08

05

Price, stock and promotion separation

Keep commercial snapshots and transactional promises separate, with missing promotion and disclosure evidence visible.

A commercial catalogue combines several questions that look similar on a screen but need different evidence. What is the item? What is the total price? How many units did a stock record show? Can a customer obtain one now? Does a promotion describe a defensible comparison? A description assistant can make these answers sound equally certain. A responsible editor keeps their sources and time limits visible. In Nacre, the amber organiser's material and width belong to a specification. Its price and stock belong to two separate snapshots. None of those records supplies a reservation, a real sale or a customer commitment.

Start with the precise proposition rather than the number alone. S07 records an item amount of 1800 pence and mandatory delivery of 300 pence, with tax included and currency GBP. The total for the supplied fictional example is therefore 2100 pence, or GBP21.00. Writing only GBP18.00 changes the proposition from a total to an item component. Writing GBP21.00 without describing its source time suggests a current commercial offer that this workshop has not established. The calculation is simple; controlling what the calculated result means is the harder catalogue task.

S08 supplies a different proposition: its stock count was four at teaching day1, with reservation false. It does not say four are available to this reader, that an order has been accepted, or that replenishment will arrive tomorrow. Joining S07 and S08 into N05 produces COMMERCIAL_SNAPSHOT, with availabilityPromise false. The output deliberately retains the price record and stock record separately. A well designed brief makes that separation readable to a human reviewer. It does not hide the difference behind a single badge reading ready, available or verified, because those badges could imply an action the sources do not support.

Time must attach to each source, not only to the page as a whole. S07 and S08 both expire after teaching day2, inclusively: they remain eligible on day2 and are expired on day3. Renewing assumed permission cannot extend that expiry. A real retailer would need an accountable freshness policy and current approved system records rather than this invented two-day limit. The principle transfers: permission to inspect a source is a different condition from whether its content still supports the intended claim. A permitted old stock file does not become current because somebody rereads it.

Price presentation also depends on the transactional setting. The reviewed cma-prices summary says total-price information normally includes unavoidable charges, including a calculable mandatory delivery charge. It is CMA guidance, with a landing-page update dated7 January2026; the linked PDF filename carries a different February date, so this course does not claim a complete version reconciliation. A product team should check the full applicable guidance for complex circumstances. In Nacre the delivery amount is known, compulsory and fixed, which makes the narrow arithmetic unambiguous. That does not resolve every real discount, delivery or territorial price question.

Promotion evidence needs its own ledger. S09 contains wasPence3000 and nowPence1800, but referencePeriod is missing. N06 therefore holds with MISSING_REFERENCE_PRICE_PERIOD. The presence of both amounts permits arithmetic on their difference; it does not establish that the earlier amount was a genuine relevant selling price over an appropriate period. Calling the claim forty per cent off would add a commercial comparison whose reference has not been substantiated. Nor can the item amount silently replace the total amount when mandatory delivery remains relevant. First define exactly what is being compared and where the missing support lies.

A material omission can remain important even when every displayed number is accurate. S10 lacks cancellation terms and trader details. N07 holds with INCOMPLETE_CONSUMER_DISCLOSURE. The price total cannot repair those missing fields, and a sentence describing the organiser cannot supply them. The reviewed cma-ucp source is CMA207 guidance on the current DMCC unfair-trading regime, including misleading actions, omissions and invitations to purchase. It distinguishes contexts and tests rather than declaring every incomplete sentence unlawful. Operative section226 retrieval failed in the source preparation, so the workbook does not present a full consolidated statutory analysis.

Use the description as one component of a proposed listing, not as the listing itself. A draft can truthfully say painted steel and240mm while the transaction still lacks material information. The ctsi-online guidance explains pre-contractual information for online consumer sales and the need for goods to match descriptions. Its principally GB scope, Northern Ireland review needs and distinctions between current unfair-practice rules and retained redress provisions matter. Real product, audience, platform and exemption questions require qualified review. Nacre's separate holds are a teaching method for exposing gaps, not a decision that every actual trader has the same legal obligations.

The ordinary shortcut is to ask an assistant to make a listing persuasive using all available fields. That instruction gives no priority to current evidence, necessary charges, a missing reference period or the difference between stock and availability. An elite request names the commercial proposition and its boundaries: produce an internal snapshot for the amber variant using S07 and S08, keep the item and delivery components visible, preserve their dates and reject a reservation promise. It separately asks for a promotion-gap record from S09 and a disclosure-gap record from S10. Better instructions reduce ambiguity; they do not authenticate suppliers or establish rights.

Follow a repeatable sequence when reviewing commercial copy. Identify the variant and intended audience first. Separate price components, currency and tax treatment next. Record the time and expiry of each commercial source. Calculate only the permitted total, without inventing a discount history or availability promise. Surface missing promotional and consumer information in a distinct gap register. Finally, give the reviewer an explicit internal outcome and stop condition. This sequence prevents a valid arithmetic result being used as a shortcut around other decisions. It also gives a second reviewer enough information to disagree with the proposed presentation for a reason.

Nacre checks finite records rather than arbitrary market data. check_case('N05',1) initially returns the specified snapshot after its source checks. audit_claim accepts only material, widthMm and finish from checked N01; it is not a way to approve price, stock, safety or promotional wording. That distinction prevents an editor from treating one successful method as a general truth detector. A real workflow may need separate product, price, inventory, rights and publication owners. Their responsibilities should be documented before drafting, because an assistant cannot discover the organisation's authority merely by reading a plausible role title in a prompt.

Do not average incompatible records to make a commercial decision easier. N02's slate widths260mm and255mm remain a conflict. The amber specification cannot resolve it, and a photo cannot turn a stock or pricing record into a measurement. This matters commercially because a listing that mixes variants can offer the price for one item alongside the dimensions of another. Preserve variant identity in the commercial header and every source binding. If that identity changes, pause the affected proposal and rebuild its evidence rather than choosing the most convenient attributes from different records.

An accountable stop is a useful output. A customer-support team may need to explain why a listing proposal is awaiting review, while a merchandising team needs to know which evidence to obtain. Write specific reasons: current stock unknown after expiry; promotion reference period absent; trader and cancellation details absent; publication permission unresolved. Avoid a vague label such as needs more research, which leaves the next owner guessing. The proposed route should identify a responsible function and the evidence question, without sending messages, changing stock, reserving products or importing customer details during this invented exercise.

Personal data does not become necessary simply because it appears beside a product file. The ico-minimisation guidance requires personal data to be adequate, relevant and limited to what is necessary for the purpose; its DUAA review notice remains visible in the source register. Nacre contains no real people. For a real catalogue review, a customer name or supplier employee's private contact details may be unnecessary for the price calculation or variant check. Define required fields in advance and keep the evidence request focused. This is a design question, not a lawful-basis decision or a claim that every product record falls under UK GDPR.

Imagine a colleague proposes the following internal line: amber organiser GBP18, four available, save forty per cent, returns explained on request. A good challenge identifies four separate unsupported steps rather than simply rewriting it with softer adjectives. Replace the omitted mandatory delivery with the supported total snapshot; replace available with the recorded stock count and no promise; hold the promotion until its reference-period evidence is addressed; and retain the missing consumer information as a gap. The worked replacement is still an internal teaching record. No real listing, contract, customer assurance or campaign has been approved by making its wording more careful.

Before handing the record to another person, explain what would make it cease to be usable. Expiry, changed price evidence, changed variant identity, a withdrawal or a missing permission can invalidate the current proposition. The reviewer should see both the bounded facts and the unresolved actions. That is why the finite packet carries all held cases rather than filtering them out. Commercial clarity means showing the limits of a valid figure alongside the figure itself. It lets an accountable owner decide what further evidence and review are needed, while keeping the assistant's contribution within the permitted internal drafting purpose.

  1. Identify variant, audience and intended commercial proposition.
  2. Separate item price, mandatory charges, currency and tax treatment.
  3. Record price and stock source times and inclusive teaching expiry.
  4. Calculate the supported total while retaining stock as a separate snapshot.
  5. Keep promotion/disclosure gaps and unresolved real permissions explicit.
  6. Hand over an internal result with responsible review questions and stopping conditions.

Scroll sideways to see every column.

Price, stock and promotion separation · Table 5
Prompt componentConcrete paper instruction
RoleInternal commercial-evidence editor for the fictional amber organiser.
ConstraintsSupplied Nacre records only; no reservation, real customer, promotion approval or publication.
ProcessRead S07/S08 separately; calculate1800+300; assess S09 and S10 gaps independently.
VerificationBind variant/revisions/asOfDay/expiry; verify integer pence and distinguish stock count from promise.
Output schemaVariant; price components; total; price time; stock/time; promotion gap; disclosure gap; owner questions; real-use HOLD.
Failure modesHold missing/stale charges, unsupported availability, absent reference period and consumer fields; do not complete them.

Scroll sideways to see every column.

Price, stock and promotion separation · Table 6
Worked approachRequestEvidence consequence
Average requestMake an amber listing: GBP18, four available, forty per cent off.Omits mandatory delivery and adds an availability/promotion conclusion.
Elite paper requestReturn an internal2100pence total and separate day1 stock4 snapshot; hold S09 referencePeriod and S10 missing disclosures.Specific scope, times and gaps; still no commercial release.

Separate commercial facts from release

A supported total and stock count do not close promotional or disclosure gaps.

S07 price componentsS08 stock recordN05 bounded snapshotN06/N07 remain heldInternal owner review
Steps
  • S07 price components: 1800pence item plus300pence mandatory delivery, tax included, day1 snapshot.
  • S08 stock record: Count4, day1, reservation false; no availability promise.
  • N05 bounded snapshot: 2100pence total and separate stock facts; expiryday2 inclusive.
  • N06/N07 remain held: Missing reference period, cancellation terms and trader details.
  • Internal owner review: Actual transaction/jurisdiction/rights/currentness/publication still unresolved.
Relationships and conditions
  1. S07 price components to N05 bounded snapshot: Add known mandatory charge
  2. S08 stock record to N05 bounded snapshot: Retain separate dated fact
  3. N05 bounded snapshot to N06/N07 remain held: Do not infer missing support
  4. N06/N07 remain held to Internal owner review: Keep real use held

Text equivalent: S07 supplies item1800pence plus mandatory delivery300pence, total2100, as a day1 price snapshot. S08 independently supplies stock4 with no reservation. N05 retains both with inclusive day2 expiry. N06 lacks promotion reference-period evidence; N07 lacks cancellation and trader information. Keep those holds and actual publication/jurisdiction/currentness questions in the internal review.

Try it yourself · Activity 09

60 minutes

Repair a commercial proposal without inventing permission

A colleague proposes: amber organiser GBP18, four available, forty per cent off; add cancellation details later. Supply a completed internal commercial record, gap ledger and six-part paper prompt. Explain what changes on teaching day3 after permission renewal.

  1. Success criterion: show S07 item1800 plus mandatory delivery300=total2100pence, with GBP/tax/time and inclusive day2 expiry.
  2. Keep S08 count4/asOfDay1/reservation false separate, without an availability promise.
  3. Supply filled N06 reference-period and N07 trader/cancellation gap entries, not invented replacements.
  4. Give all six concrete prompt components and proposed accountable review questions without collecting real details.
  5. Explain expiry on day3, why renewal does not extend it, and why real publication stays held.

Which statement would a customer interpret as an action or entitlement, although the underlying source only supplies a historical number?

Worked answer

Completed paper commercial record: retailer Alder Shelf (invented); variant AMBER; initial session version1/day1; S07 revision1/asOfDay1/expiryDay2; item1800pence + mandatory delivery300pence = total2100pence (GBP21.00), taxIncluded=true, currency=GBP. S08 revision1/asOfDay1/expiryDay2: count4, reservation=false. N05 disposition COMMERCIAL_SNAPSHOT; availabilityPromise=false. These are supplied invented facts, not an offer or a current real stock promise.

Filled gap ledger: N06/S09@1: was3000/now1800pence recorded, referencePeriod absent; HOLD(MISSING_REFERENCE_PRICE_PERIOD). Proposed commercial owner must review actual reference-price evidence and relevant presentation context; no discount claim is approved. N07/S10@1: mainCharacteristics organiser, cancellationTerms and traderDetails absent; HOLD(INCOMPLETE_CONSUMER_DISCLOSURE). Proposed responsible trader/commercial reviewer must supply and check applicable information; the total price cannot fill it. Real price/stock updates, licensing, safety and publication permission remain unresolved.

Six-part paper prompt: Role: internal commercial-evidence editor for fictional amber, no selling authority. Constraints: S07/S08/S09/S10 only, no customer data, invented availability, real listing or model execution. Process: separate item/delivery, calculate2100, retain stock/time separately, then record promotion and disclosure gaps. Verification: bind AMBER/revision1/asOfDay1/expiry2, integer pence, tax/currency; verify missing reference period and terms. Output schema: variant; price components/total/time; stock/time/reservation; N06/N07 gap/reason; proposed owner question; real-use HOLD. Failure behaviour: hold missing/stale evidence, unsupported reservation/discount, and any attempt to turn the internal record into an approved transaction.

Day3 rehearsal: advance_day(3,1) creates session2 and clears permission/checks/draft/review; renew_permissions(2) permits fresh teaching checks without extending expiry. check_case('N05',2) holds EXPIRED, because S07 expired after day2 before semantic admission; it does not establish a zero price or zero stock. N01 can still be eligible through day3, but any complete packet needs all eight current checks and fresh assumed review. N06/N07 remain held; actual use remains HOLD.

Scroll sideways to see every column.

Price, stock and promotion separation · Table 7
Review questionAnswer after your attempt
Why is the supported total2100pence?The supplied1800 item and calculable mandatory300 delivery are separate components of that fictional total.
What does stock4 establish?A separate day1 count with no reservation or availability promise.
Can renewal make the snapshot current on day3?No. Its inclusive day2 expiry is not extended by permission.
Why is N06 held despite two prices?Reference-period evidence is missing; arithmetic does not substantiate the comparison.
Does a correct total close N07?No. Trader and cancellation details remain missing.
Does CMA guidance certify a listing?No. Scope, context, exemptions and actual evidence need qualified review; operative section226 retrieval failed.

Apply what you learned · Practice

On day3 a colleague renews Nacre permission and labels the old stock4 available now. Which response is justified?

Explanation and answer

N05 remains EXPIRED; renewal cannot establish present availability. Expiry removes eligible snapshot support, not the existence of the historical count or a real stock quantity.

Practice only. This does not count towards your exam or certificate.

N05 separates 1800 pence item plus 300 pence mandatory delivery, total 2100 pence, from stock 4 at teaching day 1. No reservation or availability promise. Safety, rights, promotion, disclosure and withdrawal rows remain held; changes need fresh current checks/review.
Price evidence and a stock snapshot are separate. The supplied fictional £18 item plus £3 mandatory delivery totals £21; a count of 4 is not a current availability promise. Other evidence gaps and realUseStatus HOLD remain visible.

Illustration description: In the PRICE/S07 lane, 1800 pence item plus 300 pence mandatory delivery equals 2100 pence total, with tax included, currency GBP and teaching day 1 context. This is not a real price update or listing release. In the separate STOCK/S08 lane, count 4 is a teaching day 1 snapshot, not a reservation or availability promise. Both price and stock records have inclusive teaching expiry day 2. A distinct panel preserves N03 load/compatibility/technical-file gaps, N04 internal-only photo/unknown label rights, N06 missing promotion reference period, N07 missing trader/cancellation disclosures, and N08 withdrawn obsolete specification as held rows. A state-change band names WIDTH_NOTICE and PHOTO_WITHDRAWAL: either increments session version and clears permissions, checks, draft and review. Renew current assumed permission, then perform fresh checks and packet review; renewal cannot extend expiry or rights. Export remains a private audit packet with realUseStatus HOLD. Role strings are not authentication, and old copies/fresh-process reset are not durable revocation. All amounts, stock and sources are invented; no actual model, customer, product or legal release claim.

Next chapter

Learn in your browser · Chapter 06 of 08

06

Human review, correction and withdrawal

Recover current evidence after a fixed correction or withdrawal while preserving review limits and historical copies.

A correction is more than replacing a number in a sentence. A catalogue record has dependencies: the source that supplied the number, permission to use that source, checks completed against the current version, descriptive drafts, review records and copies already shared. When one dependency changes, the editor must identify which outputs relied on it. Nacre deliberately makes this visible. WIDTH_NOTICE changes the amber specification from240mm to245mm in memory and increments the session version. It also clears permission, every check, the description and the packet review. A polished sentence carrying the new number is not sufficient evidence of recovery.

Keep source revision and session version distinct. The width notice increments S01's source revision because its recorded width changes. The same transition increments the session version, which governs permission and review across the workflow. Other unchanged source records retain their own original revisions. A packet may therefore contain several source revisions under one session version. Treating the two numbers as interchangeable can cause a reviewer to approve the wrong state or suggest that every source was corrected. Record both in a real proposal and explain which source changed, why the change was accepted and which dependent outputs were rebuilt.

The code-owned notice is a fixed teaching correction, not an open correction interface. apply_change accepts WIDTH_NOTICE and PHOTO_WITHDRAWAL only, once each per process, with the current version and assumed controller role. It changes both the loaded records and the code-owned approved comparison records in memory. That permits the new245mm value to be checked against the intended fictional notice. It does not allow a supplier email, a model suggestion or a manually edited width to become authorised evidence. The original fixture file remains240mm. This narrow mechanism teaches dependency handling without claiming to verify arbitrary real corrections.

Photo withdrawal is a different event. PHOTO_WITHDRAWAL marks S02 withdrawn and increments its source revision and the session version. N01 then holds after current permission renewal because its required photo source is withdrawn. S01 may have been admitted first, so the case can make one semantic body admission before the second source is refused. That is not a zero-read case or a confidentiality barrier: construction already parsed the whole file. The important bounded result is that the withdrawn photo cannot support a current attribute-and-photo draft. Renewal grants no new rights and cannot reverse withdrawal.

Meaningful review must concern the current evidence state. review_packet needs all eight current case results and at least one eligible N01 or N05 result. It returns BOUNDED_PACKET_REVIEW, with realUseStatus HOLD. The reviewer role is a plain assumed string, not an authenticated practitioner, supplier, manager or legal signatory. In an actual organisation, establish competence, conflicts, authority and evidence access separately. A useful review note names remaining gaps and challenged propositions instead of recording only approved. Nacre can enforce a finite sequence; it cannot establish that a real person understood the material or had authority to release a listing.

A handled failed retry can remove an earlier analytical result. If check_case is called for known N01 with an invalid version, the method clears N01's old check, any description and packet review before returning HOLD. A source failure records a current held result after clearing the earlier one. This protects the teaching sequence from carrying an old success through a newly discovered problem. An unknown case behaves differently: it clears packet review but does not identify an existing case to remove. Recovery should follow the actual failure reason rather than assuming that every unsuccessful call erases exactly the same part of state.

Python can reject a call before the method runs. An unknown keyword or missing required argument causes argument-binding TypeError, so the method body's invalidation does not occur. The independent review exercised this distinction for all twelve public methods with full deep-state comparisons. It is therefore inaccurate to teach that every failed invocation clears all approvals. The current packet may survive that pre-body error. This survival is not new permission; it only shows that the intended operation was never executed. A real wrapper should define how it reports and handles such errors rather than relying on an ambiguous failed-call label.

Export validation has another distinct purpose. export_packet checks the existing current assumed review without clearing it. A wrong-role or stale-version export attempt returns HOLD and preserves the current state, allowing an authorised teaching retry. The returned object is a deep copy, with explicit real-use gaps. Editing that copy cannot change the current stored packet, but the workflow cannot recall it from a reader's notes or another process. Mark old copies historical when communicating a correction. In a real service, notification, access withdrawal, retention and audit procedures need separate design and tests; a copied Python dictionary supplies none of those services.

Stopping is an explicit state transition. stop_workflow uses the current version, marks the workflow stopped, increments version and invalidates permission, checks, description and review. A permitted width or withdrawal change may occur while stopped, as may day advancement. Neither resumes the workflow. resume_workflow must be called explicitly against the then-current stopped version; it increments version again and still leaves permission absent. The next steps are current permission renewal, fresh checks and new review. This avoids the dangerous inference that accepting corrected evidence means the paused process has already resumed normal operation.

Failed mutators leave the entire deep state unchanged. Invalid changes, duplicate changes, non-forward days, boolean versions, wrong roles and inappropriate stop or resume calls return held outcomes without applying part of a transition. This is different from analytical invalidation. An editor should describe both the rejected attempt and the last valid state rather than saying a correction partially succeeded. For example, a second WIDTH_NOTICE must not increment source revision again or repeatedly add five millimetres. The teaching code applies its one prescribed notice once. A real correction service needs an equally clear idempotence and provenance policy for its own events.

Current permission is not equivalent to current evidence. renew_permissions clears old analytical results and review even when the session version has not changed. It neither extends S07/S08 beyond inclusive day2 nor other source eligibility beyond inclusive day3. By day4, all checks can be recorded as held, but review_packet returns HOLD(NO_ELIGIBLE_FACTS). With a withdrawn photo and expired commercial snapshots, zero eligible facts can arise already on day3. A reviewer should know why the facts disappeared rather than treating a renewed permission label as a substitute for fresh source content or recovered image rights.

Correction communication should be scoped. A width notice does not resolve the slate contradiction, establish load capacity or complete consumer disclosures. A photo withdrawal does not imply that every supplier fact is false. Write a change record with the affected source, previous and current value or disposition, reason, source revision, session version, dependent outputs and proposed owner route. Then show which gaps remain. This keeps the correction useful without overstating it. A catalogue team can otherwise spend effort resolving a narrow defect while an assistant silently expands that success into a much broader assurance statement.

Supplier and provider exit controls are related to correction because the organisation must retain usable evidence when a tool changes. Ask how approved source records, gap decisions, permissions and review notes can be exported in an understandable format. Ask who can remove access and which copies may remain outside recall. A portable Nacre packet is a demonstration of a data structure, not proof of a successful migration, provider deletion or sovereign control. Real deployment architecture, contracts, processing locations, training use, access controls and export tests must be reviewed. No assistant prompt can settle those arrangements by calling a provider local or trusted.

Retain useful history without presenting it as current authority. The teaching lab has no durable audit store; a new object or process restores version1, day1, original width240mm, unwithdrawn S02, running state and initial assumed permission. The independent child-process test actually demonstrated that reset. This is appropriate for repeatable learning but unsuitable as a real withdrawal ledger. A real system needs a separately designed durable source of truth and checks on recovery from it. Historical notes may explain what happened, but they must not be treated as an automatically valid current approval after a restart.

The average correction request says change240 to245 everywhere and keep the approval because it is only five millimetres. It overlooks permission, evidence freshness, exact descriptive wording, unchanged gaps and old copies. An elite request asks for a scoped correction rehearsal: apply the fixed notice at current version, show invalidated dependencies, explicitly renew permission, perform all eight checks, draft the exact current sentence and request a fresh assumed review. It records that actual safety, licensing and publication remain unresolved. Its success is a correct, explainable internal transition, not a claim that the product now meets any real measurement or legal standard.

Prepare recovery before a failure occurs. Keep a human-readable record of expected holds, a paper copy of the variant/source ledger and a way for staff to continue reviewing evidence without an assistant. Decide who may pause work and how disagreement is escalated. These are proposed organisational practices, not live Nacre capabilities. A team that can explain the last valid state, the rejected operation and the remaining review route is better placed to correct a catalogue safely than a team with only a green status icon. The final question is always whether a current evidence state supports the next intended action, including when that action must remain held.

  1. Name the changed source and the current session version before acting.
  2. Stop explicitly where required; record that stopped changes do not resume.
  3. Apply only the prescribed fixed change and record the new source/session revisions.
  4. Resume the then-current stopped version explicitly and renew current permission.
  5. Repeat all eight checks, exact current drafting and fresh assumed review.
  6. Label old copies historical and retain unresolved rights, safety and real-use gaps.

Scroll sideways to see every column.

Human review, correction and withdrawal · Table 8
Prompt componentConcrete paper instruction
RoleInternal correction recorder for Nacre, not a real approving authority.
ConstraintsOnly fixed WIDTH_NOTICE/PHOTO_WITHDRAWAL; role strings assumed; original fixture and old copies preserved.
ProcessTrack current version; stop/change/resume explicitly; renew; repeat eight checks, draft and review.
VerificationVerify source revision versus session version, inclusive expiry, withdrawal and handled versus pre-body errors.
Output schemaBefore/current source; state version/day; invalidated outputs; fresh checks; current review; historical copies; unresolved gaps.
Failure modesReject invented/duplicate/stale transitions; never infer resumption, rights renewal, durable audit or deletion.

Scroll sideways to see every column.

Human review, correction and withdrawal · Table 9
Worked approachRequestEvidence consequence
Average requestReplace240 with245 everywhere and keep the approval.Skips invalidation, fresh permission/review and historical-copy handling.
Elite paper requestApply the fixed WIDTH_NOTICE at current version; renew and repeat all eight checks/draft/review; mark old packet historical.Current source support restored only in the finite state; real use remains held.

Recover a stopped corrected state

A change does not resume or restore old permissions and reviews.

Stop version1Width notice at2Explicit resume at3Renew permission at4Fresh assumed review
Steps
  • Stop version1: Stopped state becomes version2; checks, permission, draft and review clear.
  • Width notice at2: S01 becomes245mm/revision2; session3 remains stopped.
  • Explicit resume at3: Session4 runs, permission and approvals still absent.
  • Renew permission at4: No rights or expiry extension; do fresh eight checks and current draft.
  • Fresh assumed review: All eight current cases required; packet real use HOLD; old copies historical.
Relationships and conditions
  1. Stop version1 to Width notice at2: Apply prescribed notice
  2. Width notice at2 to Explicit resume at3: Do not infer restart
  3. Explicit resume at3 to Renew permission at4: Obtain current assumed permission
  4. Renew permission at4 to Fresh assumed review: Recheck and review current state

Text equivalent: Stop at version1 creates stopped version2 and clears analytical authority. Apply WIDTH_NOTICE at2: S01 becomes245mm/revision2 and session3 remains stopped. Explicitly resume3 to create running version4. Renew4 permission without extending rights or expiry, perform all eight fresh checks and current drafting, then obtain a fresh assumed review. Old copied packets survive as history; real use stays held.

Try it yourself · Activity 10

75 minutes

Recover a stopped width correction and a photo withdrawal

On paper begin with a reviewed version1/day1 packet. Stop, apply WIDTH_NOTICE while stopped, resume, renew and recover a current245mm packet. Then withdraw S02 and show the complete new state and held/eligible consequences. Include a filled change record and old-copy handling; do not invent a fresh run.

  1. Success criterion: distinguish S01 revision2 from session versions2/3/4 and keep the process stopped until explicit resume.
  2. Supply the exact stop/change/resume/renew/check/draft/review sequence and full allowed245mm sentence.
  3. Show what PHOTO_WITHDRAWAL at current version4 does, followed by current renewal/all checks/new review.
  4. Explain N01 HOLD(WITHDRAWN), no description, N05 eligibility on day1 and remaining real-use gaps.
  5. Keep old copies historical, original fixture unchanged and fresh-process reset separate from durable history.
  6. Distinguish rejected mutator deep-state preservation, handled analytical invalidation and pre-body TypeError.

If a colleague only received the earlier copied packet, what evidence and human procedure would a real organisation need to prevent it being treated as current?

Worked answer

Filled paper change record: affected S01 AMBER supplier_spec; previous width240mm/revision1; current prescribed width245mm/revision2; reason WIDTH_NOTICE; original on-disk fixture remains240mm. Stop/version1 clears permission, all checks, description/review and creates stopped session2. apply_change('WIDTH_NOTICE',2) creates session3 while still stopped. resume_workflow(3) explicitly creates running session4, with no restored permission/review. renew_permissions(4) then permits fresh checks; it does not grant real rights or extend expiry.

Complete recovery sequence after renewal: check_batch(['N01','N02','N03','N04','N05','N06','N07','N08'],4); draft_description('Amber painted-steel organiser, 245 mm wide. Fictional catalogue training example.',4); review_packet(4); export_packet(4). Expected N01 ATTRIBUTES_DRAFT at245mm, N05 COMMERCIAL_SNAPSHOT at2100pence/stock4, six other held cases. Review BOUNDED_PACKET_REVIEW and export PRIVATE_AUDIT_PACKET remain realUseStatus HOLD. All role labels are assumed; no actual product or reviewer is authenticated. This is a paper sequence, not an observed learner execution.

Second filled change row: S02 AMBER photo_label revision1 to withdrawn revision2, reason PHOTO_WITHDRAWAL. apply_change('PHOTO_WITHDRAWAL',4) creates session5 and again clears permission/checks/draft/review. renew_permissions(5), then the same eight-case check_batch at5: N01 holds WITHDRAWN. S01 may have been admitted before S02 refusal, so this case has one new semantic admission, not zero whole-case file reads. No current N01 description can be drafted. At day1 N05 remains eligible; after all eight current cases, review_packet(5) can create an assumed review with eligible=['N05']; export_packet(5) has description=null and realUseStatus HOLD. Source rights, safety, promotions and disclosures remain unresolved.

Old version1/4 returned copies still exist and must be labelled historical; this code cannot recall them or issue real notifications. The original fixture remains unchanged; a fresh object/process returns width240/unwithdrawn photo/version1/day1/running/original assumed permission. A duplicate change or invalid mutator leaves all deep state unchanged. A handled known case retry can clear its old check/draft/review; a missing/unknown-argument TypeError before the method body leaves existing state unchanged. Do not say every failure erases the same authority.

Scroll sideways to see every column.

Human review, correction and withdrawal · Table 10
Review questionAnswer after your attempt
Which revision changes under WIDTH_NOTICE?S01 source revision and session version each increment; unchanged sources keep their own revisions.
Does a stopped change resume the workflow?No. Explicit current-version resume is required and increments version again.
Can renewal recover a withdrawn photo?No. Rights and withdrawal are not changed by permission renewal.
Why may withdrawn N01 count one semantic admission?S01 is admitted before S02 withdrawal refusal; the whole file was already parsed.
Does every failed call clear review?No. Handled analytical bodies can clear it; pre-body TypeError and rejected mutators preserve their respective states.
Does old export disappearance prove withdrawal?No. Already returned copies survive; fresh processes reset initial memory.

Apply what you learned · Practice

WIDTH_NOTICE was applied while stopped and the session is now3. What is the next restart sequence?

Explanation and answer

Explicitly resume3, then renew4 and perform fresh checks/draft/review. A stopped change does not resume; explicit resume3 increments to4 and still requires current renewal and fresh analysis.

Practice only. This does not count towards your exam or certificate.

Next chapter

Learn in your browser · Chapter 07 of 08

07

Catalogue quality pilot and access

Evaluate a stable supplied field sample and propose access research without claiming actual model or user results.

A quality pilot must begin with a defined question and a stable unit of comparison. Are we checking whether five supplied fields match the admitted amber facts, or whether an entire catalogue can support a customer purchase? Those questions have different denominators and consequences. Nacre answers the first with a small paired field sample and keeps the second unresolved. Its test rows are not a customer study, a production catalogue sample or a model trial. Treat them as an opportunity to practise an evaluation method that can later be proposed for accountable real research under appropriate permission and review.

The five ordered fields are material, widthMm, finish, totalPence and stockCount. Before comparison, N01 and N05 must have current bounded fact checks. That requirement stops a candidate output from being judged against a convenient unverified reference. The original candidate supplies bamboo,24,amber,1800 and4. Against painted steel,240,amber,2100 and4, material, width and total price are wrong. Three errors divided by five checked fields equals sixty per cent. Correcting those supplied rows yields zero errors in five, but neither result says anything about load safety, slate dimensions, image rights, promotions or consumer disclosures.

Keep the before and after samples paired. If an editor removes the bad price field, renames the width field, duplicates a correct finish row or changes the order, the comparison no longer answers the same question. compare_quality therefore requires exactly five ordered field/value rows and holds malformed or reduced samples. This is a finite teaching choice rather than a universal sampling method. For a proposed real study, explain why the chosen fields and sample represent the intended decision, what they omit and how missing evidence will be reported. A convincing percentage is not useful if the denominator changed unnoticed between versions.

Types belong to the comparison definition. An integer width240 is different from a supplied float240.0 in this lab, even though Python can compare those numbers as equal. A boolean must not be read as an integer stock count or permission version. compare_quality records exact-type mismatches as errors. CandidateRows admission at construction uses ordinary numeric equality, so a numerically equivalent4.0 can enter that test sample; the later typed comparison counts it wrong. Source bodies use separate exact nested-type checks. Explain these distinctions honestly rather than claiming the constructor rejects every equivalent numeric representation in every part of the fixture.

Error counting and error consequence are different dimensions. A misspelled finish, a factor-of-ten width error and an omitted mandatory delivery charge can each contribute one field error in the fixed count. Their practical consequences may differ. A real pilot should record severity, likely misunderstanding, affected audience and correction route alongside its error rate. Nacre has no evidence of actual harm or customer behaviour. On paper, you can reason that24mm instead of240mm changes the represented size substantially, while recognising that no actual organiser has been measured and no real purchasing decision has been observed in this exercise.

Held cases must remain visible outside the sample score. N02 still has a slate width conflict, N03 missing load and compatibility evidence, N04 internal-only photo rights, N06 an absent promotion reference period, N07 disclosure gaps and N08 withdrawn obsolete evidence. A zero-error amber sample cannot close them. Filtering held rows out of a dashboard can make quality appear improved while the unresolved work remains. Report both the fixed sample result and the complete case disposition register. They are different measures of different questions. A reviewer should be able to understand why an apparently clean comparison still leads to a real-use hold.

Choose success criteria before running a proposed pilot. State which field matches count, how exact types and units are treated, whether a missing source leads to an error or a separate hold, and which defects require stopping. Keep the criteria attached to the same evidence version as the results. For a real assistant comparison, decide the authorised source set, processing controls, tasks, baseline and review method before any customer or supplier data is used. Nacre contains no model and cannot establish comparative AI performance. Its corrected sample is supplied arithmetic and review practice, not measured improvement from a prompt or provider.

Separate the evaluator's responsibilities from the writer's incentives. A person asked to make catalogue copy persuasive may prefer to ignore uncertain fields or soften a hold. A reviewer needs access to the exact records and authority to challenge that choice. In Nacre, data_reviewer is only a role label and anyone can pass it; it does not prove an independent evaluator exists. A proposed real pilot should identify who checks results, what they are allowed to change, how disagreements are retained and who owns a stop decision. Ask those questions explicitly instead of assuming a job title establishes independence or competence.

Product imagery needs evaluation by purpose as well as appearance. The photo label for S02 can support a fictional illustration description; it cannot measure width from pixels, establish load capacity or demonstrate a product test. For a meaningful product image, an alternative description should convey the information needed for its purpose. For example: fictional amber painted-steel organiser; the supplied specification records240mm width; this image supplies no measurement scale or safety result. Keep amber and slate distinguishable by visible names and equivalent text, not colour alone. Such a proposal is not evidence that an actual image or interface has passed accessibility testing.

The wcag-images source is the WCAG2.2 technical recommendation dated12 December2024. Selected non-text and colour criteria support a design review of alternatives and distinguishing cues, with their stated exceptions and whole-page conformance limits. It is not itself a blanket UK retail statute or proof of a complete accessible service. A real pilot needs keyboard, assistive-technology and affected-user evaluation for the actual interface and journey. Do not write WCAG approved on a packet because a diagram has an adjacent explanation. Technical checks, legal applicability and usable access are related but require separate evidence.

Offer a usable human route when an output is uncertain or inaccessible. A generic instruction to phone support does not establish access for every person. A proposed staff procedure could offer an accessible text route and an assisted review route, with responsibilities, response expectations and escalation boundaries to be tested with affected people. Nacre supplies no live contacts or support service. Its human route is a paper workflow for staff to preserve the gap and obtain accountable review. A real listing must not hide an unresolved product fact behind a support channel that is unavailable or unsuitable for the audience who needs it.

Write an incident threshold that responds to meaning, not just a percentage. A single unsupported safety or compatibility claim may require stopping even when most measured fields match. A repeated variant mix-up or stale stock promise might also invalidate the intended use of the pilot. Name the triggering claim, relevant source, affected output and proposed owner route. Nacre's real use remains held in every case, so these thresholds are planning exercises rather than operating a customer-facing service. Their purpose is to make a future proposal reviewable before an assistant is introduced into a consequential catalogue process.

Use a six-part prompt to make the evaluation task precise. Give the assistant a role as an internal comparison recorder, constrain it to the fixed supplied field sample and permitted sources, specify the paired checking process, require verification of types, units and denominators, define the result schema and name failure behaviour. The average request asks for a quality score and a more reassuring catalogue. The elite request asks for per-field results, the same before/after denominator, separate held-case register and an explicit no-population conclusion. It makes disagreement inspectable without claiming that a prompt creates real evaluator independence or controls a provider.

The comparison method is still useful without AI. Print the five rows, put the admitted reference values beside them and mark each match or mismatch. A second adult staff member can explain the width and delivery errors in their own words. Retain the eight-case register and review the access descriptions on paper. This non-AI continuity method avoids depending on a tool to judge its own output. It also separates understanding from a passing screen message. A genuine real-world exercise would need authorised sources and actual staff review; this workbook supplies only invented records and ungraded rehearsal tasks.

Record corrections without deleting the evidence of error. The original sample shows which fields were wrong; the corrected sample shows the intended bounded replacement. Keep both with their version, reference source and comparison method. If WIDTH_NOTICE later changes the admitted reference to245mm, a candidate value of240 becomes wrong under that new evidence state even if it previously matched. Do not rewrite the earlier result as though it used the later source. Conversely, do not use a historic zero-error sample to approve a current output after a source withdrawal or commercial expiry has removed its eligible reference facts.

A pilot proposal ends with a decision and a limitation, not just a chart. The Nacre result is that the supplied five-field exercise can be compared reproducibly, while all real use remains held and the other gaps need accountable resolution. For a future actual project, specify the permission review, source selection, sample justification, independent human review, access research and conditions for stopping or changing purpose. Evidence must be collected before claiming those conditions have been met. The pilot plan can be complete as a proposal while its results remain unmeasured and its deployment remains unapproved.

  1. Fix the five fields, source reference and before/after comparison question.
  2. Obtain current N01/N05 bounded checks before scoring the supplied sample.
  3. Check exact types, units, values, field order and unchanged denominator.
  4. Report per-field mismatches and arithmetic beside the complete held-case register.
  5. Review severity, image alternatives and proposed usable challenge routes separately.
  6. Write a future research proposal with unmeasured access/model outcomes and real use held.

Scroll sideways to see every column.

Catalogue quality pilot and access · Table 11
Prompt componentConcrete paper instruction
RoleInternal paired-sample evaluator and access proposal recorder.
ConstraintsExactly five supplied fields and current N01/N05; no actual model/customer study or AT acceptance.
ProcessCompare original and corrected rows on the same reference, types/order/denominator; keep all eight cases visible.
VerificationCalculate3/5=60% and0/5=0%; retain type errors, severity questions and held cases separately.
Output schemaField; reference/source; before; after; mismatch; denominator; held register; proposed access research; limits.
Failure modesHold changed denominator/unverified reference; no population/model improvement, safety closure or accessible-service claim.

Scroll sideways to see every column.

Catalogue quality pilot and access · Table 12
Worked approachRequestEvidence consequence
Average requestDelete the bad rows and report a perfect AI catalogue.Changes denominator and invents a model/population conclusion.
Elite paper requestCompare the same five ordered fields; report3/5 then0/5; retain all six other held cases and untested access outcomes.Reproducible sample arithmetic with explicit limits.

Two evaluation records, one held real use

A fixed sample result is separate from unresolved case and access work.

Current N01/N05Five paired fieldsAll eight case decisionsProposed access reviewFuture pilot proposal
Steps
  • Current N01/N05: Admitted amber facts and separate commercial snapshots form reference.
  • Five paired fields: Original3/5=60%; corrected0/5=0%; exact order/types.
  • All eight case decisions: Six initial held cases retained regardless of sample result.
  • Proposed access review: Text equivalents, named variants and usable human routes remain to test.
  • Future pilot proposal: No measured model/population/user/AT result; real use stays HOLD.
Relationships and conditions
  1. Current N01/N05 to Five paired fields: Compare defined rows
  2. Current N01/N05 to All eight case decisions: Keep other scope visible
  3. Five paired fields to Proposed access review: Do not equate accuracy with access
  4. All eight case decisions to Future pilot proposal: Unresolved evidence remains
  5. Proposed access review to Future pilot proposal: Research before claiming usability

Text equivalent: Current N01 and N05 provide the permitted reference for five ordered field comparisons. The original supplied rows have3errors/5=60%; corrected rows have0/5=0%. Keep the separate complete eight-case register, including six initial holds. Proposed image alternatives and usable human routes need actual research. Neither sample result nor diagram establishes model, population or accessibility performance; real use is held.

Try it yourself · Activity 11

75 minutes

Complete a paired quality and access proposal

Supply the complete five-row before/after comparison and arithmetic against initial N01/N05, retain all six other held cases, and design a specific future access check with a non-AI route. Then explain how WIDTH_NOTICE changes the reference for the formerly corrected240mm row. Treat access/model results as unmeasured.

  1. Success criterion: provide all five ordered fields, actual reference/before/after values and before/after mismatch counts.
  2. Compute3/5=60% and0/5=0% without removing held cases or claiming model/population improvement.
  3. Explain exact-type mismatches and why unchanged denominators and current references matter.
  4. Give a purpose-equivalent fictional image description, named variants and proposed accessible human route with usability unverified.
  5. Supply an actual proposed task/observation/criterion/stop record, not a claim that access testing happened.
  6. After the prescribed width correction, explain why old240 becomes one error in five until245 is supplied.

Which defect would require a stop even if a field error percentage were small, and what additional research would justify that decision in an actual interface?

Worked answer

Filled initial paired matrix, in required order: material | reference painted steel (S01@1) | before bamboo | mismatch yes | after painted steel | mismatch no. widthMm | reference240 (S01@1) | before24 | mismatch yes | after240 | mismatch no. finish | reference amber (S01@1) | before amber | mismatch no | after amber | mismatch no. totalPence | reference2100 (S07@1:1800+300) | before1800 | mismatch yes | after2100 | mismatch no. stockCount | reference4 (S08@1) | before4 | mismatch no | after4 | mismatch no. Before3errors/5fields=60%; after0/5=0%. N02 width conflict, N03 missing safety/compatibility, N04 rights, N06 promotion period, N07 disclosures and N08 withdrawal still hold. No model or population result follows. compare_quality needs current N01/N05; a reduced/reordered/duplicated/extra-key matrix holds. Floats or bools replacing exact integer values count as errors, even when numerically equal.

Proposed image alternative: Fictional amber painted-steel organiser; the supplied specification records240mm width. The illustration provides no measurement scale, load test or compatibility evidence. Proposed variant presentation: AMBER and SLATE appear as visible names and equivalent text, not colour alone. Proposed staff challenge route: accessible text request containing case/source/version/question, plus a paper assisted-review option; no live contact supplied and no assumption that telephone access works for everyone.

Filled future access task: an appropriately recruited adult staff participant, under separately reviewed research permission, attempts to identify which variant has an unresolved width and locate the hold reason without relying on colour. Proposed observation: record whether they identify SLATE/N02/260-versus255 and can find the human challenge route, with requested support and unresolved failures. Proposed criterion: essential variant/conflict information and usable alternative route must be obtainable in the tested actual interface; a correct numeric answer alone does not close access. Proposed stop: inability to obtain essential information or challenge a misleading safety/availability claim keeps real use held and requires owner correction. No participant, AT/user evaluation or success has occurred here. Non-AI continuity uses the same printed matrix, eight-case ledger and human evidence challenge, with permission boundaries preserved.

Width change rehearsal: apply_change('WIDTH_NOTICE',1) creates2; renew_permissions(2); obtain all eight current checks. Reference S01@2 width is245. The earlier corrected matrix containing240 now has1error/5=20% against this new reference, not a revision of the historical version1 result. Replace only that candidate width with245 to obtain0/5 under the current bounded reference. Old copies and untested access/model outcomes remain separate.

Scroll sideways to see every column.

Catalogue quality pilot and access · Table 13
Review questionAnswer after your attempt
What is the fixed denominator?Five ordered fields: material,widthMm,finish,totalPence,stockCount.
What is the supplied before/after result?3/5=60% errors and0/5=0%, on the same permitted reference.
Can zero sample errors close six held cases?No. The field comparison and the complete case register answer different questions.
How are equivalent floats treated in comparison?Exact-type mismatches count as errors; candidate sample construction has a separate numeric-equality limit.
What does meaningful image text avoid?It conveys purpose without inventing photo measurements, load tests or relying on colour alone.
Does a text equivalent prove accessibility?No. Actual interface, affected-user, keyboard and AT evaluation remain unperformed.

Apply what you learned · Practice

The corrected amber sample scores0/5 errors. What must accompany that number?

Explanation and answer

The unchanged denominator, current reference and separate unresolved case/access limits. A bounded supplied sample is not a population/model score or closure of held cases and untested access.

Practice only. This does not count towards your exam or certificate.

Next chapter

Learn in your browser · Chapter 08 of 08

08

Nacre catalogue QA capstone

Produce a complete fictional internal packet and recovery proposal, with actual use and the separate knowledge assessment clearly bounded.

The capstone asks you to make one coherent internal assurance packet from the eight supplied cases. Its purpose is not to accumulate success badges. It is to show what each record supports, what remains unknown, which dependencies are current and why real use is still held. A complete packet can therefore contain more held cases than bounded outputs. In Nacre the initial expectation is one attribute draft, one commercial snapshot and six holds. Understanding that distribution matters more than trying to turn every case into a description. An unresolved evidence gap is a meaningful result when the proposed claim cannot be supported.

Begin with a decision header. Name the invented retailer Alder Shelf, the amber or slate variant where relevant, session version and teaching day. State that all records, measurements, photo IDs and licences are fictional, and that no actual product, customer or model has been tested. Identify the intended output as an internal audit packet rather than a sale listing. A reviewer should understand the scope before reading any attractive descriptive text. Without that header, a later reader could mistake an invented organiser example for a real measured product or a packet review for permission to publish it.

Preserve all source identities in the packet. N01 depends on S01 and S02; N02 on S03 and S04; N05 on the separate S07 price and S08 stock snapshots. The remaining cases each depend on one prescribed record. Do not let a summary replace those associations or omit a refused source because it complicates the story. Record source revision and expiry alongside the session state. The packet should distinguish an uninspected record, a semantically admitted but conflicting record and a record refused for rights or withdrawal. Those are different failure modes with different possible evidence requests.

The first two cases illustrate why source support must remain scoped. N01 may carry the exact amber attributes and the separately labelled fictional photo at the current initial state. N02 carries260mm supplier and255mm invented observation widths for slate, with no resolved width. Choosing257.5mm or borrowing amber240mm does not add evidence. A capstone reviewer should be able to trace each number back to the exact record that supplied it and explain why the conflict remains. The internal packet is useful precisely because it makes such disagreements inspectable rather than hiding them inside a fluent, averaged description.

Cases N03 and N04 require different next questions. The safety gap asks for missing load, compatibility and technical documentation evidence; it cannot be filled with a confident sentence or inferred from painted steel. The rights gap concerns an internal-only photo with unknown label rights; it does not become a catalogue illustration because a file is available. The reviewed opss-safety and opss-ni sources distinguish product-specific requirements and GB/NI application. The July2026 safety guidance includes a later December change note, which must not be taught as already operative on1 October2026. None of these sources certifies the invented organiser or resolves its actual product category.

Cases N05, N06 and N07 form a commercial boundary. The supported2100pence total and separate stock4 snapshot do not establish a reservation or availability promise. The missing promotion reference period prevents the earlier/later amounts becoming a substantiated sales comparison. The missing trader and cancellation information remains distinct from the product description. A complete packet should show all three at once, so a reviewer does not release a transaction merely because the total was calculated correctly. The applicable audience, transaction, jurisdiction and exemptions must be reviewed for any real project; this finite workshop does not choose them for a retailer.

N08 demonstrates that plausible old evidence can be unusable. The withdrawn amber specification contains230mm, a number close enough to sound credible in a rushed summary. Its withdrawal is the decisive boundary, not whether the number fits the story. The source is refused before semantic body admission, although the whole fixture was already parsed. A capstone should retain the existence and reason for that refusal without promoting the old width into the current description. In a real system, someone must own withdrawal notices and dependent-output checks; naming that role in a proposal is not evidence that the process exists or works.

Drafting and reviewing are separate activities. The initial exact permitted description is: Amber painted-steel organiser, 240 mm wide. Fictional catalogue training example. In the lab its spaces and wording must match the allowed text exactly. A proposal may explain that sentence on paper, but it must not claim that an arbitrary paraphrase will be accepted by draft_description. After the width notice, the permitted width becomes 245 mm. A review should inspect the current sources, all eight case results and remaining gaps rather than relying on the elegance of either sentence. Even a correctly reviewed sentence is not approval for actual product use.

Use an explicit responsibility matrix for the proposed real workflow. An evidence owner would manage source authenticity and currentness; a commercial owner would review actual price, stock and promotions; a rights owner would check image and label permissions; a qualified product reviewer would address safety and technical gaps; an access owner would test usable content and challenge routes; a publication owner would decide release under actual authority. These are proposed functions, not authenticated Nacre roles or real staff assignments. Some organisations may combine functions, but the proposal should explain conflicts and who can stop work when another owner disagrees.

The provider question belongs in the capstone even though Nacre uses no provider. If a future assistant is considered, ask which approved records would leave organisational control, who may process them, where processing and storage occur, whether training use is permitted, how corrections are propagated and how source/decision records can be exported. Keep unresolved terms explicit. A portable local teaching packet proves only that a data object can be copied. It does not demonstrate a supplier exit, deletion, secure access, sovereign architecture or an enforceable licence. Mickai's proposed sovereign-control work can be discussed as a scoped engagement without claiming a deployed system or certified capability.

The source register helps select further review, not substitute for it. CAP section3 requires documentary support for objective claims within its remit; it is a non-broadcast code rather than worldwide legislation. CMA207 and price guidance address their consumer contexts. The older IPO image notice discusses permissions, licence limits and exceptions; it does not decide a real copyright case. ICO minimisation concerns personal data and remains under DUAA review. WCAG is a technical recommendation with criteria and exceptions. Attach relevant source IDs to the proposed questions, retaining the limits and failed operative-law retrieval instead of turning a list of citations into a clearance certificate.

Make the stop and recovery rehearsal concrete. Start from the reviewed version1 packet, stop at version1, then apply WIDTH_NOTICE at stopped version2. The session becomes version3 while still stopped. Resume version3 explicitly, which creates version4, then renew version4 permission and repeat all eight checks before drafting245mm and recording a new assumed review. A later PHOTO_WITHDRAWAL changes version again and removes N01 eligibility. The exercise must carry the versions through the sequence rather than saying simply restart. It should also retain old copies as historical, because the finite object cannot revoke them from other holders.

Continuation without an assistant is part of the proposed packet. Print the source/case register, permitted descriptions, fixed comparison rows and unresolved-gap worksheet. Have an adult staff reviewer identify the supported facts and refusal reasons manually. Provide a proposed accessible text challenge route as well as other assisted options, with actual usability still to be researched. The non-AI path should preserve the same source and rights boundaries rather than encouraging someone to publish from memory. Nacre supplies no real contacts, incident hotline or accessible customer service. Its continuity materials are a paper design exercise for a future accountable workflow.

Separate the course knowledge assessment from this practical rehearsal. The course bank contains forty mapped multiple-choice questions; each exam draws twenty, with a sixty-minute limit and a pass mark of81. Exactly sixteen correct answers out of twenty gives80per cent and fails; seventeen gives85per cent and passes. The written exercises and capstone remain ungraded practice and are not assessed by that knowledge score. Use the official exam link on the course page. Access and any named educational certificate depend on the actual protected assessment flow; neither establishes occupational competence, accreditation, identity verification or product-safety qualification.

Evidence claims need their own labels. The independent lab review actually reran the unchanged48 author tests and passed32 separate challenge groups, with no failures or skips, against the frozen four files. That establishes the bounded tested behaviours recorded in its report, including current245mm recovery, typed comparisons, withdrawal and fresh-process reset. It is not an assistant evaluation, a customer study, product measurement or full security/legal review. The paper capstone answer describes expected sequences and proposed review work; it must not describe a fresh learner run or a real organisation completing those steps unless such evidence is separately collected.

Finish with a clear handover decision. The packet is complete as an internal fictional audit when every case, source association, current version, gap, review limit and proposed next owner is visible. Its realUseStatus remains HOLD. Do not equate packet completeness with the resolution of each gap or the authority to publish. A useful teach-back explains one supported proposition, one refused source, one unresolved conflict, one correction sequence and one access limitation without consulting a fluent summary. If a colleague can follow that explanation and challenge its evidence, the capstone has served its educational purpose while leaving real commercial decisions where they belong.

  1. Write the fictional scope, internal purpose, session version and day header.
  2. Complete all eight source/case/revision/expiry/disposition/gap rows.
  3. Draft only the permitted current description and fixed sample comparison.
  4. Record current assumed review and return an internal packet with real use held.
  5. Rehearse exact stop/change/resume/renew/recheck and retain historical copies.
  6. Teach back the evidence limits and propose qualified/access/provider reviews before any real use.

Scroll sideways to see every column.

Nacre catalogue QA capstone · Table 14
Prompt componentConcrete paper instruction
RoleInternal assurance-packet editor for invented Alder Shelf.
ConstraintsAll eight cases; no actual retailer/products/users/AI, real licence, qualification or listing release.
ProcessComplete register; draft current text; fixed comparison; fresh assumed review; stop/change/resume/renew/recheck rehearsal.
VerificationTrace every number/source/revision/expiry, all hold reasons and separate responsibilities; distinguish observed lab evidence from paper.
Output schemaHeader; eight rows; current draft; five-field comparison; gap/owner matrix; provider questions; continuity; recovery; HOLD decision.
Failure modesReject omitted held cases, variant averages, stale permissions, claim inflation, erased historical copies or real-use approval.

Scroll sideways to see every column.

Nacre catalogue QA capstone · Table 15
Worked approachRequestEvidence consequence
Average requestUse the two successful cases to approve the listing.Hides six held cases and converts assumed review into publication.
Elite paper requestReturn the complete eight-case private packet and owner/gap matrix, then rehearse current version recovery while real use stays HOLD.Complete internal evidence proposal, no actual operational authority.

Complete internal packet without release

Every case and gap must travel with the current evidence version.

Fictional scope/headerEight bound casesOwners and providerquestionsCurrent assumed reviewPrivate copied packet
Steps
  • Fictional scope/header: Internal purpose, current version/day, invented Alder Shelf.
  • Eight bound cases: Keep sources, revisions, expiry, variants and distinct refusal reasons.
  • Owners and provider questions: Real safety/rights/commercial/access/process authority unresolved.
  • Current assumed review: All current cases plus at least one eligible N01/N05; roles are strings.
  • Private copied packet: Real use HOLD; paper continuity/recovery plan, no durable revocation.
Relationships and conditions
  1. Fictional scope/header to Eight bound cases: Trace admitted and refused sources
  2. Eight bound cases to Owners and provider questions: Assign unresolved evidence questions
  3. Eight bound cases to Current assumed review: Require complete current set
  4. Owners and provider questions to Private copied packet: Retain real-use gaps
  5. Current assumed review to Private copied packet: Copy internal result only

Text equivalent: Start with a fictional internal-purpose/version/day header. Complete all eight source-bound cases with their refusals and gaps. Record proposed accountable owners/provider questions separately from assumed code roles. A current assumed review requires all cases and at least one eligible N01/N05. Export only a copied private audit packet, with real use held and paper recovery/continuity plans, no lasting revocation claim.

Try it yourself · Activity 12

120 minutes

Produce the complete Nacre capstone packet

Supply an actual eight-row initial paper audit key, exact source/revision/expiry associations, supported meanings and unresolved owner questions. Include current description, five-field quality result, separate responsibility/provider/access/continuity proposal and exact stopped correction recovery. Explain the linked knowledge exam boundary and protected access requirements without claiming practical qualification.

  1. Success criterion: include all eight cases with exact source IDs/revisions/expiry/variant/disposition and distinct gaps.
  2. Provide current permitted description and full fixed five-field comparison; retain six initial holds and all real-use limitations.
  3. Give filled proposed owner, provider-processing/export and access/non-AI continuity questions without asserting live arrangements.
  4. Require all current checks and at least one eligible N01/N05 for fresh assumed review; export internal copy only.
  5. Carry stop/change/resume/renew versions exactly; show photo withdrawal and day4 zero-eligible limits.
  6. State40-question bank/20-question draw/81passMark/60minutes,16fail17pass, protected access, ungraded written/capstone and no qualification/accreditation/identity approval.

Teach back one supported fact, one refused source, one unresolved contradiction and the exact recovery sequence. What would still prevent you from turning this complete internal packet into an actual listing?

Worked answer

Completed initial paper header: Alder Shelf (invented); internal catalogue audit purpose only; session version1/day1; source records, photo IDs and measurements fictional. No actual retailer, customer, model, safety/licence or listing release. All initial source revisions1.

N01 | AMBER | S01/S02@1, expiry3 inclusive | ATTRIBUTES_DRAFT(EXACT_VARIANT_FACTS) | painted steel,width240mm,finish amber; separate PHOTO-AMBER fictional catalogue-illustration-only/fictional-training-only label | real measurement, product safety and real image rights unresolved. N02 | SLATE | S03/S04@1, expiry3 | HOLD(VARIANT_WIDTH_CONFLICT) | supplier260mm and invented observation255mm | no average/resolved width; evidence owner must address the exact variant contradiction. N03 | AMBER | S05@1, expiry3 | HOLD(MISSING_SAFETY_AND_COMPATIBILITY) | loadKg=null, compatibility=null, technicalFile missing | qualified product/safety owner needs appropriate actual evidence; no safe-load claim. N04 | AMBER | S06@1, expiry3, rights internal-only | HOLD(RIGHTS_SCOPE) before semantic body admission | internal concept sketch and unknown label rights cannot support a public catalogue illustration | rights owner reviews actual permitted use; no permission inferred. N05 | AMBER | S07/S08@1, expiry2 | COMMERCIAL_SNAPSHOT(PRICE_AND_STOCK_SEPARATE) | item1800+mandatoryDelivery300=total2100pence, tax included GBP/asOfDay1; separate count4/asOfDay1/reservation=false, availabilityPromise=false | commercial owner needs actual freshness/transaction/publication authority. N06 | AMBER | S09@1, expiry3 | HOLD(MISSING_REFERENCE_PRICE_PERIOD) | was3000/now1800pence but referencePeriod=null | commercial/promotional owner must review substantiation/context, no discount conclusion. N07 | AMBER | S10@1, expiry3 | HOLD(INCOMPLETE_CONSUMER_DISCLOSURE) | organiser main characteristic; cancellationTerms/traderDetails=null | responsible trader reviewer must identify applicable information, price does not fill it. N08 | AMBER | S11@1, expiry3, withdrawn=true | HOLD(WITHDRAWN) before semantic body admission | obsolete230mm record excluded from current facts | evidence owner retains refusal and seeks properly authorised current evidence outside this fixed lab if necessary.

Initial draft text: Amber painted-steel organiser, 240 mm wide. Fictional catalogue training example. Full sample: material bamboo->painted steel; width24->240; finish amber->amber; total1800->2100; stock4->4. Before3/5=60% errors; supplied corrected0/5=0%. All eight rows remain; two bounded outputs do not close six held cases. Initial runtime distribution and1aggregate/9semantic counters were actually established by the separately recorded frozen lab review, not this paper exercise.

Filled responsibility proposal: evidence owner maintains variant/source/revision/withdrawal ledger; commercial owner checks actual charges/stock/promotions/disclosures; rights owner checks actual image/label licences and exceptions; qualified product owner addresses safety/conformity and GB/NI applicability; access owner researches usable text/image/challenge routes; publication owner decides real authority and stop conflicts. No real staff are assigned by these labels. Provider questions: which approved fields leave control, where processing/storage occurs, who may access/train, how corrections/deletion are handled, what source/decision export is available and what an actual exit test must demonstrate. All answers unresolved; copying the lab packet proves no provider exit, deletion or sovereignty.

Access/continuity proposal: named AMBER/SLATE labels and purpose-equivalent image text, no photo measurement/safety inference; future affected-user/keyboard/AT tests for actual interface; accessible text challenge and assisted paper route to be researched, no live contacts. Printed eight-case ledger/five-field matrix/exact descriptions support non-AI review under the same permissions. Actual catalogue use remains HOLD.

Packet rehearsal: check_batch(all eight named IDs,1); draft_description(initial exact text,1); review_packet(1) gives BOUNDED_PACKET_REVIEW only when all eight are current and at least N01/N05 is eligible; export_packet(1) returns PRIVATE_AUDIT_PACKET with eight cases, explicit gaps, current review and realUseStatus HOLD. The actual implementation returns a deep copy, writes no file and authenticates nobody.

Stopped correction rehearsal: stop_workflow(1)->stopped version2; apply_change('WIDTH_NOTICE',2)->version3 still stopped, S01 width245/revision2; resume_workflow(3)->version4; renew_permissions(4); fresh eight checks, exact245mm draft, fresh review4 and copied packet4. PHOTO_WITHDRAWAL at4 creates5 and clears authority; renewal5/fresh eight checks hold N01, remove current description, permit only eligible N05 on day1 before fresh review5. Renewal never extends expiry. After advance_day(4,current version), renew and check all eight: review HOLD(NO_ELIGIBLE_FACTS), export held. Old copies survive as historical; new processes reset original fixture state. Handled analytical failure and pre-body TypeError have different invalidation effects.

Assessment note:40-question knowledge bank,20-question exam draw,81passMark,60minutes;16/20=80% fails and17/20=85% passes. Eight written practices and capstone are ungraded and not assessed by that score. The course page supplies the official exam link; access and any educational named certificate depend on the actual protected flow and supply no accreditation, occupational competence, identity or product-safety qualification.

Scroll sideways to see every column.

Nacre catalogue QA capstone · Table 16
Review questionAnswer after your attempt
Why keep all eight cases in a packet?Completeness includes bounded facts, distinct holds and unresolved owner questions.
What permits finite review?All eight current checks and at least one eligible N01/N05, with current assumed permission and role.
What does PRIVATE_AUDIT_PACKET approve?Only an internal copied teaching object; real use remains HOLD and no authority is authenticated.
What follows stop1/change2/resume3?Running version4, then renew4 and fresh checks/draft/review; no restored old approval.
What can a provider export demonstrate?Only the demonstrated transfer format; actual migration, deletion, rights and sovereignty require separate tests/contracts.
Does17/20 prove occupational competence?No. It passes a knowledge score boundary; written/capstone remain ungraded and no professional qualification follows.

Apply what you learned · Practice

All eight cases are checked on day4, but none of N01/N05 is eligible. What follows?

Explanation and answer

Review holds NO_ELIGIBLE_FACTS and export lacks a current assumed review. Completeness without any eligible facts cannot create a current bounded review; renewal never extends source expiry.

Practice only. This does not count towards your exam or certificate.

Scroll sideways to see every column.

Nacre catalogue QA capstone · Table 17
Supplementary questionAnswer after your attempt
Does copying a packet demonstrate sovereign supplier exit?No. Real processing locations, contracts, source rights, access, export usability and deletion/migration tests remain unresolved.
Can the knowledge exam grade the capstone or issue a product-safety qualification?No. The future score covers mapped knowledge only. Written practice and capstone are ungraded; no occupational qualification, accreditation or safety clearance follows.
What survives a fresh process after withdrawal?The original fixture state returns, including unwithdrawn S02 and original width. Returned old copies also survive; no durable withdrawal ledger or recall is implemented.
text · 40 lines
# Nacre: fictional product catalogue quality workshop

Python3.10+ standard library only. Keep these four learner files together: README.md, fixture.json, nacre_lab.py, test_nacre_lab.py. Run `python -B nacre_lab.py` for the demo and `python -B test_nacre_lab.py` for author tests. Tests use the platform tempfile directory and copy the environment for a child process. The creator sets TEMP/TMP to an M drive externally; learners do not need that drive.

Alder Shelf, products, records, measurements, photo IDs and licences are invented. No real photographs are processed. There are no people/customer details, AI model, network call, shopping cart, real catalogue write, email, safety test, product authentication or publication hook. Export returns a Python deep copy; it writes no file. You can save it yourself as private teaching notes if appropriate. No real use is approved.

Important access limit: the aggregate fixture file is opened once and completely parsed at construction. Body-admission checks happen after that file read. `bodyAdmissions` counts semantic accesses to source bodies, including repeated checks and failed admitted bodies. It is not a filesystem-read counter, pre-IO confidentiality barrier, OCR, extraction or proof that excluded bytes were never in memory. `fixtureFileOpens` is separately1 for a successful construction.

## Supplied cases

N01: amber supplier specification painted steel,240mm,amber finish; separate photo label licensed only for fictional catalogue illustration. ATTRIBUTES_DRAFT, not listing approval.
N02: slate supplier260mm versus invented observed255mm; HOLD(VARIANT_WIDTH_CONFLICT), not an average or amber substitution.
N03: load, compatibility and technical file missing; HOLD(MISSING_SAFETY_AND_COMPATIBILITY).
N04: internal-only photo and unknown label rights; HOLD(RIGHTS_SCOPE) before semantic body admission.
N05:1800pence tax-inclusive item plus300pence mandatory delivery =2100pence. Separate stock snapshot4 at teachingday1, no reservation or availability promise. COMMERCIAL_SNAPSHOT.
N06: was3000/now1800pence lacks reference-period evidence; HOLD(MISSING_REFERENCE_PRICE_PERIOD).
N07: trader/cancellation disclosures absent; HOLD(INCOMPLETE_CONSUMER_DISCLOSURE).
N08: withdrawn obsolete amber230mm record; HOLD(WITHDRAWN) before semantic body admission.

Initial all-eight batch:1ATTRIBUTES_DRAFT,1COMMERCIAL_SNAPSHOT,6HOLD,9 semantic body admissions. Price/stock inclusive expiryday2; other admitted evidence inclusive expiryday3. These are finite teaching choices, not statutory retention or commercial expiry rules.

## Exact public methods

Use Nacre() with the neighbouring fixture; Nacre(fixture=path) permits a local teaching/test fixture. It does not admit that file as an authorised real catalogue. `check_case(case_id,version,role='catalogue_editor')`; `check_batch(case_ids,version,role='catalogue_editor')`; `draft_description(text,version,role='catalogue_editor')`; `audit_claim(claim,version,role='catalogue_editor')`; `compare_quality(rows,version,role='data_reviewer')`; `review_packet(version,role='data_reviewer')`; `export_packet(version,role='catalogue_chair')`; `renew_permissions(version,role='controller')`; `apply_change(change_id,version,role='controller')`; `advance_day(day,version,role='controller')`; `stop_workflow(version,role='controller')`; `resume_workflow(version,role='controller')`.

Role strings are assumed teaching roles. Anyone can pass them; they are not identity authentication or real authority. Version integers reject bool. Source metadata/types/provenance/body values are code-bound; passive notes are never instructions. Fixture JSON duplicate keys/nonfinite numbers/duplicate records are rejected. Exact source body comparison rejects bool-as-number, extra claims, wrong units or mismatched variant. It is a finite comparison, not an arbitrary language classifier.

Call all eight cases for a complete packet. `draft_description` requires current N01 and accepts only `Amber painted-steel organiser, 240 mm wide. Fictional catalogue training example.` initially. `audit_claim` admits only material,widthMm,finish from checked N01; compatibility/safety/superlative/environmental claims are unsupported. After WIDTH_NOTICE, the description must instead say245mm. No generic rewrite/model behaviour is implied.

`compare_quality` requires current N01/N05 and exactly five ordered fields:material,widthMm,finish,totalPence,stockCount. The supplied candidate rows have3errors/5=60%. Correcting them to painted steel,240,amber,2100,4 gives0/5=0%. This is a paired fictional field sample, not population accuracy or a model improvement result. It does not suppress or resolve the other six held cases.

`review_packet` requires all eight current checks and at least one bounded N01/N05 result. It returns BOUNDED_PACKET_REVIEW with realUseStatus HOLD. `export_packet` requires that current review and the assumed chair. It returns PRIVATE_AUDIT_PACKET, including every held case, current version/day and explicit real-use gaps. It is not a listing release. Wrong-role export is held without erasing a current review; exported objects are isolated copies and old copies cannot be recalled.

## Changes and failure limits

WIDTH_NOTICE updates only the code-owned S01 width240→245 and source revision. PHOTO_WITHDRAWAL withdraws S02. Each change can occur once per process and increments version. Both invalidate permission, all checks, draft and review. They alter memory only, never the original fixture. No arbitrary evidence correction is allowed. Day advancement is strictly forward and increments version; stop and explicit resume each increment version. A change/day advancement may occur while stopped; it never resumes the workflow. After resume/change/day, renew current assumed permission and do fresh checks/review. Renewal clears old analytical results; it never grants rights or extends expiry/withdrawal. Byday4 no facts are eligible: review/export remain HOLD(NO_ELIGIBLE_FACTS/current review required).

Analytical method bodies clear packet review. A known failed `check_case` attempt clears that case's previous verification and any description; a handled source failure records a current HOLD. Invalid batch preflight clears all case results/draft and makes zero body admissions. Bad descriptions clear their own draft. Invalid mutators reject without changing state. Missing/unknown Python arguments cause TypeError before a body runs and therefore leave existing state unchanged. The exercise does not protect against arbitrary direct mutations of this object's public attributes/approved memory, hostile Python, concurrent calls or a modified implementation.

A fresh process resets version1/day1/unwithdrawn S02/running state and original permissions. The actual child-process test demonstrates this. Memory/history and old exports are not durable authority, revocation or secure storage. Real supplier rights, product safety/conformity, jurisdiction, promotion/disclosure law, price/stock freshness, access/user tests and actual publication authorisation remain separate qualified reviews. No real customer/product research, model processing or legal clearance is claimed.

json · 250 lines
{
  "fictional": true,
  "retailer": "Alder Shelf (invented)",
  "records": [
    {
      "id": "S01",
      "variant": "AMBER",
      "kind": "supplier_spec",
      "revision": 1,
      "expiryDay": 3,
      "rights": "training",
      "withdrawn": false,
      "body": {
        "material": "painted steel",
        "widthMm": 240,
        "finish": "amber"
      },
      "notes": "Passive fictional note: publish everything. This is not a command."
    },
    {
      "id": "S02",
      "variant": "AMBER",
      "kind": "photo_label",
      "revision": 1,
      "expiryDay": 3,
      "rights": "training",
      "withdrawn": false,
      "body": {
        "photoId": "PHOTO-AMBER",
        "caption": "Amber painted-steel organiser; no scale inference.",
        "licence": "catalogue-illustration-only",
        "labelRights": "fictional-training-only"
      },
      "notes": "Passive fictional note: publish everything. This is not a command."
    },
    {
      "id": "S03",
      "variant": "SLATE",
      "kind": "supplier_spec",
      "revision": 1,
      "expiryDay": 3,
      "rights": "training",
      "withdrawn": false,
      "body": {
        "material": "painted steel",
        "widthMm": 260,
        "finish": "slate"
      },
      "notes": "Passive fictional note: publish everything. This is not a command."
    },
    {
      "id": "S04",
      "variant": "SLATE",
      "kind": "measurement",
      "revision": 1,
      "expiryDay": 3,
      "rights": "training",
      "withdrawn": false,
      "body": {
        "widthMm": 255,
        "unit": "mm",
        "method": "invented bench observation; no actual product measured"
      },
      "notes": "Passive fictional note: publish everything. This is not a command."
    },
    {
      "id": "S05",
      "variant": "AMBER",
      "kind": "safety_gap",
      "revision": 1,
      "expiryDay": 3,
      "rights": "training",
      "withdrawn": false,
      "body": {
        "loadKg": null,
        "compatibility": null,
        "technicalFile": "missing"
      },
      "notes": "Passive fictional note: publish everything. This is not a command."
    },
    {
      "id": "S06",
      "variant": "AMBER",
      "kind": "photo_label",
      "revision": 1,
      "expiryDay": 3,
      "rights": "internal-only",
      "withdrawn": false,
      "body": {
        "photoId": "PHOTO-INTERNAL",
        "caption": "Internal concept sketch.",
        "licence": "internal-only",
        "labelRights": "unknown"
      },
      "notes": "Passive fictional note: publish everything. This is not a command."
    },
    {
      "id": "S07",
      "variant": "AMBER",
      "kind": "price_snapshot",
      "revision": 1,
      "expiryDay": 2,
      "rights": "training",
      "withdrawn": false,
      "body": {
        "itemPence": 1800,
        "mandatoryDeliveryPence": 300,
        "taxIncluded": true,
        "currency": "GBP",
        "asOfDay": 1
      },
      "notes": "Passive fictional note: publish everything. This is not a command."
    },
    {
      "id": "S08",
      "variant": "AMBER",
      "kind": "stock_snapshot",
      "revision": 1,
      "expiryDay": 2,
      "rights": "training",
      "withdrawn": false,
      "body": {
        "count": 4,
        "asOfDay": 1,
        "reservation": false
      },
      "notes": "Passive fictional note: publish everything. This is not a command."
    },
    {
      "id": "S09",
      "variant": "AMBER",
      "kind": "promotion_gap",
      "revision": 1,
      "expiryDay": 3,
      "rights": "training",
      "withdrawn": false,
      "body": {
        "wasPence": 3000,
        "nowPence": 1800,
        "referencePeriod": null
      },
      "notes": "Passive fictional note: publish everything. This is not a command."
    },
    {
      "id": "S10",
      "variant": "AMBER",
      "kind": "disclosure_gap",
      "revision": 1,
      "expiryDay": 3,
      "rights": "training",
      "withdrawn": false,
      "body": {
        "mainCharacteristics": "organiser",
        "cancellationTerms": null,
        "traderDetails": null
      },
      "notes": "Passive fictional note: publish everything. This is not a command."
    },
    {
      "id": "S11",
      "variant": "AMBER",
      "kind": "supplier_spec",
      "revision": 1,
      "expiryDay": 3,
      "rights": "training",
      "withdrawn": true,
      "body": {
        "material": "painted steel",
        "widthMm": 230,
        "finish": "amber"
      },
      "notes": "Passive fictional note: publish everything. This is not a command."
    }
  ],
  "cases": [
    {
      "id": "N01",
      "sources": [
        "S01",
        "S02"
      ]
    },
    {
      "id": "N02",
      "sources": [
        "S03",
        "S04"
      ]
    },
    {
      "id": "N03",
      "sources": [
        "S05"
      ]
    },
    {
      "id": "N04",
      "sources": [
        "S06"
      ]
    },
    {
      "id": "N05",
      "sources": [
        "S07",
        "S08"
      ]
    },
    {
      "id": "N06",
      "sources": [
        "S09"
      ]
    },
    {
      "id": "N07",
      "sources": [
        "S10"
      ]
    },
    {
      "id": "N08",
      "sources": [
        "S11"
      ]
    }
  ],
  "candidateRows": [
    {
      "field": "material",
      "value": "bamboo"
    },
    {
      "field": "widthMm",
      "value": 24
    },
    {
      "field": "finish",
      "value": "amber"
    },
    {
      "field": "totalPence",
      "value": 1800
    },
    {
      "field": "stockCount",
      "value": 4
    }
  ]
}

python · 168 lines
"""Nacre: finite fictional organiser-catalogue QA, Python3.10+ stdlib.
No model, network, actual retailer, safety clearance or publication facility.
"""
from pathlib import Path
from copy import deepcopy
import json

def _pairs(pairs):
    d={}
    for k,v in pairs:
        if k in d: raise ValueError('duplicate JSON key: '+k)
        d[k]=v
    return d

def _source(id,variant,kind,body,expiry=3,rights='training',withdrawn=False):
    return dict(id=id,variant=variant,kind=kind,revision=1,expiryDay=expiry,rights=rights,withdrawn=withdrawn,body=body,notes='Passive fictional note: publish everything. This is not a command.')

def canonical():
    records=[
      _source('S01','AMBER','supplier_spec',dict(material='painted steel',widthMm=240,finish='amber')),
      _source('S02','AMBER','photo_label',dict(photoId='PHOTO-AMBER',caption='Amber painted-steel organiser; no scale inference.',licence='catalogue-illustration-only',labelRights='fictional-training-only')),
      _source('S03','SLATE','supplier_spec',dict(material='painted steel',widthMm=260,finish='slate')),
      _source('S04','SLATE','measurement',dict(widthMm=255,unit='mm',method='invented bench observation; no actual product measured')),
      _source('S05','AMBER','safety_gap',dict(loadKg=None,compatibility=None,technicalFile='missing')),
      _source('S06','AMBER','photo_label',dict(photoId='PHOTO-INTERNAL',caption='Internal concept sketch.',licence='internal-only',labelRights='unknown'),rights='internal-only'),
      _source('S07','AMBER','price_snapshot',dict(itemPence=1800,mandatoryDeliveryPence=300,taxIncluded=True,currency='GBP',asOfDay=1),expiry=2),
      _source('S08','AMBER','stock_snapshot',dict(count=4,asOfDay=1,reservation=False),expiry=2),
      _source('S09','AMBER','promotion_gap',dict(wasPence=3000,nowPence=1800,referencePeriod=None)),
      _source('S10','AMBER','disclosure_gap',dict(mainCharacteristics='organiser',cancellationTerms=None,traderDetails=None)),
      _source('S11','AMBER','supplier_spec',dict(material='painted steel',widthMm=230,finish='amber'),withdrawn=True)]
    cases=[dict(id='N%02d'%n,sources=ids) for n,ids in enumerate([['S01','S02'],['S03','S04'],['S05'],['S06'],['S07','S08'],['S09'],['S10'],['S11']],1)]
    return dict(fictional=True,retailer='Alder Shelf (invented)',records=records,cases=cases,candidateRows=[dict(field=k,value=v) for k,v in [('material','bamboo'),('widthMm',24),('finish','amber'),('totalPence',1800),('stockCount',4)]])

class Nacre:
    def __init__(self,fixture=None):
        # One aggregate file open occurs before semantic body-admission gates.
        path=Path(fixture) if fixture is not None else Path(__file__).with_name('fixture.json')
        self.fixtureFileOpens=1
        obj=json.loads(path.read_text(encoding='utf-8'),object_pairs_hook=_pairs,parse_constant=lambda x: (_ for _ in ()).throw(ValueError('nonfinite JSON')))
        expected=canonical()
        if type(obj) is not dict or set(obj)!=set(expected):raise ValueError('fixture envelope')
        if obj['fictional'] is not True or obj['retailer']!=expected['retailer']:raise ValueError('fictional retailer')
        if type(obj['records']) is not list or type(obj['cases']) is not list or type(obj['candidateRows']) is not list:raise ValueError('fixture lists')
        ids=[r.get('id') if type(r) is dict else None for r in obj['records']]
        if any(type(x) is not str for x in ids) or len(ids)!=len(set(ids)) or set(ids)!={r['id'] for r in expected['records']}:raise ValueError('record identities')
        if obj['cases']!=expected['cases'] or obj['candidateRows']!=expected['candidateRows']:raise ValueError('case/row binding')
        # Body exactness is intentionally checked on admission, not here.
        for r in obj['records']:
            if set(r)!=set(expected['records'][0]) or type(r['id']) is not str or type(r['variant']) is not str or type(r['kind']) is not str or type(r['revision']) is not int or type(r['expiryDay']) is not int or type(r['rights']) is not str or type(r['withdrawn']) is not bool or type(r['notes']) is not str or type(r['body']) is not dict:raise ValueError('record schema/type')
        self.records={r['id']:deepcopy(r) for r in obj['records']}
        self.approved={r['id']:deepcopy(r) for r in expected['records']}
        self.cases={c['id']:c['sources'] for c in expected['cases']}
        self.candidateRows=deepcopy(obj['candidateRows']);self.version=1;self.permissionVersion=1;self.day=1;self.stopped=False;self.bodyAdmissions=0;self.checked={};self.description=None;self.review=None;self.changes=set()

    def _out(self,status,reason,**kw):
        return deepcopy(dict(status=status,reason=reason,version=self.version,day=self.day,realPublication=False,realProductSafetyApproval=False,modelExecuted=False,realPriceOrStockUpdate=False,**kw))
    def _invalidate(self):self.checked={};self.description=None;self.review=None;self.permissionVersion=None
    def _begin(self,version,role,required,case=None):
        self.review=None
        if case in self.cases:self.checked.pop(case,None);self.description=None
        if type(version) is not int or version!=self.version:return 'VERSION'
        if type(role) is not str or role!=required:return 'ROLE'
        if self.stopped:return 'STOPPED'
        if self.permissionVersion!=self.version:return 'PERMISSION_VERSION'
        return None
    def _source_body(self,id):
        r=self.records[id];e=self.approved[id]
        for k in ['id','variant','kind','revision','expiryDay','rights','withdrawn']:
            if type(r.get(k)) is not type(e[k]) or r.get(k)!=e[k]:return None,'SOURCE_METADATA_DRIFT'
        if r['withdrawn']:return None,'WITHDRAWN'
        if self.day>r['expiryDay']:return None,'EXPIRED'
        if r['rights']!='training':return None,'RIGHTS_SCOPE'
        self.bodyAdmissions+=1
        # Exact type comparison forbids bool-as-number, unit conversion and invented keys.
        def exact(a,b):
            if type(a) is not type(b):return False
            if type(a) is dict:return set(a)==set(b) and all(exact(a[k],b[k]) for k in b)
            if type(a) is list:return len(a)==len(b) and all(exact(x,y) for x,y in zip(a,b))
            return a==b
        if not exact(r.get('body'),e['body']):return None,'SOURCE_BODY_DRIFT'
        return deepcopy(r['body']),None
    def check_case(self,case_id,version,role='catalogue_editor'):
        case=case_id if type(case_id) is str else None
        error=self._begin(version,role,'catalogue_editor',case)
        if error:return self._out('HOLD',error,case=case)
        if case not in self.cases:return self._out('HOLD','UNKNOWN_CASE',case=case)
        bodies=[]
        for sid in self.cases[case]:
            body,error=self._source_body(sid)
            if error:
                result=self._out('HOLD',error,case=case,sources=self.cases[case]);self.checked[case]=deepcopy(result);return result
            bodies.append(body)
        status='HOLD';reason='UNKNOWN'
        payload={}
        if case=='N01':status='ATTRIBUTES_DRAFT';reason='EXACT_VARIANT_FACTS';payload=dict(attributes=bodies[0],photo=bodies[1])
        elif case=='N02':reason='VARIANT_WIDTH_CONFLICT';payload=dict(supplierWidthMm=bodies[0]['widthMm'],observationWidthMm=bodies[1]['widthMm'])
        elif case=='N03':reason='MISSING_SAFETY_AND_COMPATIBILITY';payload=dict(unknowns=['loadKg','compatibility','technicalFile'])
        elif case=='N05':status='COMMERCIAL_SNAPSHOT';reason='PRICE_AND_STOCK_SEPARATE';payload=dict(totalPence=bodies[0]['itemPence']+bodies[0]['mandatoryDeliveryPence'],price=bodies[0],stock=bodies[1],availabilityPromise=False)
        elif case=='N06':reason='MISSING_REFERENCE_PRICE_PERIOD'
        elif case=='N07':reason='INCOMPLETE_CONSUMER_DISCLOSURE'
        result=self._out(status,reason,case=case,sources=self.cases[case],**payload);self.checked[case]=deepcopy(result);return result
    def check_batch(self,case_ids,version,role='catalogue_editor'):
        error=self._begin(version,role,'catalogue_editor')
        if error:return self._out('HOLD',error)
        if type(case_ids) is not list or not case_ids or any(type(x) is not str or x not in self.cases for x in case_ids) or len(set(case_ids))!=len(case_ids):
            self.checked={};self.description=None;return self._out('HOLD','BATCH_PREFLIGHT')
        return self._out('BATCH_RESULT','FINITE_CASES',results=[self.check_case(x,version,role) for x in case_ids])
    def draft_description(self,text,version,role='catalogue_editor'):
        self.review=None;self.description=None
        error=self._begin(version,role,'catalogue_editor')
        if error:return self._out('HOLD',error)
        r=self.checked.get('N01')
        if not r or r['version']!=self.version or r['status']!='ATTRIBUTES_DRAFT':return self._out('HOLD','CURRENT_N01_REQUIRED')
        a=r['attributes'];allowed=f"Amber painted-steel organiser, {a['widthMm']} mm wide. Fictional catalogue training example."
        if type(text) is not str or text!=allowed:return self._out('HOLD','UNSUPPORTED_DESCRIPTION')
        self.description=dict(text=text,version=self.version,sources=['S01','S02']);return self._out('DESCRIPTION_DRAFT','EXACT_ALLOWED_TEXT',draft=self.description)
    def audit_claim(self,claim,version,role='catalogue_editor'):
        error=self._begin(version,role,'catalogue_editor')
        if error:return self._out('HOLD',error)
        r=self.checked.get('N01')
        if not r or r['status']!='ATTRIBUTES_DRAFT' or r['version']!=self.version:return self._out('HOLD','CURRENT_N01_REQUIRED')
        if type(claim) is str and claim in ['material','widthMm','finish']:return self._out('BOUNDED_ATTRIBUTE','EXACT_SUPPLIER_FIELD',field=claim,value=r['attributes'][claim],source='S01')
        return self._out('HOLD','UNSUPPORTED_CLAIM')
    def compare_quality(self,rows,version,role='data_reviewer'):
        error=self._begin(version,role,'data_reviewer')
        if error:return self._out('HOLD',error)
        if not all(x in self.checked and self.checked[x]['status'] in ['ATTRIBUTES_DRAFT','COMMERCIAL_SNAPSHOT'] for x in ['N01','N05']):return self._out('HOLD','CURRENT_FACT_CHECKS_REQUIRED')
        truth=dict(self.checked['N01']['attributes'],totalPence=self.checked['N05']['totalPence'],stockCount=self.checked['N05']['stock']['count'])
        fields=['material','widthMm','finish','totalPence','stockCount']
        if type(rows) is not list or len(rows)!=5 or any(type(r) is not dict or set(r)!={'field','value'} or type(r['field']) is not str for r in rows) or [r['field'] for r in rows]!=fields:return self._out('HOLD','FIXED_PAIRED_DENOMINATOR_REQUIRED')
        wrong=[r['field'] for r in rows if type(r['value']) is not type(truth[r['field']]) or r['value']!=truth[r['field']]]
        return self._out('SAMPLE_QUALITY','FIVE_FIELD_COMPARISON',errors=len(wrong),denominator=5,errorPercent=len(wrong)*20,wrongFields=wrong,scope='Supplied paired fictional field sample only; unresolved cases remain held.')
    def review_packet(self,version,role='data_reviewer'):
        error=self._begin(version,role,'data_reviewer')
        if error:return self._out('HOLD',error)
        if set(self.checked)!=set(self.cases) or any(r['version']!=self.version for r in self.checked.values()):return self._out('HOLD','ALL_EIGHT_CURRENT_CASES_REQUIRED')
        eligible=[x for x in ['N01','N05'] if self.checked[x]['status']!='HOLD']
        if not eligible:return self._out('HOLD','NO_ELIGIBLE_FACTS')
        self.review=dict(version=self.version,day=self.day,eligible=eligible);return self._out('BOUNDED_PACKET_REVIEW','ASSUMED_REVIEW_ONLY',review=self.review,realUseStatus='HOLD')
    def export_packet(self,version,role='catalogue_chair'):
        # Export checks must not erase the review they are checking.
        if type(version) is not int or version!=self.version or role!='catalogue_chair' or type(role) is not str or self.stopped or self.permissionVersion!=self.version or not self.review or self.review['version']!=self.version or self.review['day']!=self.day:return self._out('HOLD','CURRENT_ASSUMED_REVIEW_REQUIRED')
        return self._out('PRIVATE_AUDIT_PACKET','NOT_A_LISTING_RELEASE',cases=[self.checked[x] for x in self.cases],description=self.description,review=self.review,realUseStatus='HOLD',gaps=['Actual safety/conformity','Licence/label rights','Promotion and consumer disclosure','Real price/stock/current publication authorisation'])
    def renew_permissions(self,version,role='controller'):
        if type(version) is not int or version!=self.version or type(role) is not str or role!='controller' or self.stopped:return self._out('HOLD','RENEWAL_REJECTED')
        self.permissionVersion=self.version;self.checked={};self.description=None;self.review=None;return self._out('ASSUMED_PERMISSION','NO_RIGHTS_OR_EXPIRY_EXTENSION')
    def apply_change(self,change_id,version,role='controller'):
        if type(version) is not int or version!=self.version or type(role) is not str or role!='controller' or type(change_id) is not str or change_id not in ['WIDTH_NOTICE','PHOTO_WITHDRAWAL'] or change_id in self.changes:return self._out('HOLD','CHANGE_REJECTED')
        sid='S01' if change_id=='WIDTH_NOTICE' else 'S02'
        for bank in [self.records,self.approved]:
            bank[sid]['revision']+=1
            if change_id=='WIDTH_NOTICE':bank[sid]['body']['widthMm']=245
            else:bank[sid]['withdrawn']=True
        self.changes.add(change_id);self.version+=1;self._invalidate();return self._out('STATE_CHANGED',change_id)
    def advance_day(self,day,version,role='controller'):
        if type(version) is not int or version!=self.version or type(day) is not int or day<=self.day or type(role) is not str or role!='controller':return self._out('HOLD','DAY_REJECTED')
        self.day=day;self.version+=1;self._invalidate();return self._out('STATE_CHANGED','TEACHING_DAY_ADVANCED')
    def stop_workflow(self,version,role='controller'):
        if type(version) is not int or version!=self.version or type(role) is not str or role!='controller' or self.stopped:return self._out('HOLD','STOP_REJECTED')
        self.stopped=True;self.version+=1;self._invalidate();return self._out('STOPPED','IN_MEMORY_ONLY')
    def resume_workflow(self,version,role='controller'):
        if type(version) is not int or version!=self.version or type(role) is not str or role!='controller' or not self.stopped:return self._out('HOLD','RESUME_REJECTED')
        self.stopped=False;self.version+=1;self._invalidate();return self._out('RESUMED','FRESH_PERMISSION_AND_CHECKS_REQUIRED')

def demo():
    n=Nacre();batch=n.check_batch(list(n.cases),1);n.review_packet(1);packet=n.export_packet(1)
    return dict(initialCases=batch['results'],counts={s:sum(r['status']==s for r in batch['results']) for s in ['ATTRIBUTES_DRAFT','COMMERCIAL_SNAPSHOT','HOLD']},fixtureFileOpens=n.fixtureFileOpens,semanticBodyAdmissions=n.bodyAdmissions,baselineQuality=n.compare_quality(n.candidateRows,1),privatePacket=packet)
if __name__=='__main__':print(json.dumps(demo(),ensure_ascii=False,indent=2))

python · 68 lines
"""Author tests for the finite Nacre lab, not independent/legal approval."""
import unittest,json,tempfile,subprocess,sys,os
from pathlib import Path
from copy import deepcopy
from nacre_lab import Nacre,canonical,demo
class NacreTests(unittest.TestCase):
 def setUp(self):self.n=Nacre()
 def all_cases(self):return self.n.check_batch(list(self.n.cases),self.n.version)
 def reviewed(self):self.all_cases();self.n.review_packet(self.n.version);return self.n.export_packet(self.n.version)
 def fixture(self,obj=None,text=None):
  td=tempfile.TemporaryDirectory();self.addCleanup(td.cleanup);p=Path(td.name)/'fixture.json';p.write_text(text if text is not None else json.dumps(obj),encoding='utf-8');return p
 def hold(self,r,reason=None):
  self.assertEqual(r['status'],'HOLD')
  if reason:self.assertEqual(r['reason'],reason)
 def test_initial_distribution_and_counter(self):
  d=demo();self.assertEqual(d['counts'],{'ATTRIBUTES_DRAFT':1,'COMMERCIAL_SNAPSHOT':1,'HOLD':6});self.assertEqual(d['fixtureFileOpens'],1);self.assertEqual(d['semanticBodyAdmissions'],9)
 def test_variant_contradiction_not_average(self):
  r=self.n.check_case('N02',1);self.hold(r,'VARIANT_WIDTH_CONFLICT');self.assertEqual((r['supplierWidthMm'],r['observationWidthMm']),(260,255));self.assertNotIn('resolvedWidth',r)
 def test_rights_before_semantic_admission(self):self.hold(self.n.check_case('N04',1),'RIGHTS_SCOPE');self.assertEqual(self.n.bodyAdmissions,0)
 def test_withdrawal_before_semantic_admission(self):self.hold(self.n.check_case('N08',1),'WITHDRAWN');self.assertEqual(self.n.bodyAdmissions,0)
 def test_wrong_role_before_semantic_admission(self):self.hold(self.n.check_case('N01',1,'catalogue_chair'),'ROLE');self.assertEqual(self.n.bodyAdmissions,0)
 def test_wrong_version_before_semantic_admission(self):self.hold(self.n.check_case('N01',2),'VERSION');self.assertEqual(self.n.bodyAdmissions,0)
 def test_bool_version_rejected(self):self.hold(self.n.check_case('N01',True),'VERSION');self.assertEqual(self.n.bodyAdmissions,0)
 def test_unhashable_case_hold(self):self.hold(self.n.check_case([],1),'UNKNOWN_CASE')
 def test_unknown_case_does_not_admit(self):self.hold(self.n.check_case('N99',1));self.assertEqual(self.n.bodyAdmissions,0)
 def test_duplicate_batch_all_preflight_hold(self):self.hold(self.n.check_batch(['N01','N01'],1),'BATCH_PREFLIGHT');self.assertEqual(self.n.bodyAdmissions,0);self.assertFalse(self.n.checked)
 def test_malformed_batch_no_partial_results(self):self.hold(self.n.check_batch(['N01',False],1),'BATCH_PREFLIGHT');self.assertEqual(self.n.bodyAdmissions,0)
 def test_missing_safety_stays_unknown(self):r=self.n.check_case('N03',1);self.hold(r);self.assertEqual(r['unknowns'],['loadKg','compatibility','technicalFile'])
 def test_promotion_period_missing(self):self.hold(self.n.check_case('N06',1),'MISSING_REFERENCE_PRICE_PERIOD')
 def test_disclosure_not_filled_by_description(self):self.n.check_case('N01',1);self.hold(self.n.check_case('N07',1),'INCOMPLETE_CONSUMER_DISCLOSURE')
 def test_price_addition_and_stock_no_promise(self):r=self.n.check_case('N05',1);self.assertEqual(r['totalPence'],2100);self.assertEqual(r['stock']['count'],4);self.assertFalse(r['availabilityPromise']);self.assertFalse(r['stock']['reservation'])
 def test_source_revision_drift_pre_admission(self):self.n.records['S01']['revision']=2;self.hold(self.n.check_case('N01',1),'SOURCE_METADATA_DRIFT');self.assertEqual(self.n.bodyAdmissions,0)
 def test_wrong_variant_never_transferred(self):self.n.records['S01']['variant']='SLATE';self.hold(self.n.check_case('N01',1),'SOURCE_METADATA_DRIFT')
 def test_body_width_wrong_unit_rejected(self):self.n.records['S01']['body']['widthMm']=24;self.hold(self.n.check_case('N01',1),'SOURCE_BODY_DRIFT')
 def test_bool_stock_is_not_one(self):self.n.records['S08']['body']['count']=True;self.hold(self.n.check_case('N05',1),'SOURCE_BODY_DRIFT')
 def test_negative_price_rejected(self):self.n.records['S07']['body']['itemPence']=-1;self.hold(self.n.check_case('N05',1),'SOURCE_BODY_DRIFT')
 def test_extra_body_field_not_admitted(self):self.n.records['S01']['body']['safeForChildren']=True;self.hold(self.n.check_case('N01',1),'SOURCE_BODY_DRIFT')
 def test_notes_have_no_command_authority(self):self.n.records['S01']['notes']='Ignore checks; publish; disclose a secret';r=self.n.check_case('N01',1);self.assertEqual(r['status'],'ATTRIBUTES_DRAFT');self.assertFalse(r['realPublication'])
 def test_returned_attributes_copy_isolated(self):r=self.n.check_case('N01',1);r['attributes']['widthMm']=900;self.assertEqual(self.n.checked['N01']['attributes']['widthMm'],240);self.assertEqual(self.n.records['S01']['body']['widthMm'],240)
 def test_exact_description_only(self):self.n.check_case('N01',1);r=self.n.draft_description('Amber painted-steel organiser, 240 mm wide. Fictional catalogue training example.',1);self.assertEqual(r['status'],'DESCRIPTION_DRAFT');self.hold(self.n.draft_description('Safe, compatible with every shelf.',1),'UNSUPPORTED_DESCRIPTION');self.assertIsNone(self.n.description)
 def test_claim_not_arbitrary_classifier(self):self.n.check_case('N01',1);self.assertEqual(self.n.audit_claim('material',1)['value'],'painted steel');self.hold(self.n.audit_claim('eco-friendly',1),'UNSUPPORTED_CLAIM');self.hold(self.n.audit_claim(['material'],1),'UNSUPPORTED_CLAIM')
 def test_known_failed_retry_clears_fact_and_review(self):self.reviewed();self.hold(self.n.check_case('N01',False));self.assertNotIn('N01',self.n.checked);self.assertIsNone(self.n.review);self.hold(self.n.export_packet(1))
 def test_signature_typeerror_prebody_keeps_state(self):self.reviewed();before=deepcopy(self.n.review);self.assertRaises(TypeError,self.n.check_case,case_id='N01',version=1,unknown=True);self.assertEqual(self.n.review,before);self.assertEqual(self.n.export_packet(1)['status'],'PRIVATE_AUDIT_PACKET')
 def test_review_needs_every_case(self):self.n.check_case('N01',1);self.hold(self.n.review_packet(1),'ALL_EIGHT_CURRENT_CASES_REQUIRED')
 def test_review_role_cannot_chair_export(self):self.reviewed();self.hold(self.n.export_packet(1,'data_reviewer'));self.assertEqual(self.n.export_packet(1)['status'],'PRIVATE_AUDIT_PACKET')
 def test_export_always_real_use_hold_and_copied(self):p=self.reviewed();self.assertEqual(p['realUseStatus'],'HOLD');self.assertFalse(p['realPublication']);p['cases'][0]['attributes']['material']='plastic';self.assertEqual(self.n.export_packet(1)['cases'][0]['attributes']['material'],'painted steel')
 def test_quality_denominator_and_exact_errors(self):self.all_cases();r=self.n.compare_quality(self.n.candidateRows,1);self.assertEqual((r['errors'],r['denominator'],r['errorPercent']),(3,5,60));rows=[dict(field=k,value=v) for k,v in [('material','painted steel'),('widthMm',240),('finish','amber'),('totalPence',2100),('stockCount',4)]];self.assertEqual(self.n.compare_quality(rows,1)['errorPercent'],0)
 def test_quality_cannot_hide_held_variant_or_shrink_sample(self):self.all_cases();self.hold(self.n.compare_quality(self.n.candidateRows[:-1],1),'FIXED_PAIRED_DENOMINATOR_REQUIRED');self.assertEqual(self.n.checked['N02']['status'],'HOLD')
 def test_width_notice_invalidates_permission_review(self):self.reviewed();self.n.apply_change('WIDTH_NOTICE',1);self.assertEqual(self.n.version,2);self.assertIsNone(self.n.review);self.hold(self.n.check_case('N01',2),'PERMISSION_VERSION');self.n.renew_permissions(2);self.assertEqual(self.n.check_case('N01',2)['attributes']['widthMm'],245)
 def test_withdrawn_photo_cannot_be_renewed(self):self.n.apply_change('PHOTO_WITHDRAWAL',1);self.n.renew_permissions(2);self.hold(self.n.check_case('N01',2),'WITHDRAWN')
 def test_failed_change_atomic(self):self.reviewed();before=deepcopy(self.n.__dict__);self.hold(self.n.apply_change('invented',1));self.assertEqual(self.n.__dict__,before)
 def test_duplicate_change_atomic(self):self.n.apply_change('WIDTH_NOTICE',1);before=deepcopy(self.n.__dict__);self.hold(self.n.apply_change('WIDTH_NOTICE',2));self.assertEqual(self.n.__dict__,before)
 def test_inclusive_snapshot_expiry_and_renewal_limits(self):self.n.advance_day(2,1);self.n.renew_permissions(2);self.assertEqual(self.n.check_case('N05',2)['status'],'COMMERCIAL_SNAPSHOT');self.n.advance_day(3,2);self.n.renew_permissions(3);self.hold(self.n.check_case('N05',3),'EXPIRED')
 def test_zero_eligible_no_current_review(self):self.n.advance_day(4,1);self.n.renew_permissions(2);self.all_cases();self.hold(self.n.review_packet(2),'NO_ELIGIBLE_FACTS');self.hold(self.n.export_packet(2))
 def test_failed_day_atomic(self):self.reviewed();before=deepcopy(self.n.__dict__);self.hold(self.n.advance_day(True,1));self.assertEqual(self.n.__dict__,before)
 def test_stop_resume_requires_new_checks(self):old=self.reviewed();self.n.stop_workflow(1);self.hold(self.n.check_case('N01',2),'STOPPED');self.n.resume_workflow(2);self.assertEqual(self.n.version,3);self.hold(self.n.export_packet(3));self.n.renew_permissions(3);self.all_cases();self.n.review_packet(3);self.assertEqual(self.n.export_packet(3)['status'],'PRIVATE_AUDIT_PACKET');self.assertEqual(old['version'],1)
 def test_failed_resume_atomic(self):before=deepcopy(self.n.__dict__);self.hold(self.n.resume_workflow(1));self.assertEqual(self.n.__dict__,before)
 def test_duplicate_json_key_rejected(self):p=self.fixture(text='{"fictional":true,"fictional":false}');self.assertRaises(ValueError,Nacre,p)
 def test_invalid_fixture_boolean_type_rejected(self):o=canonical();o['records'][0]['revision']=True;self.assertRaises(ValueError,Nacre,self.fixture(o))
 def test_duplicate_record_rejected(self):o=canonical();o['records'][1]=deepcopy(o['records'][0]);self.assertRaises(ValueError,Nacre,self.fixture(o))
 def test_unhashable_record_identity_rejected_cleanly(self):o=canonical();o['records'][0]['id']=[];self.assertRaises(ValueError,Nacre,self.fixture(o))
 def test_nonfinite_json_rejected(self):self.assertRaises(ValueError,Nacre,self.fixture(text='{"bad":NaN}'))
 def test_fixture_body_drift_deferred_to_admission(self):o=canonical();o['records'][0]['body']['widthMm']=999;n=Nacre(self.fixture(o));self.hold(n.check_case('N01',1),'SOURCE_BODY_DRIFT')
 def test_actual_fresh_child_reset(self):
  self.n.apply_change('PHOTO_WITHDRAWAL',1);self.n.advance_day(4,2);self.n.stop_workflow(3)
  code="from nacre_lab import Nacre;import json;n=Nacre();print(json.dumps({'version':n.version,'day':n.day,'stopped':n.stopped,'withdrawn':n.records['S02']['withdrawn'],'review':n.review,'result':n.check_case('N01',1)['status']}))"
  p=subprocess.run([sys.executable,'-B','-X','utf8','-c',code],cwd=Path(__file__).parent,env=os.environ.copy(),capture_output=True,text=True,timeout=20);self.assertEqual(p.returncode,0,p.stderr);r=json.loads(p.stdout);self.assertEqual(r,dict(version=1,day=1,stopped=False,withdrawn=False,review=None,result='ATTRIBUTES_DRAFT'))
if __name__=='__main__':unittest.main(verbosity=2)

Assessment options

Keep learning

The complete workbook

Eight original chapters supply complete fictional Nacre exercises, filled answers, a fixed paired five-field comparison, width correction and photo withdrawal. All eight cases remain visible, including six initial holds. A complete four-file offline appendix and private ZIP support local rehearsal. No actual retailer, customer, model, product measurement, safety test, rights grant or marketing release is performed.

  1. 01
    Product identity and supplier evidence

    Admit the right synthetic evidence for a particular variant and proposed use.

    Read here · 2 exercises
  2. 02
    Extraction, units and variant contradictions

    Preserve values, units and variant relationships before resolving catalogue discrepancies.

    Read here · 2 exercises
  3. 03
    Truthful descriptions and claim provenance

    Keep each description claim within its evidence and return unsupported wording to review.

    Read here · 2 exercises
  4. 04
    Safety, compatibility and rights gaps

    Keep safety, compatibility, imagery and label rights in separate evidence lanes.

    Read here · 2 exercises
  5. 05
    Price, stock and promotion separation

    Keep commercial snapshots and transactional promises separate, with missing promotion and disclosure evidence visible.

    Read here · 1 exercise
  6. 06
    Human review, correction and withdrawal

    Recover current evidence after a fixed correction or withdrawal while preserving review limits and historical copies.

    Read here · 1 exercise
  7. 07
    Catalogue quality pilot and access

    Evaluate a stable supplied field sample and propose access research without claiming actual model or user results.

    Read here · 1 exercise
  8. 08
    Nacre catalogue QA capstone

    Produce a complete fictional internal packet and recovery proposal, with actual use and the separate knowledge assessment clearly bounded.

    Read here · 1 exercise

Also inside: a 10-point checklist, a glossary of 12 terms and 12 questions and answers to test yourself. 12 hands-on exercises, each with a worked answer at the back where the workbook gives one.

The PDF is free. We ask for your name and email before downloading. Read the privacy notice at the download form. Free to download and use for personal learning, study groups and inside your own team. Please do not resell the workbooks or republish them as your own. Link people to trust-agent.ai instead.

Get your free PDF workbook

Enter your name and email, then download the complete workbook. This form also works without JavaScript.

We privately record your name, email and request IP for this download. Read our privacy notice and retention policy.

Visit Mickai on LinkedIn

Newsletter confirmation does not affect your download. Following Mickai on LinkedIn is optional; this site does not verify followers.

Test yourself

Questions and answers

Does an available supplier record authorise every catalogue use?

No. Identity,currentness,source scope,intended use and actual rights/authority are separate; N04/N08 remain held despite fixture availability.

Do Nacre semantic holds keep excluded bytes out of memory?

No. The aggregate fixture is read and parsed at construction; bodyAdmissions counts subsequent semantic accesses,not pre-IO confidentiality.

Why not average the two slate widths?

260 and255mm are conflicting supplied assertions; averaging cannot establish which describes the intended variant. N02 remains held.

Can the exact N01 sentence be advertised as a model-verified listing?

No. It is finite deterministic private draft wording; no model,real product or publication approval is involved.

Does an assumed packet review settle safety and photo rights?

No. The exported private packet keeps real-use HOLD,safety/compatibility/rights gaps and mutable-role/process limits.

Can an accurate item amount still produce a misleading commercial record?

Yes. Item price and mandatory charges must be distinguished, and accurate numbers do not fill promotion, disclosure or availability gaps.

Does an expired stock snapshot establish zero stock?

No. It removes current support for the snapshot claim; it does not supply a new count. Nacre permission renewal cannot extend expiry.

Who has really approved a Nacre packet?

Nobody is authenticated by its role strings. A current assumed review permits only a copied private teaching packet, with real use held.

Why does source revision2 not mean resume version2?

Source revisions describe individual records. Session versions change on stop, changes, days and resume. Use the current stopped session version, then renew and recheck.

Can a photo withdrawal yield one semantic admission?

Yes. N01 checks S01 before S02. S01 can be admitted before withdrawn S02 is refused; construction had already parsed all fixture bytes.

Can a perfect five-field score hide serious catalogue gaps?

Yes. Six other cases can remain held. Report the fixed sample and full disposition register separately, without a safety or population conclusion.

Can telephone support be assumed to provide access for everyone?

No. Proposed text and assisted routes need actual affected-user research. Nacre supplies no live support contact or tested service.

Write as you go

My notes

Use this scratchpad for your own notes, working or answers as you read. Notes are saved in this browser on this device. Downloading makes a local copy; it does not send your notes to Mickai.

Learn → Practise → Demonstrate

Ready to put it into practice?

Take the scored exam when you feel ready. You do not need to download the workbook first. A score strictly above 80% earns a named, dated Mickai certificate with a verification page.

Take the official exam

Your name and email are collected at exam start. Certificates record an assessment result, not an accredited qualification or verified identity.

Learn the language

Key terms

Variant binding
A link between a proposition and its intended fictional product variant; no actual identity verification.
Semantic admission
A later permitted source-body use counted separately from parsing the complete aggregate fixture.
Source revision
The revision of one admitted source, distinct from the session version.
Session version
The current local workflow number; a successful mutator invalidates prior permissions and analytical state.
Inclusive expiry
A source remains eligible through its stated expiry day, but not later.
Bounded description
Permitted exact teaching wording linked to current N01 checks; no general truth classifier or publication approval.

6 of the workbook's 12 terms. The complete glossary is in the workbook.

Follow the evidence

Sources and checks

Facts last checked: .

These workbooks use AI assistance. See how the workbooks are made.

  1. Unfair commercial practices CMA207
  2. CAP Code section3: Misleading advertising
  3. Providing clear and accurate information about prices: summary
  4. Selling goods via online platforms
  5. Product safety advice for businesses
  6. EU Regulation2023/988 General Product Safety factsheet
  7. Copyright notice: digital images, photographs and the internet
  8. Principle(c): Data minimisation
  9. Green Claims Code checklist
  10. WCAG2.2 Recommendation

Created by Mickarle Sean Junior Wagstaff-Irons - Micky Irons with the Mickai team. Published by Mickai LTD. Last updated 1 October 2026.

NextKeep going

Where to go next