مهندسی سامانههای یادگیری و مَکنو · فصل ۶ — Compliance، Editor، Context Sharing و Mentor Quality · 320
Structured Content Editor / CMS Authoring UX
Design a structured-content authoring experience that separates canonical content schema from presentation; exposes block and field semantics; preserves revision identity and conflict state; validates required structure and accessibility metadata before promotion; supports keyboard-operable authoring and accessible-content assistance; provides deterministic preview from the same canonical revision; and keeps drafts, review and published states auditable. میتواند «Structured Content Editor / CMS Authoring UX» را در یک سامانهی یادگیری محدود با state/evidence/governance و QA مناسب طراحی کند.
Lesson summary
Design a structured-content authoring experience that separates canonical content schema from presentation; exposes block and field semantics; preserves revision identity and conflict state; validates required structure and accessibility metadata before promotion; supports keyboard-operable authoring and accessible-content assistance; provides deterministic preview from the same canonical revision; and keeps drafts, review and published states auditable.
میتواند «Structured Content Editor / CMS Authoring UX» را در یک سامانهی یادگیری محدود با state/evidence/governance و QA مناسب طراحی کند.
This lesson produces
میتواند «Structured Content Editor / CMS Authoring UX» را در یک سامانهی یادگیری محدود با state/evidence/governance و QA مناسب طراحی کند.
Who it is for
Foundation
Use a field map, one worked scenario and explicit state vocabulary before independent construction.
Repair
Identify the failed evidence dimension, use the smallest mutated fixture and rerun only the affected gate.
Experienced
Compress definitions; require trade-off defense, counterexample analysis and changed-context transfer.
Prerequisites
When the preview looks right but the content contract is wrong
Two authors edit the same lesson. Author A changes heading structure and an assessment block. Author B, still based on an older revision, adds a media block without alternative text. B's autosave arrives after A's revision has already become the canonical head. A CMS that simply stores the last payload can silently overwrite A's work. A preview built from a different draft can show reviewers something other than the publish target. Accessibility defects discovered only at publish time arrive too late.
This lesson builds Structured Content Authoring State Machine & Accessible Editor Contract v1. Canonical content uses schema-versioned blocks and fields; each autosave binds an explicit base_revision_id; stale bases branch into conflicts instead of overwriting; semantics and accessibility metadata are validated before promotion; a review revision is selected explicitly; and preview/publish derive only from that declared revision.
The goal is not a prettier editor. The goal is an authoring UX that can prove what changed, from which base revision, which gates passed or failed, exactly which revision the reviewer saw, and what is allowed to publish.
For: CMS/LMS engineers, authoring-workflow designers, frontend/backend engineers, accessibility and QA reviewers. Not for: replacing a design system, authoring live production content, or claiming organizational/legal conformance from this lesson alone.
Route and lesson boundary
MKN-027 owns Structured Content Editor / CMS Authoring UX only. Its hard prerequisite is MKN-026; MKN-028 later owns private Mentor/Reviewer context sharing. This lesson does not absorb either adjacent outcome.
Foundation learners use a field map and baseline. Repair learners isolate the first broken evidence dimension, such as stale base, alt text, or preview revision. Experienced learners defend trade-offs among flexibility, conflict safety, accessibility assistance, deterministic preview, and migration compatibility without collapsing them into a synthetic score.
Three checkpoints: F1 restates the boundary and a non-goal; F2 rejects one shortcut using an exact field/state; F3 independently recomputes the schema-v2 transfer from changed evidence.
Mental model: the editor is a state machine over structured revisions
Reference flow:
structured edit → schema validation → accessibility assistance/check → revision + autosave → conflict detection → review revision → deterministic preview → publish gate
Critical branch:
stale base → conflict branch → preserve both drafts → explicit merge/review, not last write wins.
Keep three objects distinct:
- Canonical content revision: schema-versioned blocks/fields with stable identities.
- Authoring draft/autosave branch: work in progress bound to an explicit base; it is not yet the canonical review revision.
- Review/preview/publish selection: one explicit revision that the reviewer sees and the renderer consumes.
A preview built from another revision breaks provenance even when it looks correct. Missing accessibility metadata must trigger assistance and validation rather than disappear behind a publish button.
Separate FACT / INFERENCE / DESIGN. ATAG and WCAG provide external facts. Aligning validation and preview with the canonical revision is an architecture inference. Exact schemas, states, and migration policy are local MAKNOW design.
Foundational contract: schema, revision, validation, and preview identity
Decision-critical fields are content_id, content_type, schema_version, block_id, block_type, field_semantics, required_state, validation_state, accessibility_metadata, alt_text_state, heading_structure_state, revision_id, base_revision_id, autosave_revision, conflict_state, author_ref, reviewer_ref, review_state, preview_revision, publish_state, migration_state, and audit_event_id.
Five invariants:
- Schema explicit: every revision declares its schema version; unknown blocks are not guessed into existence.
- Revision identity: an autosave without a base is weak evidence; a stale base must produce a conflict branch.
- Accessibility before promotion: media without required alternative text or invalid heading structure cannot honestly retain
validation_state=PASS. - Preview identity:
preview_revisionmust equal the selected review revision, not merely the latest draft. - Publish bounded: publishing requires valid schema/accessibility state, appropriate review, contained/resolved conflicts, preview identity, and compatible migration state.
Preserve typed non-success states: UNKNOWN, UNVERIFIED, STALE, REVIEW_REQUIRED, CONFLICT, HOLD, and INSUFFICIENT_EVIDENCE.
Designing the editor: block semantics, accessible assistance, and conflict-safe autosave
Structured blocks. Meaning should not be hidden in font size or CSS classes. Heading, assessment, callout, and media blocks need explicit types and field semantics. Presentation renderers can evolve without changing canonical meaning.
Schema validation. Validate required fields and data types at the block/field boundary. Messages should point to the exact field and remain keyboard-operable; a generic “content invalid” modal is not enough.
Accessibility assistance. ATAG distinguishes accessibility of the authoring tool itself from the tool's support for producing accessible content. For CMS/LMS authoring this includes keyboard-operable authoring and useful guidance/checks for content such as media alternatives and structure. WCAG 2.2 supplies testable requirements for the resulting web content, but does not define MAKNOW's editor architecture.
Revision-aware autosave. Every autosave declares its base. If the canonical head advanced from R11 to R12 while an autosave still says base_revision_id=R11, do not overwrite R12; create a conflict/branch record and preserve both versions.
Review selection. The reviewer sees an explicit revision identity such as REVIEWING:R12, not “preview latest.”
Deterministic preview. Renderer inputs are the exact review revision, declared schema version, and deterministic asset bindings. A revision mismatch fails the gate even if the HTML looks acceptable.
Publish gate. Publishing is a chain of evidence: valid schema, valid required accessibility metadata, contained/resolved conflicts, approved review state, matched preview identity, and compatible migration state.
Worked baseline: two editors, one stale autosave, one media block without alt text
The baseline uses content LESSON-77 on schema v1. Author A starts from R11, fixes heading structure and an assessment block, and produces R12. Author B also started from R11, adds media block BLK-M9 without alternative text, and B's autosave arrives after R12 exists.
Correct behavior:
base_revision_id=R11while canonical head=R12→conflict_state=CONFLICT_PRESERVED; B's work is not lost or overwritten into A's revision.- The media branch lacks alt text → accessibility validation on that branch is
FAIL; it cannot honestly claimvalidation_state=PASS. - The reviewer selects
R12; preview is rendered only fromR12. - Because an unresolved conflict branch remains,
publish_state=HOLDand the bounded decision isREVIEW_REQUIRED.
MKN-027-T1 aligns schema, revision/base, conflict, validation/accessibility, review/preview, publish, and migration evidence. lab://MKN-027/MKN-027-LAB1 makes those checks replayable.
Failure modes that must fail closed
- Overwrite a newer revision with a stale autosave →
HOLD / STALE_BASE_OVERWRITE. - Remove required alt text while leaving
validation_state=PASS→HOLD / ACCESSIBILITY_VALIDATION_CONTRADICTION. - Keep an invalid heading hierarchy while accessibility state says PASS →
HOLD. - Build preview from a draft other than the selected review revision →
HOLD / PREVIEW_REVISION_MISMATCH. - Omit schema version →
INSUFFICIENT_EVIDENCEorHOLD; the parser must not guess. - Accept a new block type under schema v1 without a migration/compatibility declaration →
HOLD. - Publish before review approval or with unresolved conflict →
HOLD. - Silently rewrite a historical v1 revision during v2 migration →
HOLD / HISTORICAL_REVISION_MUTATION. - Omit the audit event → the decision is not fully replayable.
Repair the smallest broken evidence dimension; never invent evidence.
Experienced bridge: canonical AST + evented revisions + a version-aware renderer
At scale, model structured content like a canonical AST/document graph: blocks own identity and semantics while presentation is a projection. A revision layer tracks base and conflict; a validation layer checks schema and accessibility; a renderer accepts an explicit revision plus schema version.
This separation lets the authoring UX improve without binding canonical meaning to a toolbar or HTML blob. Conflict handling can also become block-aware rather than string-only.
For collaborative editing you may evaluate optimistic concurrency, branch/merge, CRDT, or OT. The pattern name is not the proof. For each option, state how it proves identity, stale-base detection, conflict visibility, accessibility validation, and exact preview revision.
Alternatives and trade-offs
Rich-text HTML blob: easy initially, weaker semantics/migration and noisier diff/conflict. Structured block editor: stronger semantics and validation, but requires schema governance and migration discipline. Last-write-wins autosave: smooth-looking UX with hidden data-loss risk. Optimistic concurrency + explicit conflict: more friction, better provenance and recoverability. Preview latest draft: simple, but the reviewer can see something different from the publish target. Preview exact review revision: reproducible and auditable, requiring revision identity and deterministic rendering. Hard-block accessibility errors: stronger assurance, but error quality, false positives, and governed overrides matter. Warning-only: lower friction, greater risk that critical defects ship.
Do not hide the trade-off behind one aggregate score. Separate decisive evidence, advisory evidence, and escalation triggers.
Guided and independent practice
Guided: open baseline.json. Record schema/version, revision/base, validation/accessibility, conflict state, and review/preview identity for each relevant branch. Without looking at a supplied answer label, explain why the stale autosave cannot overwrite and why the branch with missing alt text cannot open publishing.
Repair: missing_alt_but_pass.json contains one contradiction. Identify the first invalid field/state and the minimal repair. Then run preview_wrong_revision.json and explain the difference between “a valid render” and “a render of the correct revision.”
Independent: schema v2 introduces interactive_code while old lessons remain on v1. Design a compatibility/migration path that preserves v1 history, keeps v1 rendering replayable, accepts the new block only under declared v2, and derives preview/publish using each revision's declared schema version.
Verification: what is actually proven?
Each run records a fixture identity, deterministic issues, bounded decision, and visible evidence references. The lab is synthetic: it proves the contract for these fixtures, not production-editor behavior or organizational conformance.
The baseline should be REVIEW_REQUIRED: the conflict is preserved, the media branch has an accessibility failure, preview is tied to the review revision, and publishing stays on HOLD. Stale overwrite, false accessibility PASS, preview mismatch, missing schema, an unknown v1 block, premature publish, and missing audit must all fail closed.
The visible rules and fixtures are the oracle. Hidden model reasoning is not.
Assessment and transfer: schema v2 without rewriting history
Transfer requirement: a new block type appears in schema v2 while historical lessons remain on schema v1.
A bounded design does the following:
- Historical
v1revisions remain immutable; their schema version does not change. - The renderer chooses a v1 or v2 compatibility path from the revision's declared version.
- The new block is valid only under v2; inserting it into v1 without explicit migration is
HOLD. - Migration creates a new revision instead of rewriting the old one.
- Preview and publish render each revision under that revision's schema version.
- Audit evidence links the old revision, new revision, and migration event.
The healthy transfer fixture yields COMPATIBILITY_REVIEW_REQUIRED: compatibility and history preservation are correct, but v2 promotion still requires explicit review. A silent-rewrite fixture must yield HOLD.
References, claim boundaries, and freshness
- W3C ATAG Overview includes CMS and LMS tools within authoring-tool scope and separates accessibility of the authoring tool from helping authors produce accessible content. The overview was updated 14 November 2025 and says ATAG 2.0 remains relevant even though the Recommendation was published in 2015.
- WCAG 2.2 is a W3C Recommendation for web-content accessibility with testable criteria including text alternatives, information/relationships, and keyboard accessibility. The current Recommendation is dated 12 December 2024.
- Schema taxonomy, revision state machine, conflict policy, validation severity, exact-preview rule, and migration policy in this lesson are MAKNOW DESIGN; ATAG/WCAG do not prescribe those local architecture choices.
Official sources were rechecked on 2026-09-13. Practice-evolving claims must be requalified by 2027-01-15 or earlier after a material guidance change. Accepted package bytes are never silently rewritten; canonical changes require a new version.
Closing question: which shortcut creates the most false confidence in your current editor—HTML blobs, last-write-wins, warning-only accessibility, or preview-latest—and which exact evidence field exposes it?
Assessment
There is no answer key in this lesson pack; answer it yourself and mark honestly. "Needs review" sends the lesson to your review queue.
Assessment rubric
All five dimensions are blocking.
| Dimension | Sufficient evidence |
|---|---|
| identity_and_contract | MKN-027 structured-authoring boundary is explicit; adjacent commerce/context-sharing outcomes stay outside. |
| exact_evidence_binding | Schema/block, revision/base, validation/accessibility, conflict, review/preview, publish/migration and audit evidence are traceable. |
| negative_evidence | At least one stale-base/accessibility/preview shortcut fails closed with a typed non-success state. |
| bounded_decision | Publish/readiness state is no stronger than visible evidence; external standards are not treated as local architecture authority. |
| transfer | Schema-v2 decision is rebuilt from changed evidence; v1 history is preserved and no historical revision is silently rewritten. |
References & freshness
Case studies
Lab files
This lab is fully synthetic and offline. It mutates no production tenant, credential, or live content.
- Inspect
fixtures/baseline.jsonand extract schema/revision/base/conflict/accessibility/review/preview evidence before choosing a state. gate_rules.pycontains the visible deterministic rules; there is no hidden oracle.- Copy
evidence/decision.template.jsonand fill in your decision. - Run:
python run_checks.py fixtures/baseline.json evidence/your-decision.json - Run mutations one at a time; repair only the broken evidence dimension.
- Solve
transfer/transfer_fixture.jsonindependently; do not use the baseline decision as the oracle.
Goal: prove stale autosave never silently overwrites, accessibility contradictions remain visible, preview derives from the exact review revision, and schema-v2 migration does not rewrite v1 history.