Skip to content
zit Timeline
Login

Timeline

50 descendants and 50 ancestors of ed3a5589903d9f66

2026-07-16
04:47
Delta-encode blobs and manifests on ingest and serve them verbatim as section 7.2 delta cfiles on clone: store a commit's blob (against the same path's parent blob) and manifest (against the primary parent) as a delta when it comes in materially smaller and within the write-depth cap, carry the reconstructed-target size from the delta header as the cfile USIZE rather than the container's raw-delta-length prefix, and retransmit the stored delta container byte-for-byte so a chained-corpus clone reply drops 58-87 percent while a full-form corpus is byte-identical to before. check-in: 71235bf3be user: dmestas tags: delta
03:57
Serve stored cfile containers verbatim on clone: reuse each artifact's already-compressed 4.1 container instead of recompressing it on every clone reply, moving the per-clone compression cost off the serve path to ingest and cutting clone-serve time ~76% with byte-identical wire output. check-in: f4fe62b160 user: dmestas tags: trunk
03:51
Restrict verbatim cfile serving to the full form: the delta serve path had no production writer and wrote the delta's length as USIZE instead of the reconstructed artifact size (sync §7.2), so drop it and let delta-stored artifacts fall back to a conformant reconstructed full-form cfile. closed check-in: 8e430e7bd7 user: dmestas tags: perf
03:24
Serve stored cfile containers verbatim on clone, reusing each artifact's already-compressed container instead of recompressing every clone reply so the per-clone compression cost moves off the serve path to ingest. check-in: 84d47c3a21 user: dmestas tags: perf
02:41
Land the out-of-band sync clone benchmark on trunk: it splits clone time into build/frame/decode/respond/reframe/consume/persist/reopen phases behind a convergence-verified in-process clone, and attributes per-artifact cfile compression as a faithful share of the server respond phase, so the first clone-speed optimization targets measured work rather than a guess. check-in: 5f6f1286d1 user: dmestas tags: trunk
02:35
Report the sync clone benchmark's server phase honestly: drop the unmeasurable walk+compress vs decode+parse split and show only the standalone compression micro as a share of respond, since scanRequest and emitCloneReply are private so parse and walk can't be told apart at the public boundary. closed check-in: 53962101c0 user: dmestas tags: bench
02:10
Split the sync benchmark's server phase into timed decode, respond and reframe steps plus a standalone cfile-compression measurement, so clone-speed work can tell inbound igot decode+parse apart from the actual per-artifact compression instead of trusting one opaque server label. check-in: 997edb13b5 user: dmestas tags: bench
01:44
Add an out-of-band sync clone benchmark that splits round time by phase and tallies card/byte counters behind a convergence-verified clone, so clone-speed work starts from measured attribution rather than a guess. check-in: a5d904a3ef user: dmestas tags: bench
00:53
Merge trunk back onto cli after the growable delta queue, aligning the branch tip with trunk. check-in: a5260cc2eb user: dmestas tags: cli
00:44
Merge the growable pending-delta queue onto trunk: heap-backed and bounded by the message-body cap instead of a fixed 256 slots, so a real-world clone's thousands of dangling deltas per sync 7.4 are all retained and reconstructed — verified pulling multi-GB of fossil's own and sqlite's source past the former wall. check-in: a070f7fcb5 user: dmestas tags: trunk
00:36
Grow the pending-delta queue on the heap bounded by the message-body cap instead of a fixed 256 slots, so a real clone's many dangling deltas per sync 7.4 are all retained and reconstructed rather than aborting the exchange once past 256. check-in: 8af6244a64 user: dmestas tags: cli
2026-07-15
22:37
Merge the login-card polish onto trunk: pin the section A.5 auth vectors directly against the RFC bytes, scrub the plaintext password buffer after deriving the secret, and cover the legacy pre-credential config decode. check-in: 22d0c3de75 user: dmestas tags: trunk
22:31
Pin the section A.5 login vectors directly, zero the plaintext password buffer after deriving the secret, and cover the legacy config decode path check-in: 91988dd110 user: dmestas tags: cli
22:23
Merge trunk back onto cli after the login card. check-in: 56fbf01f2d user: dmestas tags: cli
22:23
Merge the section 6 client login card onto trunk: zit push signs a login card with the derived shared secret so a fossil server authorizes the write, persisting only the 40-hex derived secret at 0600 and never the password — completing authenticated push, the last interop direction. check-in: 52cb4d83bf user: dmestas tags: trunk
22:11
Sign push login cards with the derived shared secret so a fossil server authorizes the write, persisting only the 40-hex secret at 0600 and never the password check-in: f21e962a00 user: dmestas tags: cli
20:32
Merge trunk back onto cli after server delta ingest. check-in: b3167f749e user: dmestas tags: cli
20:31
Merge server-side delta ingest onto trunk: the server push path reconstructs a delta-form file card against its held basis per section 7.4 with section 7.7 integrity, then persists it, so a fossil push of a delta-encoded manifest lands on zit serve. check-in: b49f1fa330 user: dmestas tags: trunk
20:28
Accept a delta-form file card on the server push-ingest path: reconstruct against the held basis per §7.4, verify §7.7 integrity, then persist, so a fossil push of a delta-encoded manifest lands on zit serve check-in: 6a4dd5b819 user: dmestas tags: cli
20:02
Merge trunk back onto cli after delta reception, aligning for the push interop probe. check-in: 44be941a4f user: dmestas tags: cli
20:02
Merge section 7.4 delta reception onto trunk: reconstruct delta-form file and cfile cards against their basis with pre-store hash verification, defer a dangling delta in the pending queue and complete the chain to a fixpoint when the basis arrives, so an incremental pull of fossil's delta-encoded manifests converges. check-in: ea53cd3983 user: dmestas tags: trunk
19:57
Reconstruct delta-form file/cfile cards against their source per sync 7.4: apply an immediately-available basis with pre-store hash verification, retain a dangling delta in the pending queue while creating the source phantom and marking the target content-received, and complete the chain to a fixpoint when the basis arrives, so an incremental pull of fossil's delta-encoded manifests converges check-in: 890cf58924 user: dmestas tags: cli
19:30
Merge trunk back onto cli after incremental-pull interop, aligning for section 7.4 delta-file-card reception. check-in: 6ca2645a09 user: dmestas tags: cli
19:29
Merge incremental-pull interop onto trunk: pull and push carry the repository's stored project-code so a real peer accepts the request, and serve re-reads the on-disk log to its committed end per request so a live commit is advertised without a restart. check-in: bca7dec889 user: dmestas tags: trunk
19:26
Send the repo's stored project-code on pull and push, and serve the current on-disk log per request

The pull and push operation cards hardcoded the all-zero projectcode placeholder, which a real peer refuses (a sync projectcode mismatch must be refused); load the adopted code from the repository config the way serve already does and thread it through pullRun/pushRun so the request carries it. Separately, serve read the repository once at startup, so a check-in committed while it ran stayed invisible until a restart; re-read the on-disk log to its committed end per request so a live commit is advertised without restarting the server. check-in: aa601128eb user: dmestas tags: cli

18:53
Merge trunk back onto cli after bidirectional clone interop, aligning the branch for fossil pull/push round-trips. check-in: c4c1538a5f user: dmestas tags: cli
18:50
Merge the section 5.1 cfile trailing-LF padding onto trunk: consume and emit the padding LF that follows a cfile payload not ending in LF, so a clone interoperates with fossil's receiver and sender in both directions. check-in: 74a689d116 user: dmestas tags: trunk
18:48
Consume and emit the section 5.1 cfile trailing-LF padding so a clone reply interoperates with fossil's receiver and sender in both directions check-in: 8068804e51 user: dmestas tags: cli
18:22
Merge trunk back onto cli after the fossil-clone-completes milestone, aligning the branch for the remaining interop directions. check-in: 76f8219646 user: dmestas tags: cli
18:20
Merge the clone configuration phase onto trunk: answer reqconfig with no error per sync 9.3, derive a real per-repo project-code carried in the clone reply push card per 9.1, so a real fossil clone from zit serve completes past the configuration phase. check-in: cba2256e95 user: dmestas tags: trunk
18:18
Give every repository a real project code and answer reqconfig without erroring, so a fossil clone completes past the configuration phase check-in: 8ae44adff8 user: dmestas tags: cli
17:39
Merge trunk back onto cli after push, aligning the branch for the fossil interop smoke. check-in: b6f1e470be user: dmestas tags: cli
17:39
Merge zit push and server persistence onto trunk: pushed artifacts are durably appended to the served repository's log store and zit push sends local content the remote lacks until section 3.7 termination — clone, pull, and push now all round-trip over HTTP. check-in: c50b1f6e7e user: dmestas tags: trunk
17:36
Persist pushed artifacts durably into the served repository's log store and add zit push to send local content the remote lacks until section 3.7 termination check-in: 253465c64a user: dmestas tags: cli
17:17
Merge trunk back onto cli after pull, aligning the branch for push and server persistence. check-in: 9f8e395b86 user: dmestas tags: cli
17:17
Merge zit pull onto trunk: pull opens a transport to a remote and runs the sync driver over the current repository to fetch and persist newly announced artifacts until section 3.7 termination, proven by an incremental pull over HTTP after a clone. check-in: 177eb879cd user: dmestas tags: trunk
17:15
Add zit pull that opens a transport to a remote and runs the sync driver over the current repository to fetch and persist newly announced artifacts until section 3.7 termination, proven by an incremental pull over HTTP after a clone check-in: f1dcbc8a57 user: dmestas tags: cli
16:59
Merge trunk back onto cli after the uncompressed clone reply, aligning the branch for pull and push. check-in: 563c9b7ddd user: dmestas tags: cli
16:58
Merge the uncompressed clone reply onto trunk: the clone response is sent as application/x-fossil-uncompressed with no outer container per sync 8.1 and 4.1, so already-compressed cfiles are single-compressed and interoperable. check-in: a3557b5106 user: dmestas tags: trunk
16:56
Send the clone reply as application/x-fossil-uncompressed with no outer container per sync 8.1 and 4.1, and capture the reply Content-Type before the body stream invalidates it, so clone cfiles are single-compressed and interoperable rather than double-wrapped or misdecoded. check-in: aa153192f3 user: dmestas tags: cli
16:37
Merge trunk back onto cli after multi-batch clone, aligning the branch for the clone reply compression check and pull/push. check-in: 0d14cb4f26 user: dmestas tags: cli
16:36
Merge multi-batch clone continuation onto trunk: the client threads the section 8.2 clone_seqno cursor across successive cfile batches until exhaustion, so a repository larger than one batch clones in full. check-in: 378073c233 user: dmestas tags: trunk
16:33
Continue a clone across multiple cfile batches by threading the section 8.2 clone_seqno cursor so the client requests successive batches until the server signals exhaustion, so a repository larger than one batch clones in full check-in: 8d249bc3a5 user: dmestas tags: cli
16:16
Merge trunk back onto cli after the working clone, keeping the branch aligned for pull/push and the multi-batch clone continuation. check-in: 887b9b0859 user: dmestas tags: cli
16:15
Merge the working sync client onto trunk: the round driver, the clone verb, and section 8 server-side clone, so a fresh zit client clones a full repository from a zit server over HTTP with the cloned store's artifacts equal to the origin's. check-in: 4ca4a718e8 user: dmestas tags: trunk
16:12
Answer the sync clone operation in Server.respond by paginating the repository's artifacts by RID into cfile batches with the section 8.2 clone_seqno cursor to exhaustion, so a fresh client clones a full repository over HTTP check-in: d383eb0084 user: dmestas tags: cli
15:42
Add the zit clone client — the clone verb driving the sync round loop over the HTTP transport and persisting received artifacts into a fresh repository — and fix transport.exchange to drop a read error the socket path cannot emit; the clone-against-itself e2e is present but skipped pending server-side section 8 clone support. check-in: 7d88a407ed user: dmestas tags: cli
15:03
Add bounded sync round driver pumping buildRequest through a transport to consumeReply until section 3.7 termination, converging the local store against a peer under an explicit round-limit guard check-in: d9aebe9520 user: dmestas tags: cli
14:27
Merge trunk back onto cli after zit serve, keeping the branch aligned for the clone/pull/push driver. check-in: 7e7c24630e user: dmestas tags: cli
14:26
Merge zit serve onto trunk: a single-threaded HTTP server answering application/x-fossil sync requests by decoding the container, calling the stateless Server.respond over the repository store, and returning the framed reply. check-in: 55072db7c8 user: dmestas tags: trunk
14:24
add a single-threaded zit serve that answers application/x-fossil sync requests over HTTP by decoding the request container, calling the stateless Server.respond over the repository store, and returning the framed reply, per sync section 4 check-in: ed3a558990 user: dmestas tags: cli
14:04
Merge trunk back onto cli after the transport module, keeping the branch aligned for the sync driver and server. check-in: ea8dee72d5 user: dmestas tags: cli
14:03
Merge the CLI-layer HTTP transport onto trunk: an open/exchange/close boundary carrying uncompressed sync bytes over the Fossil zlib container with section 4 redirect and downgrade handling, so a later ssh or file transport is a mechanical wrap. check-in: 1da24fb857 user: dmestas tags: trunk
14:01
Add the CLI-layer HTTP transport that frames a sync request as the Fossil zlib container, POSTs it as application/x-fossil, decodes the reply, and honors the section 4 redirect and downgrade rules so the sans-IO client can exchange over the wire. check-in: 2d75dae647 user: dmestas tags: cli
13:41
Merge trunk back onto cli after integrating the sync DST, keeping the branch aligned for the transport phase. check-in: 871d2f829c user: dmestas tags: cli
13:40
Merge the sync SimNet DST onto trunk: the scenario generator and two-phase sweep proving buildRequest/respond/consumeReply converge and reach section 3.7 termination under injected network faults once the wire heals, with section 7.5 privacy held. check-in: 465f71abfe user: dmestas tags: trunk
13:37
add the two-phase sync SimNet sweep driving buildRequest/respond/consumeReply through the fault-injecting network and asserting convergence, section 3.7 termination, and section 7.5 private-content invariants hold after the wire heals, wired into zig build dst check-in: 43f37d1f7f user: dmestas tags: cli
13:06
add a seeded generator of two-endpoint sync scenarios: pre-seeded client and server stores with held, phantom, and shared artifacts plus a bounded per-link fault profile, so the sweep can replay any exchange from its seed check-in: 3c6945c120 user: dmestas tags: cli
12:52
Merge trunk back onto cli, bringing the cov step so the branch carries the integrated tip for the next transport step. check-in: 8c3ef76441 user: dmestas tags: cli
12:51
Merge the SimNet packet simulator onto trunk: a tick-stepped two-endpoint network with seeded delay, drop, dup, and payload-derived corruption, so the sync sweep can replay any fault schedule from its seed. check-in: ea810169a8 user: dmestas tags: trunk
12:49
Merge the out-of-band cov step onto trunk so merged kcov line coverage is available via zig build cov, outside the commit gate. check-in: 629b041148 user: dmestas tags: trunk
12:45
Add a tick-stepped two-endpoint network simulator with seeded delay, drop, dup, and payload-derived corruption, so a retried delivery corrupts identically and the sync sweep can replay any fault schedule from its seed. check-in: 7d1ec5b267 user: dmestas tags: cli
12:42
Add an out-of-band zig build cov step running merged kcov line coverage over the unit-test binaries filtered to src, so untested code surfaces mechanically without entering the commit gate closed check-in: 0059783eff user: dmestas tags: kcov
12:31
Merge trunk back onto cli after integrating A0, keeping the branch aligned for the next transport step. check-in: ff95ec1f7f user: dmestas tags: cli
12:31
Merge transport A0 onto trunk: the sans-IO Client.buildRequest and stateless Server.respond, so a client and server converge over buildRequest/respond/consumeReply per sync 3.7/3.8 — the send/answer halves the network transport and simulator will drive without owning IO. check-in: ccfb360f59 user: dmestas tags: trunk
12:28
Answer a sync request from ArtifactStore state with the stateless Server.respond, verifying login, ingesting pushed files, satisfying gimmes with content, and announcing holdings and phantoms, so a client and server converge over buildRequest/respond/consumeReply per sync 3.7/3.8 without either owning IO check-in: e4eb6ea8e7 user: dmestas tags: cli
12:05
Compose sync requests from client and store state so the transport and simulator can drive the send half without owning IO: buildRequest emits the version pragma, an optional body login, the operation cards, an igot per holding, a gimme per phantom, and a file per queued send per sync 3.2. check-in: e6975d1870 user: dmestas tags: cli
11:08
Merge the store count primitive onto cli so the sync request/response composer can enumerate the store. check-in: 76bf611f9d user: dmestas tags: cli
11:07
Add a count query to the ArtifactStore boundary returning the entry total, so a sync peer can walk the dense 1..=count rids and classify each as held or phantom to announce its holdings and request what it lacks per sync sections 3.2 and 3.3. check-in: 4c38e8fbd6 user: dmestas tags: trunk
07:00
Merge trunk back onto cli after integrating the query slice, so follow-on transport work builds on the aligned tip. check-in: e791084496 user: dmestas tags: cli
06:59
Merge the repo-state query slice onto trunk: the leaves, branch, tag, and info commands over a shared read-only repo-view loader, exposing the finished repostate engine through the CLI so a user can inspect leaves, branches, tags, and resolve names without a write path. check-in: 366ee2d629 user: dmestas tags: trunk
06:54
Add the info command, resolving NAME through the repo-state section 8.3 procedure and describing the check-in it names — its full artifact ID, its branch per section 6.1 with the configured main-branch of section 6.4 as the fallback, its leaf status per sections 7.1 and 7.4, its primary parent per section 3.2, and each merge parent per section 3.3 — with selection recency-based per section 8.2, so per section 8.5 a name can name a closed or non-leaf check-in that leaves omits. check-in: 6252eda2e6 user: dmestas tags: cli
05:56
Add the tag command listing the repository's active symbolic tag names in use with no CHECKIN, or the active tags and their values visible on a resolved CHECKIN, deriving both over the crosslinked repo-view rather than storing them, per repo-state sections 5.1, 5.2, and 2, resolving CHECKIN through the section 8.3 procedure and surfacing sym- names with the reserved prefix stripped. check-in: 45f5ac644f user: dmestas tags: cli
04:48
Add the branch command to list the repository's branches name-ascending, marking the checked-out check-in's branch with a leading "*" and closed representatives "(closed)", per repo-state sections 6.1, 6.3, and 6.4, resolving the default branch through the configured main-branch rather than a literal, and lift the shared read-only repo-view loader out of leaves so both verbs open the repository, resolve the checkout, and report failures identically. check-in: a6e2c0fd01 user: dmestas tags: cli
03:44
Add the leaves command to enumerate the check-in DAG's open leaves, most-recent first with the current checkout marked, per repo-state sections 7.1, 7.4, and 7.5, over a shared repo-view loader that resolves branch state from the configured main-branch with the section 6.1 trunk fallback. check-in: 0b9d217bfe user: dmestas tags: cli
2026-07-14
12:16
Merge trunk into cli with Artifact A.1.2 correction check-in: 01b124075c user: dmestas tags: cli
12:11
Integrate Artifact A.1.2 vector correction check-in: 17e0841c30 user: dmestas tags: trunk
11:53
Update Artifact A.1.2 SHA3-256 technote vector closed check-in: ead3630a7d user: dmestas tags: artifact-a12-vector-fix
10:01
Merge trunk into cli: the uvfile payload bit-gating fix (sync §7.3), so verb work builds on the current integrated state. check-in: 98a0f2c85c user: dmestas tags: cli
09:54
Frame the uvfile payload from the FLAGS 0x0001 and 0x0004 bits per sync §7.3, not from the HASH-based deletion test, so a non-compliant card that carries the deletion bit with a real hash and a positive SIZE reads no payload and the receiver stays byte-aligned with the reference; delete-vs-update still keys on HASH. check-in: 7912172df2 user: dmestas tags: trunk
02:18
Merge trunk into cli to bring the recovered tree onto the branch: the correctness and RFC-alignment fixes, the sibling test-file layout, and the Ousterhout de-duplication, so follow-on verb and coverage work builds on the integrated state. check-in: 2ce67c9598 user: dmestas tags: cli
02:13
Drop two tautological assertions in the push-intent and inbound-gimme predicates: each merely restates the boolean defined on the line directly above it and so can never fail, leaving them as noise rather than a check of any invariant a bug could violate. check-in: eea9f66041 user: dmestas tags: trunk
01:39
Cite the flat repostate §8.3 name-resolution procedure on its resolution tests instead of §8.3.N subsection numbers, since §8.3 is a numbered list of forms rather than a set of subsection headings and the per-form intent is already in each test name. check-in: 3d154570ab user: dmestas tags: trunk
01:26
Cite artifact §6.2 on the empty-content self-checksum test so the expected MD5 of empty input follows from the self-checksum definition instead of standing without a section reference. check-in: 7ca4474047 user: dmestas tags: trunk
01:12
Compile the end-to-end test binary under `zig build test` so a type error in the subprocess-driven e2e file breaks the build instead of rotting undetected, while keeping its ~150-spawn run out of the unit gate. check-in: 7cb4c1b861 user: dmestas tags: trunk
01:02
Reject any stored log version this reader never wrote, set the append watermark to the true file length after an extending truncate, honor the read-past-EOF-returns-zero contract in the simulated file, and fold the duplicated frame-header validation into one shared check so the content reader and the open-time scan cannot diverge. check-in: 7fb8e33f9c user: dmestas tags: trunk
00:04
Drive the init, add, rm, and commit argument grammars through one table-driven flag scanner so the four near-identical parsers cannot drift apart. check-in: 2487264643 user: dmestas tags: trunk
2026-07-13
23:17
Derive the verb vocabulary, dispatch, help routing, and did-you-mean suggestions from a single cli.Verb enum so the dispatched, helpable, and suggestable command sets cannot drift apart. check-in: 4b7f777d92 user: dmestas tags: trunk
23:01
Fold commit's checkout- and managed-read failures into the verb-parameterized checkoutFail and managedFail mappers so one mapper renders the B-commit-15 messages shared with the read-only working-tree verbs. check-in: fd76e90b60 user: dmestas tags: trunk
22:53
Move the public-surface artifact and repostate tests into their sibling test files, citing the repo-state §4.2 crosslink and §8.3 date-form clauses the repostate cases exercise, so each module keeps only its file-private tests. check-in: cc4cbd9cd9 user: dmestas tags: trunk
22:35
Move the update rollback-retention test and its fixtures into the sibling test file, leaving update.zig with only its file-private declarations. check-in: bbdc988561 user: dmestas tags: trunk
22:14
Move the §C test asserting persisted RID order follows frame order after a phantom upgrade into the logstore sibling test file, leaving logstore.zig with only its file-private and fuzz-corpus declarations. check-in: f59234f6f1 user: dmestas tags: trunk
21:28
Relocate the consumeReply public-surface tests — the Appendix A worked exchanges and the §7.5 private-marker state machine — to the sibling test file so sync.zig holds only its file-private and fuzz-corpus declarations. check-in: 42140c77cd user: dmestas tags: trunk
20:58
State the storage engine's framing and crash-recovery invariants directly in the logstore and storage-capability module doc comments so each native storage test carries its oracle in-tree rather than citing an out-of-tree design note. check-in: e4cd62c7a3 user: dmestas tags: trunk
20:45
Give the update and diff failure mappers closed error sets so a rolled-back or cleanup-failed update reports its own diagnostic instead of collapsing to a generic input/output error and hiding that the previous working-tree state was retained for recovery. check-in: 133127529a user: dmestas tags: trunk
20:22
Capture the working-tree executable bit into each file's F card per §4.7.6 so a chmod +x commits as an x-permission entry and quiesces, instead of reporting M on every diff yet never committing. check-in: eea0c068d1 user: dmestas tags: trunk
20:05
Poison the log store when a rollback truncate itself fails so no later append lands at an offset that has diverged from the physical file end, rather than swallowing the error and letting in-memory bookkeeping drift from disk. check-in: 2cebd9179d user: dmestas tags: trunk
19:45
Accept a non-canonically fossilized unversioned NAME instead of aborting the exchange, since sync §7.3 licenses no such receiver rejection and artifact §4.3 defines the defossilize decoder as error-free, and parse a cookie login value strictly by the §B.4 url-login-value grammar so fields split only on the literal + separator, escapes are lenient solely under HEXDIG-CI, and a %20 standing in for a separator is rejected. check-in: 3fd2c0ca4c user: dmestas tags: trunk
19:18
Abort the exchange on a message card whose visible arity is not the exactly two whitespace-separated tokens sync §11.2 mandates, since a bare or three-to-six-token form is a defined-operator arity failure under §5.2 rather than a silently continued card. check-in: e0535646dc user: dmestas tags: trunk
19:03
Gate the private igot no-phantom disposition on the receiver lacking private-content authorization so a granted client interns the hash and creates a phantom to pull the content, per sync §7.5 L2476-2483. check-in: 28a19941cd user: dmestas tags: trunk
18:41
Merge trunk into the CLI branch to track the integrated tip for follow-on work check-in: bf454fa2ee user: dmestas tags: cli