The same explanation can be misunderstood when before-and-after images exchange positions. A character count or flattened body match misses that difference. Northstar accepts paragraphs and media as an ordered plan, then compares the editor's assembled composition with that order after input.
Flattened text cannot describe media placement
ArticleText joins only text blocks with paragraph separators. It is useful for ordinary body checks but loses the positions of images and video. I did not use that flattened value as the article's only identity. ArticlePlan retains text, image and video entries in one ordered blocks array.
Media retain filenames and byte digests, and video retains a title. This rich contract also checks opening and closing text and combined adjacent paragraphs. Making order explicit lets assembly and verification read the same plan, reducing the need to reconstruct intent from whatever happens to be visible later. The structured representation preserves information a body string cannot carry.
Detect whole-plan changes separately from a body digest
ValidateArticleInput hashes JSON of the parsed complete plan. A media digest, placement or video title can therefore distinguish articles even when text is unchanged. A mismatch with ArticleProgress.contentHash raises ARTICLE_PLAN_CHANGED. Matching title and date do not justify appending a revised media composition to an earlier run.
A matching hash does not make the article factual or well made. It establishes plan consistency, not copyright, truth or editorial quality. Its purpose is to separate continuation of the same input from preparation of a new article. Human judgment about the content remains necessary rather than being replaced by a digest comparison.
Separate the committed prefix from the next pending item
ArticleProgress keeps confirmed blocks apart from a pending selection or insertion. Pending.index must equal the length of the committed prefix. Changed committed text or incompatible kinds signal a journal/plan mismatch. Completed work and an intention to send the next item do not belong in one undifferentiated list.
That structure also defines when a late-appearing image can be adopted as an existing request's result. A newly visible component alone is insufficient. The committed prefix must still match and the next kind must be right, preventing another person's edit from being appended as if it were an automation outcome. Continuation depends on continuity of evidence, not just visible progress.
Observed component identity and local file digest are different evidence
Editor observation reports ordered kinds, component identities and readiness. Matches sends articleExpectation to the trusted document root and reads checked and matches. It compares text content and a composition containing bound media component identities. Final verification also requires no pending item and a block count equal to the plan.
A component identity is not the digest of local source bytes. File hashes support selection binding; component identities identify inserted editor structure. This observation alone does not prove that the service stores byte-identical copies of the original files. Distinguishing each link between source material and editor composition keeps the resulting claim accurate.
Tests refuse a changed prefix before adopting added media
An existing test makes a selected image appear later while changing the earlier paragraph; the component must not be adopted. Other checks change a media digest to obtain a different contentHash and reject unsupported operations. This task read those functions and tests without editing customer drafts or starting a new external upload.
The shared module actually tests synthetic order, paragraph, media-byte and readiness differences in thirty checks. Its observations are supplied by the caller rather than reproducing the original editor's component binding. A structural-review example and actual service verification belong at different evidence levels, even when they illustrate the same underlying judgment.
Do not push layout outside the meaning of the content
An image may be decorative or essential evidence explaining a process and its result. If its position after a paragraph and order among other images change understanding, placement belongs in the article contract. That is why a correct text match alone may not justify calling the composition finished.
Adapting this approach to another editor first requires deciding where component identity and readiness come from. Reusing block names does not create trustworthy observation by itself. I wanted an inspectable connection between intended composition, input record and fresh observation, so a maker can explain how both content and arrangement were checked.