dowel_examples

Results of the suite that checks dowel from the outside. What each check fixes is in the README of its project; why some are left failing is in docs/10-findings.md.

Latest run

PASSED — 1053 checks: 1037 passed, 0 failed, 16 known, 0 fixed
7660d8f3dc1a 2026-08-07T03:48:35Z on main

projectstatecheckspassedfailedknownfixedtime
projects/01-minimalok10100001.2s
projects/02-configok21210005.0s
projects/03-featuresok17170000.3s
projects/04-diagnosticsok66660000.3s
projects/05-incrementalok48480001.7s
projects/06-runnerok17170000.4s
projects/07-robustnessok1451450001.3s
projects/08-lspok11011000012.7s
projects/09-acquisitionok676601018.4s
projects/10-toolchainok31310004.6s
projects/11-crossok17170002.4s
projects/12-storeok29290000.2s
projects/13-parallelok181800010.9s
projects/14-scaleok17170006.1s
projects/15-cppok70700007.4s
projects/16-migrateok54540001.6s
projects/17-depsok51510000.7s
projects/18-toolsok32310100.5s
projects/19-artifactsok35340100.6s
apps/blinkok36320402.9s
apps/hashxok38340401.5s
apps/httpdok37360105.3s
apps/jsonfmtok37340301.9s
apps/plotok42410102.1s
projects/docsok880000.1s

Checks

Every check this run made, by project. Each project links to its directory in the repository; README states what that project fixes.

ok projects/01-minimal — 10 checks (10 passed, 0 failed, 0 known, 0 fixed)
statecheck
passedhello: check passes
passedhello: build passes
passedhello: a second build runs nothing, across executors too
passedthe binary runs and prints hello
passedthe direct executor builds from scratch in 2 actions (1 compile, 1 link)
passedthe direct executor produces a working binary too
passedrelease builds too
passeddebug and release get separate build directories
passednothing unexpected is written next to the manifest
passedtest succeeds when the package declares no test target
ok projects/02-config — 21 checks (21 passed, 0 failed, 0 known, 0 fixed)
statecheck
passedapp: check passes
passedapp: build passes
passedapp: a second build runs nothing, across executors too
passeddebug: the arms chosen by match reach the compiler
passedrelease builds too
passedrelease: the public defines of a dependency switch as well
passedeach configuration gets its own build directory
passedthe default features can be turned off
passeddropping when feature.trace drops the define with it
passedenabled features appear in the build directory identifier
passedthe specialized defines reach the arguments of app
passedthe public defines of a dependency reach app
passedprivate flags of a dependency never reach a dependent
passedprivate defines of a dependency never reach a dependent
passedprivate includes of a dependency never reach a dependent
passedprivate flags still apply to the target's own compilation
passedprivate includes still apply to the target's own compilation
passedcompile_commands.json carries the specialized defines
passedprobe: check passes
passedprobe: test passes
passedprobe: test passes in release too
ok projects/03-features — 17 checks (17 passed, 0 failed, 0 known, 0 fixed)
statecheck
passedapp: check passes
passedapp: build passes
passedapp: a second build runs nothing, across executors too
passedthe default features bring the json edge in
passedgraph shows the json edge
passedjson and xml can both be enabled
passedboth edges appear
passedthe default features can be turned off
passedwhen the edge goes, neither the public defines nor the headers arrive
passedwhen the edge goes, the archive is not built either
passeda dependency behind a disabled feature is absent from the graph
passeda disabled optional dependency need not exist on disk
passedan undeclared feature passed to --features is rejected
passedan undeclared feature referenced from dowel.build is rejected
passedan undeclared feature gets a suggestion
passedjson: builds on its own
passedxml: builds on its own
ok projects/04-diagnostics — 66 checks (66 passed, 0 failed, 0 known, 0 fixed)
statecheck
passedcheck reports unknown-property
passedcheck exits non-zero on unknown-property
passedcheck reports unknown-kind
passedcheck exits non-zero on unknown-kind
passedcheck reports unknown-function
passedcheck exits non-zero on unknown-function
passedcheck reports unknown-cfg-key
passedcheck exits non-zero on unknown-cfg-key
passedcheck reports unknown-feature
passedcheck exits non-zero on unknown-feature
passedcheck reports non-exhaustive-match
passedcheck exits non-zero on non-exhaustive-match
passedcheck reports type-mismatch
passedcheck exits non-zero on type-mismatch
passedcheck reports undeclared-dependency
passedcheck exits non-zero on undeclared-dependency
passedcheck reports unknown-target
passedcheck exits non-zero on unknown-target
passedcheck reports dependency-cycle
passedcheck exits non-zero on dependency-cycle
passedcheck reports missing-manifest
passedcheck exits non-zero on missing-manifest
passedcheck reports missing-toolchain
passedcheck exits non-zero on missing-toolchain
passedcheck reports invalid-source
passedcheck exits non-zero on invalid-source
passedcheck reports unresolved-path
passedcheck exits non-zero on unresolved-path
passedcheck reports incomplete-runner
passedcheck exits non-zero on incomplete-runner
passedcheck reports missing-field
passedcheck exits non-zero on missing-field
passedcheck reports merge-conflict
passedcheck exits non-zero on merge-conflict
passedcheck reports abi-mismatch
passedcheck exits non-zero on abi-mismatch
passedcheck reports empty-glob
passedbuild reports invalid-source as well
passedbuild reports unresolved-path as well
passedbuild reports empty-glob as well
passedbuild exits non-zero on invalid-source
passedbuild exits non-zero on unresolved-path
passeda missing toolchain never reaches the shell
passedunknown-property points at the offending source
passedunknown-kind points at the offending source
passedunknown-function points at the offending source
passedunknown-cfg-key points at the offending source
passedunknown-feature points at the offending source
passednon-exhaustive-match points at the offending source
passedtype-mismatch points at the offending source
passedundeclared-dependency points at the offending source
passedunknown-target points at the offending source
passeddependency-cycle points at the offending source
passedmissing-manifest points at the offending source
passedmissing-toolchain points at the offending source
passedinvalid-source points at the offending source
passedunresolved-path points at the offending source
passedincomplete-runner points at the offending source
passedmissing-field points at the offending source
passedmerge-conflict carries the location of both values
passedmerge-conflict renders the dependent side of the conflict too
passedabi-mismatch carries the location of both values
passedabi-mismatch renders the dependent side of the conflict too
passedunknown-property carries a suggestion
passedthe manifest still passes check after applying the suggestion
passedapplying the suggestion keeps the value intact
ok projects/05-incremental — 48 checks (48 passed, 0 failed, 0 known, 0 fixed)
statecheck
passedapp: check passes
passeda first build runs every action (5 compiles, 1 archive, 3 links)
passedthe binary runs
passeda second build runs nothing
passedediting one source rebuilds it and everything downstream
passedthe edited unit is recompiled
passedthe other unit of the same target is not
passeda dependent's own sources are not recompiled
passedthe archive is rebuilt
passedthe dependent is relinked
passedediting a dependent's source touches nothing in the dependency
passedthe dependency's archive is left alone
passedediting a private header rebuilds through the depfile
passedthe unit that includes the private header is recompiled
passeda unit of the same target that does not include it is not
passeda private header never reaches a dependent
passednor a test that only uses the public header
passedediting a public header rebuilds every dependent unit
passedthe dependency's own units are recompiled
passedboth of them
passedand the dependent's unit as well
passedand the tests
passedtouching a source without changing it still rebuilds (mtime judgement)
passedtouching the manifest without changing it rebuilds nothing
passedadding only a comment to the manifest rebuilds nothing
passedadding a flag recompiles the target it applies to
passedthe flag reaches the compile action
passedand no further than the target that declares it
passedadding a source compiles only the new one
passedthe new unit is compiled
passedthe existing units are not
passedremoving a source rebuilds the archive without compiling anything
passedno compile action runs when only a source disappeared
passedthe first release build runs every action
passedswitching back to debug rebuilds nothing
passedswitching to release again rebuilds nothing
passedcore: both tests pass
passedtest exits non-zero when a test fails
passedthe summary counts both outcomes
passed--failed reruns only what failed last time
passed--failed leaves the passing test alone
passedthe repaired test passes under --failed
passed--failed says so when nothing failed last time
passeda full run passes again
passeda header edit is seen after building with ninja then direct
passeda header edit is seen after building with direct then ninja
passeda header edit is seen after building with ninja then ninja
passeda header edit is seen after building with direct then direct
ok projects/06-runner — 17 checks (17 passed, 0 failed, 0 known, 0 fixed)
statecheck
passedthe host triple needs no runner
passedrunning for another triple without a runner is refused
passedthe refusal carries the missing-runner code
passedthe refusal happens before the artifact is started
passedbuilding for another triple still works
passeda declared runner lets the tests run for another triple
passedthe runner receives its declared args then the artifact
passedthe runner starts in the package root
passedthe build directory is per target triple
passeda failing test still fails when it runs through a runner
passedthe exit status passes through the runner unchanged
passeda runner that transfers the artifact works
passedtransfer gets the local path and the destination appended
passedhost prefixes the destination as ADR-0008 specifies
passedthe launch command gets the remote path, not the local one
passedthe artifact really arrives at the destination
passedthe manifest carries no placeholder for the transferred path
ok projects/07-robustness — 145 checks (145 passed, 0 failed, 0 known, 0 fixed)
statecheck
passedarray-missing-comma does not abort dowel
passedarray-missing-comma is refused
passedarray-missing-comma is refused with a source location
passedarray-missing-comma is answered within the budget
passedcmake-syntax does not abort dowel
passedcmake-syntax is refused
passedcmake-syntax is refused with a source location
passedcmake-syntax is answered within the budget
passedjson-object does not abort dowel
passedjson-object is refused
passedjson-object is refused with a source location
passedjson-object is answered within the budget
passedkey-with-space does not abort dowel
passedkey-with-space is refused
passedkey-with-space is refused with a source location
passedkey-with-space is answered within the budget
passedmatch-missing-comma does not abort dowel
passedmatch-missing-comma is refused
passedmatch-missing-comma is refused with a source location
passedmatch-missing-comma is answered within the budget
passedmissing-equals does not abort dowel
passedmissing-equals is refused
passedmissing-equals is refused with a source location
passedmissing-equals is answered within the budget
passedmissing-value does not abort dowel
passedmissing-value is refused
passedmissing-value is refused with a source location
passedmissing-value is answered within the budget
passedsemicolon does not abort dowel
passedsemicolon is refused
passedsemicolon is refused with a source location
passedsemicolon is answered within the budget
passedsmart-quotes does not abort dowel
passedsmart-quotes is refused
passedsmart-quotes is refused with a source location
passedsmart-quotes is answered within the budget
passedstray-brace does not abort dowel
passedstray-brace is refused
passedstray-brace is refused with a source location
passedstray-brace is answered within the budget
passedtwo-headers-one-line does not abort dowel
passedtwo-headers-one-line is refused
passedtwo-headers-one-line is refused with a source location
passedtwo-headers-one-line is answered within the budget
passedunclosed-block-comment does not abort dowel
passedunclosed-block-comment is refused
passedunclosed-block-comment is refused with a source location
passedunclosed-block-comment is answered within the budget
passedunclosed-bracket does not abort dowel
passedunclosed-bracket is refused
passedunclosed-bracket is refused with a source location
passedunclosed-bracket is answered within the budget
passedunclosed-header does not abort dowel
passedunclosed-header is refused
passedunclosed-header is refused with a source location
passedunclosed-header is answered within the budget
passedunclosed-inline-table does not abort dowel
passedunclosed-inline-table is refused
passedunclosed-inline-table is refused with a source location
passedunclosed-inline-table is answered within the budget
passedunclosed-paren does not abort dowel
passedunclosed-paren is refused
passedunclosed-paren is refused with a source location
passedunclosed-paren is answered within the budget
passedunterminated-string does not abort dowel
passedunterminated-string is refused
passedunterminated-string is refused with a source location
passedunterminated-string is answered within the budget
passedwrong-arrow does not abort dowel
passedwrong-arrow is refused
passedwrong-arrow is refused with a source location
passedwrong-arrow is answered within the budget
passedyaml-colon does not abort dowel
passedyaml-colon is refused
passedyaml-colon is refused with a source location
passedyaml-colon is answered within the budget
passedok-block-comment does not abort dowel
passedok-block-comment is accepted
passedok-line-comment does not abort dowel
passedok-line-comment is accepted
passedok-single-quotes does not abort dowel
passedok-single-quotes is accepted
passedok-tab-indent does not abort dowel
passedok-tab-indent is accepted
passedok-trailing-comma does not abort dowel
passedok-trailing-comma is accepted
passedCRLF line endings does not abort dowel
passedCRLF line endings is accepted
passeda UTF-8 BOM on dowel.build does not abort dowel
passeda UTF-8 BOM on dowel.build is accepted
passeda UTF-8 BOM on dowel.toml does not abort dowel
passeda UTF-8 BOM on dowel.toml is accepted
passeda BOM in the middle of a line does not abort dowel
passeda BOM in the middle of a line is refused
passeda BOM in the middle of a line is refused with a source location
passedinvalid UTF-8 bytes does not abort dowel
passedinvalid UTF-8 bytes is refused
passedinvalid UTF-8 bytes is refused with a source location
passeda NUL byte does not abort dowel
passeda NUL byte is refused
passeda NUL byte is refused with a source location
passeda 200k element list does not abort dowel
passeda 200k element list is refused
passeda 200k element list is refused with a source location
passeda 200k element list is answered within the budget
passeda 10MB string literal does not abort dowel
passeda 10MB string literal is refused
passeda 10MB string literal is refused with a source location
passeda 10MB string literal is answered within the budget
passed200k comment lines does not abort dowel
passed200k comment lines is accepted
passed200k comment lines is answered within the budget
passed100k nested arrays does not abort dowel
passed100k nested arrays is refused
passed100k nested arrays is refused with a source location
passed100k nested arrays is answered within the budget
passed100k nested arrays is refused as nesting-too-deep
passed100k nested inline tables does not abort dowel
passed100k nested inline tables is refused
passed100k nested inline tables is refused with a source location
passed100k nested inline tables is answered within the budget
passed100k nested inline tables is refused as nesting-too-deep
passed50k nested calls does not abort dowel
passed50k nested calls is refused
passed50k nested calls is refused with a source location
passed50k nested calls is answered within the budget
passed50k nested calls is refused as nesting-too-deep
passed2k nested inline tables does not abort dowel
passed2k nested inline tables is answered within the budget
passednesting 63 deep is accepted
passednesting 100 deep is refused
passednesting 100 deep is refused with a source location
passed--max-nesting raises the limit
passed--max-nesting can lower the limit too
passed--max-nesting=0 is refused as a usage error
passed--max-nesting=513 is refused as a usage error
passed--max-nesting=abc is refused as a usage error
passed--max-nesting=-1 is refused as a usage error
passeddowel.build being a directory does not abort dowel
passeddowel.build being a directory is refused
passeddowel.build being a directory is refused with a source location
passeddowel.build being a symlink loop does not abort dowel
passeddowel.build being a symlink loop is refused
passeddowel.build being a symlink loop is refused with a source location
passedthree independent errors are reported in one run
ok projects/08-lsp — 110 checks (110 passed, 0 failed, 0 known, 0 fixed)
statecheck
passedinitialize is answered
passedthe server advertises hover
passedthe server advertises document sync
passeddidOpen publishes diagnostics even when there are none
passeda valid manifest publishes an empty list
passeddidChange republishes for the new text
passeddidSave does not upset the server
passeddidClose clears the diagnostics of that document
passedreopening a closed document publishes again
passedshutdown and exit end the process cleanly
passedthe server survives a body that is not JSON
passeddiagnostics still arrive after a body that is not JSON
passedthe server survives a JSON body that is not a request
passeddiagnostics still arrive after a JSON body that is not a request
passedthe server survives a body shorter than Content-Length says
passedthe server survives a body with no Content-Length
passedthe server survives a Content-Length that is not a number
passedan unknown method is answered with method-not-found
passedthe server survives an unknown method
passeda broken manifest yields at least one diagnostic
passedthe diagnostic carries the stable code
passedthe diagnostic names dowel as its source
passeda parse error is reported as an error
passedthe diagnostic carries a range
passeddiagnostic lines are zero based
passedthe column of a diagnostic is in UTF-16 units after ASCII
passedthe column of a diagnostic is in UTF-16 units after a two byte character
passedthe column of a diagnostic is in UTF-16 units after a three byte character
passedthe column of a diagnostic is in UTF-16 units after an astral plane character
passeda hover position is read in UTF-16 units after ASCII
passeda hover position is read in UTF-16 units after a two byte character
passeda hover position is read in UTF-16 units after a three byte character
passeda hover position is read in UTF-16 units after an astral plane character
passeddowel check still reports unterminated-string
passedthe language server reports unterminated-string as dowel check does
passeddowel check still reports expected-token
passedthe language server reports expected-token as dowel check does
passeddowel check still reports unknown-char
passedthe language server reports unknown-char as dowel check does
passeddowel check still reports expected-value
passedthe language server reports expected-value as dowel check does
passeddowel check still reports missing-newline
passedthe language server reports missing-newline as dowel check does
passeddowel check still reports unterminated-comment
passedthe language server reports unterminated-comment as dowel check does
passeddowel check still reports duplicate-table
passedthe language server reports duplicate-table as dowel check does
passeddowel check still reports unknown-function
passedthe language server reports unknown-function as dowel check does
passeddowel check still reports unknown-cfg-key
passedthe language server reports unknown-cfg-key as dowel check does
passeddowel check still reports non-exhaustive-match
passedthe language server reports non-exhaustive-match as dowel check does
passeddowel check still reports unknown-property
passedthe language server reports unknown-property as dowel check does
passeddowel check still reports unknown-kind
passedthe language server reports unknown-kind as dowel check does
passeddowel check still reports type-mismatch
passedthe language server reports type-mismatch as dowel check does
passeddowel check still reports toplevel-entry
passedthe language server reports toplevel-entry as dowel check does
passeddowel check still reports missing-field
passedthe language server reports missing-field as dowel check does
passeddowel check still reports expression-in-strict-toml in dowel.toml
passedthe language server reports expression-in-strict-toml in dowel.toml
passeddowel check still reports expected-token in dowel.toml
passedthe language server reports expected-token in dowel.toml
passeddowel check still reports unterminated-string in dowel.toml
passedthe language server reports unterminated-string in dowel.toml
passeddowel check still reports duplicate-key in dowel.toml
passedthe language server reports duplicate-key in dowel.toml
passeddowel check still reports missing-table in dowel.toml
passedthe language server reports missing-table in dowel.toml
passeddowel check still reports empty-glob
passedthe language server scans the file system for empty-glob
passeddowel check still reports no-sources
passedthe language server scans the file system for no-sources
passeddowel check still reports invalid-source
passedthe language server scans the file system for invalid-source
passeddowel check still reports unresolved-path
passedthe language server scans the file system for unresolved-path
passeddowel check still reports missing-toolchain
passedthe language server looks for the declared compiler too
passeddowel check refuses an unresolvable system package
passedthe language server does not run pkg-config to resolve it
passedopening a manifest never writes dowel.lock
passedhover on a property gives its type and merge rule
passedhover on includes gives union as its merge rule
passedhover on a builtin gives its signature
passedhover on a configuration key gives its domain
passedhover on a table kind explains the kind
passedhover on a target name names the target
passedhover on a block explains the block
passedhover answers for sources while a later line has a parse error
passedhover answers for glob while a later line has a parse error
passedhover answers for includes while a later line has a parse error
passedhover on a blank line answers with no contents
passedhover past the end of the file answers with no contents
passedhover past the end of a line answers with no contents
passedthe server survives hover positions that are out of range
passedhover on an unknown property answers with no contents
passedthe server survives a didChange nested 64 deep
passedthe server answers a didChange nested 64 deep
passedthe server survives a didChange nested 1000 deep
passedthe server answers a didChange nested 1000 deep
passedthe server survives a didChange nested 100000 deep
passedthe server answers a didChange nested 100000 deep
passeda UTF-8 BOM in the buffer is not reported as an error
passedCRLF in the buffer is not reported as an error
passedthe server survives non-ASCII paths in the buffer
ok projects/09-acquisition — 67 checks (66 passed, 0 failed, 1 known, 0 fixed)
statecheck
passedinstalling a revision from the upstream succeeds
passedthe resolved commit is written to stdout
passedinstalling an already installed revision succeeds and says so
passedan installed revision appears in the list
passedthe installed revision is laid out under versions/<sha>/bin
passedrun starts the requested revision without selecting it
passedthe shim can be created
passedthe shim is a link named dowel
passedwith no pin and no default, nothing is selected
passedthe shim refuses to run when nothing is selected
passedsetting a default succeeds
passedthe default is used where no pin file applies
passeda pin file is used in the directory that holds it
passeda pin file is found by walking up from a subdirectory
passedthe nearest pin file wins over one further up
passedselection works with the upstream unreachable
passedthe shim runs with the upstream unreachable
passedpinning an installed revision needs no network
passedpin writes the resolved commit to the pin file
passedpin records which specifier it resolved from
passeda pin file holding `nightly` is refused
passeda pin file holding `stable` is refused
passeda pin file holding `main` is refused
passeda pin file holding `branch:side` is refused
passeda pin file holding `19a4a40` is refused
passedrefusing a hand written channel name points at dowelup pin
passeda pinned revision that is not installed is refused
passedrefusing an uninstalled revision points at dowelup install
passeda pin file without a trailing newline is read
passeda pin file with CRLF is read
passedsurrounding spaces in a pin file are ignored
passedan uppercase commit hash in a pin file is read
passeda pin file with no commit hash is refused
knowna pin file with a UTF-8 BOM is read [F-011]
passeda branch that exists resolves
passeda tag that exists resolves
passeda release number resolves to its tag
passedstable resolves to the newest tag
passeda dated nightly resolves
passeda branch that does not exist is refused
passeda tag that does not exist is refused
passeda date before the first commit is refused
passeda malformed date is refused
passeda commit hash prefix that is too short is refused
passeda branch specifier with no name is refused
passedan unresolvable commit is refused
passeda malformed specifier and an unresolvable one exit differently
passeda full commit hash selects an installed revision
passeda commit hash prefix selects an installed revision
passedthe specifier it was installed from selects it
passedinstalling the same commit under another specifier succeeds
passeda specifier that installed successfully can select
passedthe first specifier still selects after a second one is added
passedthe list shows every specifier the revision was installed from
passedan unknown specifier is refused by the shim
passedrefusing an unknown specifier points at dowelup list
passeda leading specifier overrides the pin file
passedinstalling a revision that does not build fails
passeda failed install leaves nothing under versions/
passeda failed install does not appear in the list
passeda failed install keeps its checkout for inspection
passeda revision whose install failed is not selectable
passeduninstalling by the specifier it was installed from succeeds
passedan uninstalled revision leaves the list
passeduninstalling removes the directory under versions/
passeduninstalling the same revision twice is refused
passedselecting an uninstalled revision is refused
ok projects/10-toolchain — 31 checks (31 passed, 0 failed, 0 known, 0 fixed)
statecheck
passedgcc: check passes
passedgcc: build passes
passedgcc: the declared toolchain is what gets invoked
passedgcc: the artifact was translated by the declared compiler
passedgcc: the artifact agrees with the declaration, checked in C
passedclang: check passes
passedclang: build passes
passedclang: the declared toolchain is what gets invoked
passedclang: the artifact was translated by the declared compiler
passedclang: the artifact agrees with the declaration, checked in C
passedmatch on tc.c picks the clang arm
passedmatch on tc.c picks the gcc arm
passedthe clang arm actually compiles under clang
passedthe gcc arm actually compiles under gcc
passedswitching the toolchain rebuilds
passedthe rebuilt artifact is the one the new toolchain produced
passedbuilding again with the same toolchain runs nothing
passedswitching back rebuilds as well
passedswitching back gives the earlier compiler's artifact again
passedgcc: a first build runs every action
passedgcc: a second build runs nothing
passedgcc: editing a header rebuilds through the depfile
passedgcc: and settles again
passedclang: a first build runs every action
passedclang: a second build runs nothing
passedclang: editing a header rebuilds through the depfile
passedclang: and settles again
passeda toolchain that does not exist is refused
passedthe refusal carries the missing-toolchain code
passedthe refusal points at the declaration
passedthe missing toolchain never reaches the shell
ok projects/11-cross — 17 checks (17 passed, 0 failed, 0 known, 0 fixed)
statecheck
passedthe host build passes
passedthe host build produces a host artifact
passedthe host artifact names its own architecture
passedthe host tests pass
passedthe cross build passes
passedthe cross build produces an artifact for the target
passedthe cross tests run under the emulator and pass
passedthe host and cross build directories both survive
passeda second cross build runs nothing
passedthe host build is not confused by the cross build
passedand the cross build is still up to date afterwards
passedbuilding for a triple with no toolchain declared is refused
passedthe refusal carries the missing-toolchain code
passedthe mismatch is caught before anything is built
passedthe host build still needs no declaration
passeddeclaring the host compiler for another triple is allowed
passedand it produces a host artifact, which readelf shows plainly
ok projects/12-store — 29 checks (29 passed, 0 failed, 0 known, 0 fixed)
statecheck
passedthe first run in a fresh tree stores and restores nothing
passedthe next process restores what the first one stored
passedand stores nothing new when nothing changed
passeda restored run still passes check
passeda restored run still builds
passedan untouched file is judged unchanged by its stat alone
passeda touched file falls back to its content fingerprint
passeda touched but unchanged file is still restored
passedan edited file is judged changed
passedan edited file is evaluated again and stored again
passeda file whose evaluation produced diagnostics is not stored
passedthe diagnostic is reported on the first run
passedand on the next process too, not only the first
passedfixing the manifest clears the diagnostic in the next process
passeda truncated value log does not change the answer
passedan empty value log does not change the answer
passedan index cut at a partial record does not change the answer
passedan index full of noise does not change the answer
passeda value log full of noise does not change the answer
passeda missing index does not change the answer
passeda missing value log does not change the answer
passeda store written by an unknown format version does not change the answer
passedthe store recovers by itself after being corrupted
passedcache info reports what the store holds
passedcache info names the format version
passedcache gc runs
passedcache gc removes stores left by older formats
passedcache gc keeps the store of the current format
passedcheck still passes after gc
ok projects/13-parallel — 18 checks (18 passed, 0 failed, 0 known, 0 fixed)
statecheck
passedby default the tests do not overlap
passedall of them pass when run sequentially
passed--test-jobs=1 is the same as the default
passed--test-jobs=4 really runs them at the same time
passedall of them pass when run in parallel
passed--test-jobs=2 overlaps as well
passedevery test still runs when only two go at a time
passedthe report keeps the requested order under parallelism
passeda failing test fails the run when sequential
passedthe sequential summary counts it once
passeda failing test fails the run when parallel
passedthe parallel summary counts it the same
passedthe exit status of the failing test survives parallelism
passed--failed reruns only the failure after a parallel run
passed--failed leaves the passing tests alone after a parallel run
passedthe repaired test passes again in parallel
passed--test-jobs with a negative count is refused
passed--test-jobs with a non-number is refused
ok projects/14-scale — 17 checks (17 passed, 0 failed, 0 known, 0 fixed)
statecheck
passedcheck passes on a package with 120 sources and 8 targets
passedthe first build runs one action per source, archive and link
passeda second build runs nothing and accounts for every action
passedediting one source of 120 rebuilds only it, the archive and the dependents
passedediting one dependent rebuilds only that dependent
passedediting the public header rebuilds everything that includes it
passedadding one source compiles only the new one
passedremoving one source recompiles nothing and relinks the dependents
passedthe tests of the wide package still pass
passedcheck passes through a 6 level dependency chain
passedthe first build of the chain runs every action
passeda second build of the chain runs nothing
passedediting the nearest level does not rebuild the whole chain
passedediting the deepest header rebuilds only what includes it
passedthe chain still builds after the edits
passedcheck on a large package stays far below the budget
passedthe plan phase is reported for a large package
ok projects/15-cpp — 70 checks (70 passed, 0 failed, 0 known, 0 fixed)
statecheck
passeda package of mixed extensions passes check
passeda .cc source is compiled by the C++ driver
passeda .cp source is compiled by the C++ driver
passeda .cpp source is compiled by the C++ driver
passeda .cxx source is compiled by the C++ driver
passeda .c++ source is compiled by the C++ driver
passeda .CPP source is compiled by the C++ driver
passeda .C source is compiled by the C++ driver
passeda .c source is still compiled by the C driver
passeda C++ library passes check
passeda C++ library builds
passedthe C++ source of the library uses the C++ driver
passeda C binary that depends on a C++ library passes check
passedits own source is compiled by the C driver
passedbut the link uses the C++ driver because a dependency is C++
passedthe binary links and runs
passeda C main gets the whole C++ runtime, not just the symbols
passedrunning it exercises the standard library, exceptions and constructors
passeda C test can call into the C++ library and pass
passedthe link never fails the way F-008 did
passeda target holding both C and C++ sources passes check
passedthe C source of a mixed target uses the C driver
passedthe C++ source of a mixed target uses the C++ driver
passeda mixed target links with the C++ driver
passedthe mixed binary agrees about which unit was compiled as what
passedthe mixed binary runs and its C and C++ halves both behave
passedcxx defaults to c++ when nothing is declared
passeda declared cxx is what gets invoked
passedthe library builds with the declared cxx
passedmatch on tc.cxx follows the declaration
passedand follows the default when nothing is declared
passeda C++ package with a missing cxx is refused
passedthe refusal carries the missing-toolchain code
passedthe refusal points at the declaration
passedthe missing C++ compiler never reaches the shell
passeda package with no C++ sources ignores a broken cxx declaration
passedand still builds
passeda chain of C packages over a C++ leaf passes check
passedthe C++ leaf of the chain uses the C++ driver
passedthe C layer between them uses the C driver
passedand so does the root
passedthe root links with the C++ driver although its dependency is C
passedthe chain builds and its test passes
passedthe root binary runs through two C layers into C++
passeda C++ binary that depends on a C library passes check
passedthe C dependency uses the C driver
passedthe C++ binary uses the C++ driver
passedthe link uses the C++ driver in this direction too
passedthe C++ binary builds and runs
passeda test target written in C++ builds and passes
passedthe mixed target builds from scratch
passedand settles
passeda depfile is written for the C++ translation unit too
passedediting a header that only C++ reads rebuilds through the C++ depfile
passedand the artifact reflects the new value
passedediting a header that only C reads rebuilds through the C depfile
passedand the artifact reflects that too
passedg++ is used when it is declared
passedthe library builds with g++
passedclang++ is used when it is declared
passedthe library builds with clang++
passedthe C and C++ compilers can come from different families
passedthe library builds with a mixed pair
passeda cross C++ package passes check
passedthe cross C++ compiler is used for the C++ source
passedthe cross C compiler is used for the C source
passedthe cross link uses the cross C++ driver
passedthe cross C++ build produces an artifact
passedthe cross C++ artifact is built for the target architecture
passedthe cross C++ test runs under the emulator and passes
ok projects/16-migrate — 54 checks (54 passed, 0 failed, 0 known, 0 fixed)
statecheck
passedcmake writes a compile database for the reference build
passedimport drafts a manifest pair from the CMake File API
passedimport writes a package manifest
passedimport writes a build manifest
passedthe package manifest is marked as an unverified draft
passedthe build manifest is marked as an unverified draft
passedimport points at the verify step that checks its own output
passedthe package takes its name from the CMake project
passedan executable becomes a bin target
passeda static library becomes a lib target
passedsources are listed one by one
passedglobbing is not used for the imported sources
passedan in-project link becomes a target() dependency
passedincludes and defines land in a private block
passednothing is drafted as public
passedthe drafted manifests pass check
passedthe drafted manifests build
passedthe binary built from the draft runs and agrees with the CMake build
passedimport refuses to overwrite manifests that are already there
passedthe refusal leaves the existing manifest untouched
passedthe refusal says the manifests are already there
passeda build directory with no File API reply is refused
passedthe refusal says how to produce the reply
passedevery buildable target kind is imported
passedan object library becomes a lib target
passeda shared library becomes a lib target too
passedthe draft says out loud that a shared library became a static one
passedan interface library does not become a target of its own
passedwhat an interface library handed to its users survives
passeda system library becomes a link flag
passedverify compares plans, so it needs no build of its own
passedthe compiler name, -c, -o and the -MD family are not differences
passed-DA, -D A=1 and -DA=1 are the same define
passeda relative include is resolved against the entry's directory
passedthe order of the arguments is not a difference
passeda genuine difference is still reported
passedthe difference names both what the reference had and what dowel has
passeda differing entry makes the comparison fail
passeda file only dowel builds is counted apart, and does not fail
passeda file the reference builds and dowel does not is counted as not ported
passedthe text form reports the same four buckets as the json form
passeda reference that is not there is refused
passeda reference that is not JSON is refused
passedan empty reference is refused
passeda release build directory is imported the same way
passedthe draft carries no optimization flag from the CMake build type
passedthe CMake build type does not become a define in the draft
passedthe draft carries no NDEBUG from a release CMake build type
passedthe drafted debug build of a debug import is unoptimized
passedthe drafted release build is actually optimized
passedthe drafted debug build keeps assertions
passedthe drafted release build of a release import is optimized
passedthe workflow that import prints verifies clean
passedverify ignores the build type on both sides, so any pairing is clean
ok projects/17-deps — 51 checks (51 passed, 0 failed, 0 known, 0 fixed)
statecheck
passeda version dependency resolves through pkg-config
passedthe resolved module enters the graph as a package
passeda package with a resolved system dependency builds
passedthe module's cflags and libs both reach the build
passedthe module's --cflags become compile flags
passedthe module's --libs become link flags
passeda version equal to what the system has is satisfied
passeda version below what the system has is satisfied
passeda version above what the system has is refused
passedthe refusal carries the unsatisfied-dependency code
passedthe refusal names the constraint that was not met
passedthe refusal says the constraint is a minimum
passedthe refusal points at the declaration in dowel.toml
passedthe refusal spans the declaration, not the whole file
passeda module the system does not have is refused
passedan unknown module is refused with the same code as a version mismatch
passedthe refusal names path and git as the way out
passedputting the module name back makes it resolve again
passeda version dependency is refused when pkg-config cannot be run
passedthe refusal says that pkg-config itself could not be run
passedthe resolution is recorded in dowel.lock
passedthe lock records the version that was resolved, not the one declared
passedthe lock names where the resolution came from
passedthe lock says it detects a change rather than restoring one
passeda second check with a matching lock passes
passeda matching lock is left byte for byte alone
passeda matching lock says nothing
passeda lock that disagrees with the system warns
passedthe drift is a warning, not an error
passedthe warning names both the resolved version and the recorded one
passedthe warning says how to accept the new resolution
passeda drifted lock does not fail the build
passeda drifted lock is never rewritten on its own
passedremoving the entry lets the resolution be recorded again
passedthe freshly recorded entry holds what the system has
passedand the drift warning is gone
passedan unrelated entry does not disturb the check
passedan unrelated entry in the lock is kept
passedan inactive optional version dependency is not resolved at all
passedan inactive optional version dependency is not recorded either
passedenabling the feature resolves the optional module
passedand then it is recorded
passeda module with no link flags builds all the same
passedthe archive of a private system dependency reaches the final link
passedkeeping a system dependency private does not leak its includes
passedthe link flags of a private system dependency reach the final link
passeda library that keeps a system dependency private still links its dependent
passedand its includes are still not leaked to the dependent
passeddeclaring the same dependency public does link
passeda public system dependency puts its link flags on the final link
passedbut a public system dependency also hands its defines to the dependent
ok projects/18-tools — 32 checks (31 passed, 0 failed, 1 known, 0 fixed)
statecheck
passedthe archiver defaults to ar when nothing is declared
passedthe C compiler defaults to cc, as it always has
passeda declared archiver is the one that runs
passeddeclaring the archiver leaves the compiler alone
passedthe package builds with the declared archiver
passedmatch on tc.ar follows the declaration
passedand falls to the default arm when nothing is declared
passeda tc.* key that is not a declared tool is refused
passedthe refusal names the key that was written
passedan archiver that is not on PATH is refused
passedthe refusal carries the missing-toolchain code
passedthe refusal says it is the archiver, not the compiler
passedthe missing archiver never reaches the shell
passeda target that produces no archive ignores a broken archiver
passeda rebuild with the same archiver runs nothing
passedchanging the declared archiver rebuilds
passedthe archive is what gets rebuilt
passedthe objects are not recompiled for a different archiver
passedthe record is the tool's name, so swapping what the name resolves to does not rebuild
passeda cross build uses the archiver declared for that triple
passedand the compiler declared for the same triple
passedthe host build still uses the host archiver
passedthe cross build passes check
passedthe cross build produces an archive
passedthe objects inside the cross archive are for the target architecture
passedthe cross binary links against that archive and runs under the emulator
passeda misspelled toolchain key is refused
passedthe refusal suggests the tool that was meant
passedthe misspelled declaration is caught before anything is built
passedspelling the key correctly does select the cross archiver
passeda transform tool can be declared alongside the archiver
knownan inspection tool can be declared alongside the archiver [F-020]
ok projects/19-artifacts — 35 checks (34 passed, 0 failed, 1 known, 0 fixed)
statecheck
passeda package with an artifacts block passes check
passedand builds
passedan artifacts entry produces its derived file
passeda second entry produces a second file
passedthe artifact it derives from is still there
passedthe raw image is not an ELF, so the transform really ran
passedthe raw image carries what the source put in the artifact
passedthe hex image is in the format the second entry asked for
passedthe command is the tool, then the args, then the input and the output
passeda declared objcopy that is not on PATH is refused
passedthe refusal carries the missing-toolchain code
passedthe refusal names the object copier
passeda package with no artifacts block ignores a broken objcopy
passeda tool outside the toolchain table is refused
passedthe refusal lists the tools that can be named
passedthe refusal says the concrete command comes from the toolchain
passedan entry with no tool is refused
passedan entry that is not a table is refused
passedrestoring the block makes it pass again
passeda second build re-runs no transform
passedediting the source re-makes the derived file
passedchanging the args re-makes the derived file
passedand does not recompile anything
passeda cross build transforms with the objcopy declared for that triple
passedthe artifacts block never names the cross tool itself
passedthe cross build produces its image
passedthe derived file of a cross build is produced too
passedand the same manifest uses the host objcopy for a host build
passeda library with an artifacts block builds on its own
passeda standalone library produces its derived file
passedadding a binary that uses it still builds
passedthe library archive is still produced as a dependency
knowna library keeps producing its derived file when a binary depends on it [F-022]
passednaming the library explicitly builds it
passedand then the derived file appears
ok apps/blink — 36 checks (32 passed, 0 failed, 4 known, 0 fixed)
statecheck
passedthe bare-metal package passes check
passedand builds
passedthe artifact needs no shared library at run time
passedand carries no symbol from the standard library or its start-up
passedthe artifact is for the target architecture
passedand its float ABI agrees with the hf in the triple
passedthe entry point is the reset handler, not a libc start-up routine
passedthe vector table survives into the artifact although nothing calls it
passedleaving out --target is refused, but by the host compiler
passedthe message is about a flag, not about the package's targets
passedand dowel emits no diagnostic of its own about the target
knowna package can say which targets it is for [F-026]
passeda raw image is produced
passedan Intel HEX is produced
passedthe raw image is no longer an ELF
passedthe hex image is in the format the entry asked for
passedthe image is made by the objcopy declared for the triple
passedwithout a script the image is placed where the vector table cannot be
knownthe firmware runs on emulated hardware [F-025]
passedinstead the processor locks up at reset, having read no vector table
knowna linker script inside the package can be named from the manifest [F-025]
passedthe linker says it cannot open the script, so the path never resolved
passedthe same script does work when named by an absolute path
passedand then the image lands at the start of flash, where it can be programmed
passedand the firmware runs on emulated hardware and its test passes
passedthe firmware reports through semihosting, so the result comes from the device
passedthe first word of the image is the initial stack pointer
passedand the second is a reset handler inside flash
passedthe runner ends its args with -kernel, and dowel appends the artifact
knowna runner written into dowel.toml is not silently ignored [F-027]
passedand the failure claims no runner is declared, though one is
passedputting the runner back where it belongs makes the tests run again
passeda second build changes nothing
passedediting a peripheral source recompiles it
passedand the image is derived again
passedwhile its neighbour is left alone
ok apps/hashx — 38 checks (34 passed, 0 failed, 4 known, 0 fixed)
statecheck
passedthe library package passes check
passedand builds
passedits own tests pass
passedthe artifact is a static archive
passedthe C consumer builds against it
passedthe C++ consumer builds against it
passedthe archive exports exactly the names the header marks as the API
passedand nothing outside the library's own prefix is exported
passedan internal name that must cross translation units is hidden, not exported
passeda new global added without the API mark does not join the exported face
passeda consumer cannot include the library's internal header
passedand removing it builds again
passedthe C consumer gets the known answer for the standard check value
passedand the C++ consumer gets the same answer from the same archive
passedthe link of the C++ consumer runs through the C++ driver
knowna C++ consumer can declare its own abi label and still use a C library [F-028]
passedinstead the two labels are compared and the build is refused
passedthe refusal comes with a diagnostic code and both provenances
passedwriting the library's label into the consumer builds again
knowna dependency entry that names two sources is refused [F-029]
passedinstead the local path silently wins and the unreachable git source is never touched
knownthe same holds when the two sources are a path and a version [F-029]
passedremoving the second source leaves the package as it was
passeda dependency entry that names no source at all is refused
passedthe version in the manifest and the one in the header agree today
knownmoving the manifest version alone is noticed [F-030]
passedand the artifact keeps reporting the version written in the header
passeda shared library cannot be declared
passedand the kinds it does offer, which the diagnostic lists, hold nothing for one
passedwhat a build produces today is one static archive and nothing a foreign consumer could read
passedthe small-table configuration builds
passedand its tests give the same answers
passedthe answer a consumer sees does not depend on how the library was configured
passeda second build of the consumer runs nothing
passedediting a library source recompiles it for the consumer
passedand the consumer is linked again
passedwhile the library's other translation units are left alone
passedediting the public header recompiles the consumer that includes it
ok apps/httpd — 37 checks (36 passed, 0 failed, 1 known, 0 fixed)
statecheck
passedthe package passes check
passedit builds
passedthe default build asks for nothing beyond the standard library
passedthe default configuration compiles the portable waiter
passedand does not compile the one it did not choose
passedchoosing the other feature compiles the other waiter
passedforgetting to drop the defaults compiles both waiters
knownand a package that ends up with two implementations of one interface says so [F-031]
passedinstead the build succeeds, because a static archive keeps only the first definition
passedand the artifact carries whichever the linker reached first
passedand drops the first one
passedthe epoll configuration builds
passedthe default artifact says it is the portable waiter
passedthe epoll artifact says so too
passedthe threaded configuration asks the linker for threads
passedthe threaded configuration builds
passedand its artifact says it is threaded
passedthe default configuration builds
passeda request for a file that exists is answered with 200
passedthe response carries the media type the path implies
passedand the body is what the file holds
passeda request for a file that does not exist is answered with 404
passeda path that climbs out of the root is refused
passedthe epoll build answers the same request the same way
passedthe unit tests pass
passedand pass under the other waiter too
passeda rebuild of the same configuration is a no-op
passednothing runs when nothing changed
passedediting the chosen waiter recompiles it
passedand leaves the rest of the library alone
passedthe instrumented configuration passes check
passedand builds
passedthe instrumentation the library asks for reaches the link of the server
passedthe unit tests pass with the instrumentation on
passeda malformed request is answered or refused, never crashes the server
passedthe epoll configuration builds instrumented too
passedand the other waiter survives the same requests
ok apps/jsonfmt — 37 checks (34 passed, 0 failed, 3 known, 0 fixed)
statecheck
passedthe library package passes check
passedthe application package passes check
passedthe application builds
passednothing outside the standard library is linked in
passedthe public include directory of the library reaches the application
passedbut its private one does not, so the internals stay internal
passedincluding a private header of the library does not compile
passedand removing it builds again
passedan object is laid out over lines with two spaces
passed-c lays the same object out on one line
passednesting indents by depth
passedsurrounding space is dropped
passedan escaped quote inside a string survives
passedan empty array stays on one line
passed-i sets the width
passeda syntax error is refused with its byte offset
passedthe tests of both packages run and pass
passedboth test targets are collected from one invocation
passedthe test sources live outside the packages that declare them
passedbuilding with a forwarded feature passes
passedthe default build has the ordinary depth limit
passeda feature forwarded to a dependency reaches it
knowna forwarded feature does not split the build directory in two [F-023]
passedthe application builds in release
passeda second build of the same configuration runs nothing
passedediting one source recompiles it
passedand does not recompile its neighbours
knownrunning the tests does not make the next build redo work [F-024]
passedand a full build leaves nothing for the tests to redo
knownbuilding one target does not make the next full build redo work [F-024]
passedthe instrumented configuration passes check
passedand builds
passedthe instrumentation the library asks for reaches the link of the application
passedthe tests pass with the instrumentation on
passedhostile input is refused rather than crashing the instrumented build
passedthe deep configuration builds with the instrumentation too
passednesting past the raised limit is refused, not met with a stack overflow
ok apps/plot — 42 checks (41 passed, 0 failed, 1 known, 0 fixed)
statecheck
passedthe drawing package passes check
passedand builds
passedits pixel tests pass
passedthe default configuration of the shell builds
passedand so does the one that opens a window
passedthe system library the drawing package uses reaches the link of the shell
passedbut its headers do not, because the dependency was declared private
passedthe resolution is written to a lock file
passedand the lock names the package that was resolved
passedwith the mechanism that resolved it
passedthe configuration that opens no window does not need X11 at run time
passedthough it still needs the drawing library it actually uses
passedand the configuration that does open one needs X11
passedthe optional dependency is absent from the plan, not merely unused
passedonly the chosen shell is compiled
passedand choosing the other feature compiles the other one
passedthe default artifact says which shell it carries
passedand the windowed artifact says the other one
passedwith two whens, asking for one backend compiles both
knowna manifest that can select two exclusive backends at once is refused [F-031]
passedinstead the linker reports multiple definition, with nothing from dowel
passedwritten as a match, the same flag selects exactly one
passedand the build that follows links
passedrendering to a file succeeds
passedthe file carries the size that was asked for
passedand the first pixel is exactly the background colour the header declares
passedthe body holds one pixel for each pixel of the canvas
passedthe windowed build runs against a real X server
passedand it gets as far as putting the image on the window
passedwithout a display it exits with a status of its own, not a signal
passedand it says what is missing rather than dying inside the library
passedwhile the other configuration renders with no display at all
passedthe instrumented configuration builds
passedand its tests pass
passedawkward sizes and values are refused or drawn, never crash the renderer
passedthe windowed configuration builds instrumented too
passedand opening a real window under instrumentation reports nothing
passedthe image handed to the server is not read past its own buffer
passeda second build of the same configuration runs nothing
passedediting the drawing source recompiles it
passedand the shell is linked again
passedwhile its neighbour is left alone
ok projects/docs — 8 checks (8 passed, 0 failed, 0 known, 0 fixed)
statecheck
passedevery relative link in the documentation resolves
passedthe project table in README.md matches projects/
passedthe application table in README.md matches apps/
passedthe documentation table in README.md matches docs/
passedcheck names quoted in the documentation exist
passedevery known_issue declaration names a finding that exists
passedthe index of docs/10-findings.md matches its sections
passedthe dowel revision quoted in the documentation matches dowel-ref

History

Each cell is passed / failed / known / fixed for that project. A dash means the project did not exist at that point.

runstatebranchcommitdowel01-minimal02-config03-features04-diagnostics05-incremental06-runner07-robustness08-lsp09-acquisition10-toolchain11-cross12-store13-parallel14-scale15-cpp16-migrate17-deps18-tools19-artifactsblinkdocshashxhttpdjsonfmtplottotal
2026-08-07T03:48:35Zokmain7660d8f3dc1aaf7d391f1e2210/0/0/021/0/0/017/0/0/066/0/0/048/0/0/017/0/0/0145/0/0/0110/0/0/066/0/1/031/0/0/017/0/0/029/0/0/018/0/0/017/0/0/070/0/0/054/0/0/051/0/0/031/0/1/034/0/1/032/0/4/08/0/0/034/0/4/036/0/1/034/0/3/041/0/1/01053
2026-08-06T12:30:58Zokmainfb4d394e090caf7d391f1e2210/0/0/021/0/0/017/0/0/066/0/0/048/0/0/017/0/0/0145/0/0/0110/0/0/066/0/1/031/0/0/017/0/0/029/0/0/018/0/0/017/0/0/070/0/0/054/0/0/051/0/0/031/0/1/034/0/1/032/0/4/08/0/0/033/0/0/034/0/3/0969
2026-08-05T10:30:54Zokmaincf2888d5f0d9af7d391f1e2210/0/0/021/0/0/017/0/0/066/0/0/048/0/0/017/0/0/0145/0/0/0110/0/0/066/0/1/031/0/0/017/0/0/029/0/0/018/0/0/017/0/0/070/0/0/054/0/0/051/0/0/031/0/1/034/0/1/08/0/0/026/0/0/027/0/3/0919
2026-08-05T03:57:00Zokmain878cdb8a2075af7d391f1e2210/0/0/021/0/0/017/0/0/066/0/0/048/0/0/017/0/0/0145/0/0/0110/0/0/066/0/1/031/0/0/017/0/0/029/0/0/018/0/0/017/0/0/070/0/0/054/0/0/051/0/0/031/0/1/034/0/1/07/0/0/0862
2026-08-03T03:54:38Zokmain8fb90df15f92a9c16191bb0f10/0/0/021/0/0/017/0/0/066/0/0/048/0/0/017/0/0/0145/0/0/0110/0/0/066/0/1/031/0/0/017/0/0/029/0/0/018/0/0/017/0/0/070/0/0/053/0/1/048/0/2/027/0/6/07/0/0/0827
2026-08-03T00:12:52Zokmain9bb5ceb209d12e99fc718f4510/0/0/021/0/0/017/0/0/066/0/0/048/0/0/017/0/0/0145/0/0/0110/0/0/066/0/1/031/0/0/017/0/0/029/0/0/018/0/0/017/0/0/070/0/2/046/0/3/048/0/2/07/0/0/0791
2026-07-30T16:25:58Zokmain49808ac5de0a3e84cbdddb7210/0/0/021/0/0/017/0/0/066/0/0/048/0/0/017/0/0/0145/0/0/097/0/0/066/0/1/031/0/0/017/0/0/029/0/0/018/0/0/017/0/0/070/0/2/046/0/3/07/0/0/0728
2026-07-30T03:58:37Zokmain314500155dc99ed13f48470310/0/0/021/0/0/017/0/0/066/0/0/047/0/1/017/0/0/0145/0/0/097/0/0/066/0/1/031/0/0/012/0/2/029/0/0/018/0/0/017/0/0/070/0/2/07/0/0/0676
2026-07-30T03:44:54Zokmain4546a243874a9ed13f48470310/0/0/021/0/0/017/0/0/066/0/0/047/0/1/017/0/0/0145/0/0/097/0/0/066/0/1/031/0/0/012/0/2/029/0/0/018/0/0/017/0/0/070/0/0/07/0/0/0674
2026-07-30T00:26:10Zokmain658861eadf3a9ed13f48470310/0/0/021/0/0/017/0/0/066/0/0/047/0/1/017/0/0/0145/0/0/097/0/0/066/0/1/031/0/0/012/0/2/029/0/0/018/0/0/017/0/0/035/0/0/07/0/0/0639
2026-07-29T16:10:49Zokmainc77f4253144a95daf9ff8dac10/0/0/021/0/0/017/0/0/070/0/0/047/0/1/017/0/0/0145/0/0/097/0/0/066/0/1/031/0/0/012/0/2/029/0/0/018/0/0/017/0/0/07/0/0/0608
2026-07-29T15:59:52Zokmaina8de02c1ad5195daf9ff8dac10/0/0/021/0/0/017/0/0/070/0/0/047/0/1/017/0/0/0145/0/0/097/0/0/066/0/1/031/0/0/012/0/2/029/0/0/018/0/0/07/0/0/0591
2026-07-29T15:41:23Zokmain986b5f773b5b95daf9ff8dac10/0/0/021/0/0/017/0/0/070/0/0/047/0/1/017/0/0/0145/0/0/097/0/0/066/0/1/031/0/0/012/0/2/07/0/0/0544
2026-07-29T14:46:56Zokmainb1380dd21bfe19a4a409f6e810/0/0/021/0/0/017/0/0/070/0/0/044/0/0/017/0/0/0118/0/12/088/0/9/062/0/3/07/0/0/0478
2026-07-29T12:49:06Zokmainf572f6c393f407f16ec59e4810/0/0/021/0/0/017/0/0/070/0/0/044/0/0/017/0/0/0118/0/12/07/0/0/0316
2026-07-29T00:28:01Zokmain83dc45bb1fbd07f16ec59e4810/0/0/021/0/0/017/0/0/070/0/0/044/0/0/017/0/0/07/0/0/0186
2026-07-28T14:57:38Zokmain0c03829f195107f16ec59e4810/0/0/021/0/0/017/0/0/064/0/0/044/0/0/07/0/0/0163
2026-07-28T14:45:50Zokmain23244295550f07f16ec59e4810/0/0/021/0/0/017/0/0/064/0/0/044/0/0/0156
2026-07-28T13:32:14Zokmainb69cc8fe3796a8a59e7c70aa10/0/0/021/0/0/012/0/4/037/0/10/094
2026-07-28T13:10:49Zokmain8523cf675458a8a59e7c70aa10/0/0/021/0/0/012/0/4/037/0/10/094