You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
draught(..., compact=) (keel #585, PR 198, live 2026-10-23 13:30): compact=True leaves out every section that is an empty list or object, and cut when it is empty; the frame (world, calendar, as_of, now, mode, policy) and every null stay, since a null is an answer. Sent as true or false; None (the default) sends nothing. Anything but a bool is a TypeError before anything is sent, as the npm SDK's 4.69.0. The live wire test now calls draught with all eight policy keys, so each is checked against the document's parameters.
A create sends the hidden mark (keel #587, PR 199, live 2026-10-23 13:30; folder spec §4.8). create, upsert and bulk now send hidden as the element has it (CREATE_FIELDS; sanitize_payload(..., create=True)), so an element hidden in a folder is created hidden from its first moment, never visible for a moment. Until now the three stripped it, so such an element was created visible: a behaviour change. Only the owner's keys and a co-builder's may send true; any other key gets a 403 hidden_not_allowed (new ApiError.is_hidden_not_allowed; a bulk slot's 403) and nothing is created; a server with the hidden mark off answers 422, param hidden. An update never sends it: patch, propose and push's patches strip it as before (keel drops it from an update, and a PUT that replaces ignores it). A create retried after a lost answer reads the element back and takes it as its own only if the mark matches. push creates nothing, so its withholding stands: an element hidden in the folder and not in the baseline is in the baseline, so on the server and visible, and keel moves an existing element's mark only by its own route (PushResult.hidden, unchanged; the docstring now says why). stops_run is unchanged: push never sends the mark, so it never meets the 403.
A reader that hands a world on leaves hidden elements out (Skeld's ruling, OW Council h58 #11461, #11462; folder spec §4.8): an element carrying hidden: true is hidden from whoever the world is handed to, never from its holder. folder.is_hidden (exported) is the one test: any value of the mark but absent, null and false, so a doubt leaves the element out. The Markdown pack leaves one out unless hidden=True (--hidden) on build_pack, pack_world, pack_folder and pack_api, counts it in 00-world.md's opening lines (*1 hidden element is left out of this pack.*), PackReport.hidden_left_out and the command's line; kept, it is labelled hidden under its id line (pack.HIDDEN_LINE), on its index line and on every link to it (Cy (character, hidden)), PackReport.hidden_kept. Unlike a proposed element, one left out is never named: a link to it is left out and an in-prose reference keeps only its own label (PackReport.hidden_links_left_out), as keel leaves a hidden element out of every answer to a reader who may not see it. A hidden element counts as hidden, never as proposed or a room element. The OKF bundle the same: left out unless hidden=True (build_bundle, export_okf, --hidden), no file, no index line, links to it left out (never a urn:uuid:), an in-prose reference its label, counted in OkfReport.hidden_left_out and world.md's onlyworlds_export.hidden_left_out; kept, its frontmatter carries hidden: true and every link and index line to it says (hidden). A world with no hidden element packs and exports byte for byte as before. export_world and write_folder copy a world and keep the mark; the doctor shows a world to its holder and drops nothing.
The .owworld writer keeps hidden elements unless the file is a share (Skeld's ruling, OW Atlas h20 #11469; folder spec §4.8). write_world_file and world_file_bytes take include_hidden=True: a world file is a copy, and a hidden element's file travels byte for byte. include_hidden=False leaves every element file in elements/ or spatial/ whose JSON object carries the mark out whole, nothing else rewritten (a link to it keeps the id, which dangles, as ruled). The count: private records have no report to follow (the writers return a path or bytes), so a list passed as hidden_left_out= receives the left-out files' paths, sorted; its length is the count. The two defaults differ on purpose: private records out unless asked, hidden kept unless the write is a share.
Tests: compact sent as true and false, absent sends nothing, a refusal sends nothing; hidden on create, upsert and bulk, none on a visible create, never on patch or propose, the 403 and the 422 raised once and not resent, a bulk slot's 403, the read-back with the mark; a push never sends the mark (the folder unhid it), and creates nothing for a hidden element new to the server; the pack and OKF each with a hidden element left out, counted and never named, kept and labelled, links to it either way, the command lines; the world file's copy byte-identical, the share's files and count, determinism either way; a staging case (an owner's hidden create unseen by a contributor, a contributor's refused; skipped without the staging keys, not run). 30 mutants watched failing, one per rule.