# Exercise 13. A second article from the same bytes An exercise for the [reconciliation with the pinned edition](/tutorials/pinned-edition/) page. The page's publication is pinned as a whole, while one fragment is taken from it: article 4. The same bytes hold article 5: ```text Статья 5. Приостановление Действие читательского билета приостанавливается на срок до шести месяцев решением директора архива при нарушении настоящих правил. ``` The quoted article reads: "Article 5. Suspension. A reader ticket is suspended for up to six months by the archive director's decision upon violation of these rules." **Setup.** Add the article-5 fragment and a norm on it: a director's suspension decision yields `TRUE_ONLY` on the question "is the ticket suspended". Then find out what happens if the fragment writes "nine months" and the fragment hash is recomputed for the new text. **Hint.** A fragment faces two checks, and they differ: the fragment text's hash and this text's occurrence in the publication's pinned bytes. A correct hash of a wrong text passes the first and falls on the second. Below is the solution. Try it yourself first. ## Solution The source, edition, and publication from the page: ```law language "law.core" version "0.2"; package tutorial.archive.pinned version "0.1.1"; namespace "urn:law:tutorial:archive:pinned"; entity Person; entity Official; relation in_researcher_registry(p: Person) kind institutional; relation accredited(p: Person) kind institutional; relation may_enter_rare_room(p: Person) kind institutional; relation director(d: Official) kind institutional; relation suspension_decision(d: Official, p: Person) kind empirical; relation reader_suspended(p: Person) kind institutional; source ARCHIVE_RULES { kind municipal_act; jurisdiction VELIKY_USTIN; number "2026-14"; label ru-KZ official "Правила пользования городским архивом Великого Устина"; } edition ARCHIVE_RULES_2026_RU of ARCHIVE_RULES { language ru; officiality official; adopted @2026-01-15; in_force [@2026-02-01, infinity); materialization_status PINNED_OFFICIAL_BYTES; } publication ARCHIVE_RULES_2026_RU_TEXT of ARCHIVE_RULES_2026_RU { media_type "text/plain; charset=utf-8"; uri "urn:tutorial:archive-rules-2026:ru"; retrieved_at @2026-01-20T09:00:00Z; content_hash "sha256:946bf1049eb7c2ac4a0a7c10f521d956ffe62f08e3a656a8fd0cdc0fa45d65c9"; local_path "sources/archive-rules-2026.txt"; } ``` The label reads: "Rules of use of the Veliky Ustin city archive". Two fragments from one publication and two norms: ```law fragment ARCHIVE_RULES_ART4 in ARCHIVE_RULES_2026_RU { kind article; locator "article/4"; text ru official """Читатель допускается в зал редких фондов, если он состоит в реестре исследователей и имеет действующую аккредитацию. """; content_hash "sha256:7f76a4311e52b9af58fcf3175f613794316583ae19c4f0767d0570774a456688"; } fragment ARCHIVE_RULES_ART5 in ARCHIVE_RULES_2026_RU { kind article; locator "article/5"; text ru official """Действие читательского билета приостанавливается на срок до шести месяцев решением директора архива при нарушении настоящих правил. """; content_hash "sha256:8a7d7475f910d1b528af7827b5a9709d2755c0707ec61160c4a850bd2b7438ec"; } @source(ARCHIVE_RULES_ART4) rule RareRoomAccess strict { for p: Person; when in_researcher_registry(p) and accredited(p); then may_enter_rare_room(p); } @source(ARCHIVE_RULES_ART5) rule SuspensionByDirector strict { for d: Official; for p: Person; when director(d) and suspension_decision(d, p); then reader_suspended(p); } ``` The quoted fragments read: "A reader is admitted to the rare-collections room if listed in the researcher registry and holding a valid accreditation" and "A reader ticket is suspended for up to six months by the archive director's decision upon violation of these rules." The norm takes from the article only the "director's decision — suspension" link. The up-to-six-months term and the "upon violation of the rules" ground are not expressed in the norm, an honest boundary: the term would need the decision date and a counting policy, the ground a violation fact. Both are other pages' subjects. ## Check A director's suspension decision yields `TRUE_ONLY` on `reader_suspended(ivanova)`; without a decision — `NEITHER`. The check's second half is a hand-made mutation from the setup. Replace "six" with "nine" in the fragment and recompute the fragment hash for the new text (`sha256:0fcb4c08a46a…`). The hash check passes, while the pinned-bytes occurrence check falls: ```text error LDC-E5202: fragment "ARCHIVE_RULES_ART5": официальный текст (ru) не найден в закреплённых байтах публикации "ARCHIVE_RULES_2026_RU_TEXT" — §194 fragment text not found in pinned publication ``` The diagnostic reads: 'fragment "ARCHIVE_RULES_ART5": official text (ru) not found in the pinned bytes of publication "ARCHIVE_RULES_2026_RU_TEXT"'. Exactly this check tells a pinned edition from the author's honest word. This lesson is held differently: the broken copy is checked in a temporary directory lacking the `sources/` file, where any refusal is `LDC-E5204` "bytes unreadable", not `LDC-E5202`. For the same reason the `LDC-E5204` lesson on the pinned-edition page passes regardless of what exactly is broken in it. What the exercise teaches. A fragment is a quotation, checked twice: against itself and against the source. Editing a quotation "to the meaning" will not pass even with a recomputed hash. What the article holds but the norm lacks is named explicitly, in prose next to the norm.