bliper 0.4.1

Minimal Webhook Delivery Bridge
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
BLIP CHANGE LOG
===============

Purpose
-------
This is the canonical chronological record of repository work. Every entry uses
an RFC 3339 timestamp with seconds and the Asia/Jakarta UTC offset. Future work
must append an entry before handoff, including the exact files changed, the
validation performed, and whether the work is committed or pushed.

2026-09-16T01:52:34+07:00
---------------------------------
Scope: Repository and documentation baseline

- Audited the repository structure, runtime implementation, installer, Cargo
  metadata, and public documentation.
- Replaced test-specific installation material with one combined installation
  and initial-configuration script.
- Removed personal checkout paths, SSH-key assumptions, private hostnames,
  desktop artifact paths, and test-only deployment instructions.
- Reorganized examples under docs/examples and documentation under docs/wiki.
- Installed the Almatera Incubator License as the repository license.

Files recorded:
- Cargo.toml
- LICENSE
- README.md
- docs/install.sh
- docs/examples/blip.toml.example
- docs/wiki/Architecture.md
- docs/wiki/Configuration.md
- docs/wiki/Development-log.md
- docs/wiki/GitLab.md
- docs/wiki/Home.md
- docs/wiki/Installation.md
- docs/wiki/Roadmap.md
- docs/wiki/Security.md

2026-09-16T02:12:58+07:00
---------------------------------
Scope: Minimal project configuration and global queue locking

- Replaced the project array with a keyed project map so the project identifier
  appears only once.
- Replaced the generic provider field with a GitLab-specific nested template.
- Removed event, branch, tracking, timeout, and lock fields from project config.
- Made GitLab responsible for event and branch filtering.
- Replaced per-project marker locks with one advisory execution lock shared by
  the global queue.
- Expanded the binary CLI for configuration, project, history, log, queue, and
  systemd service operations.

Files recorded:
- src/config.rs
- src/main.rs
- src/runtime.rs
- src/system.rs
- docs/examples/blip.toml.example
- docs/wiki/Architecture.md
- docs/wiki/Configuration.md
- docs/wiki/Roadmap.md

2026-09-16T02:43:57+07:00
---------------------------------
Scope: One-command legacy configuration migration

- Corrected the README copy-and-paste installation path for hosts containing
  the obsolete [[projects]] configuration schema.
- Added automatic legacy-schema detection, timestamped backup creation, and
  current-schema setup without requiring a second installation command.
- Preserved valid existing configuration and retained BLIP_RECONFIGURE=1 for
  intentional replacement of other invalid configurations.

Files recorded:
- README.md
- docs/install.sh
- docs/wiki/Development-log.md
- docs/wiki/Installation.md

2026-09-17T08:37:53+07:00
---------------------------------
Scope: Persistent GitLab delivery-ID deduplication
Branch: feature/delivery-id-deduplication

- Added webhook-id handling with Idempotency-Key fallback for legacy GitLab
  deliveries.
- Added an atomically claimed JSONL delivery registry beside runtime history.
- Added HTTP 202 duplicate handling without scheduling a second script run.
- Scoped delivery identities by project and persisted them across service
  reconstruction.
- Added delivery IDs to execution history and exposed the registry path through
  blip queue.
- Added tests for concurrent claims, queued duplicates, completed duplicates,
  project scoping, and restart persistence.
- Updated the roadmap by moving delivery-ID deduplication into the implemented
  feature list.

Files recorded:
- README.md
- docs/wiki/Architecture.md
- docs/wiki/Development-log.md
- docs/wiki/GitLab.md
- docs/wiki/Installation.md
- docs/wiki/Roadmap.md
- docs/wiki/Security.md
- src/main.rs
- src/runtime.rs

Validation recorded:
- cargo fmt --all -- --check
- cargo test --locked --all-targets: 13 passed
- cargo clippy --locked --all-targets --all-features -- -D warnings
- cargo build --locked --release
- bash -n docs/install.sh
- git diff --check

State recorded:
- Working tree changes were not committed or pushed at this timestamp.

2026-09-17T08:41:59+07:00
---------------------------------
Scope: Repository continuity and contributor rules
Branch: feature/delivery-id-deduplication

- Established this file as the canonical timestamped work record.
- Added repository-wide agent and contributor operating instructions covering
  architecture, configuration boundaries, Git workflow, documentation layout,
  security, installer behavior, testing, and handoff requirements.

Files recorded:
- .gitignore
- AGENTS.md
- change.log
- README.md
- docs/wiki/Development-log.md
- docs/wiki/Home.md

Validation recorded:
- git diff --check
- cargo fmt --all -- --check
- cargo test --locked --all-targets: 13 passed
- cargo clippy --locked --all-targets --all-features -- -D warnings
- cargo build --locked --release
- bash -n docs/install.sh
- Repository identity scan found no personal path, private hostname, or real
  credential; only documented synthetic whsec_AAAA... examples remain.

State recorded:
- Working tree changes were not committed or pushed at this timestamp.

2026-09-17T08:46:11+07:00
---------------------------------
Scope: Local grouped commit preparation
Branch: feature/delivery-id-deduplication

- Prepared all delivery-deduplication, repository-governance, and documentation
  changes for separate local commits by responsibility.
- Kept the feature branch local; no push or merge was authorized for this batch.

Commit groups recorded:
- Runtime implementation: src/main.rs and src/runtime.rs.
- Repository governance: .gitignore, AGENTS.md, and change.log.
- Public documentation: README.md and all modified docs/wiki pages.

Validation recorded:
- git diff --check
- Previous final feature gate remains valid: 13 tests passed, Clippy passed,
  release build passed, formatting passed, and installer syntax passed.

State recorded:
- All working-tree files are scheduled for local commits only.
- No push or merge is part of this operation.

2026-09-18T20:34:29+07:00
---------------------------------
Scope: Durable queue persistence and restart recovery
Branch: feature/durable-queue-recovery

- Replaced the process-local channel with an append-only durable FIFO journal
  containing queued, running, and completed delivery state.
- Persisted the admitted script path and a monotonic sequence before returning
  HTTP 202 queued.
- Recovered waiting work after restart and requeued interrupted running work
  only while holding the global execution lock.
- Preserved legacy accepted-delivery records as completed deduplication data.
- Added queue-state counts to the CLI and kept the waiting capacity at 128.
- Added focused tests for FIFO order, exact capacity, completed duplicates,
  concurrent claims, project scoping, malformed persistence, legacy records,
  restart recovery, and recovery coordination with an active process.
- Updated public documentation, repository rules, and the roadmap to distinguish
  durable admission from at-least-once recovery of interrupted execution.
- A read-only host check found the installed Blip origin healthy. External
  webhook testing remains unavailable until the tunnel connector is running;
  no DNS change is required solely because the host IP changed.

Files modified:
- .gitignore
- AGENTS.md
- README.md
- change.log
- docs/wiki/Architecture.md
- docs/wiki/Configuration.md
- docs/wiki/Development-log.md
- docs/wiki/GitLab.md
- docs/wiki/Home.md
- docs/wiki/Installation.md
- docs/wiki/Roadmap.md
- docs/wiki/Security.md
- src/main.rs
- src/runtime.rs

Validation recorded:
- cargo fmt --all -- --check
- cargo test --locked --all-targets: 19 passed
- cargo clippy --locked --all-targets --all-features -- -D warnings
- cargo build --locked --release
- bash -n docs/install.sh
- git diff --check
- Repository identity scan found no personal path, private hostname, tunnel ID,
  or real webhook credential in tracked changes.

State recorded:
- Changes are uncommitted and unpushed.

2026-09-19T15:05:27+07:00
---------------------------------
Scope: Publish the corrected self-upgrade as version 0.4.1
Branch: fix/publish-and-upgrade-path

- Advanced the package version from 0.4.0 to 0.4.1 so crates.io can publish
  the corrected self-upgrade instead of reinstalling the older binary.
- Updated public version references for the Phase 1 release.
- Verified Cargo installation with the staging bin directory present in PATH;
  Cargo completed without emitting a temporary PATH instruction.

Files modified:
- Cargo.toml
- Cargo.lock
- README.md
- docs/wiki/Home.md
- docs/wiki/Development-log.md
- docs/wiki/Repository-automation.md
- change.log

Validation:
- `cargo fmt --all -- --check` (passed)
- `cargo test --locked --all-targets` (passed)
- `cargo clippy --locked --all-targets --all-features -- -D warnings` (passed)
- `cargo build --locked --release` (passed)
- `cargo package --locked --allow-dirty --offline` (packaged and verified
  bliper 0.4.1)
- `bash -n docs/install.sh` (passed)
- Offline local `cargo install --path . --locked` with the staging `bin`
  directory in PATH completed without the temporary PATH warning.
- The official sparse crate index reported 0.4.0 as published and 0.4.1 as
  available.
- `git diff --check` (passed)

State recorded:
- Changes are uncommitted and unpushed.
- `dev` was fast-forwarded from `origin/dev` before this branch was created.

2026-09-19T14:51:50+07:00
---------------------------------
Scope: Repair crates.io self-upgrade and legacy migration
Branch: fix/repair-self-upgrade

- Made the crates.io fallback run Cargo with the build user's home, toolchain
  PATH, and writable staging-directory ownership.
- Added the temporary Cargo bin directory to the process PATH so no manual PATH
  action is requested.
- Preserved the installed systemd service user and explicit configuration path
  when reinstalling the service after an upgrade.
- Secured migrated configuration at mode 0600 before service installation and
  restored service-user ownership for migrated runtime files.
- Replaced the migration no-op test with coverage for backup creation, history
  path rewriting, restrictive permissions, and runtime-data copying.

Files modified:
- docs/install.sh
- docs/wiki/Installation.md
- src/config.rs
- src/system.rs
- change.log

Validation:
- `cargo fmt --all -- --check` (passed)
- `cargo test --locked --all-targets` (38 passed)
- `cargo clippy --locked --all-targets --all-features -- -D warnings` (passed)
- `bash -n docs/install.sh` (passed)
- `git diff --check` (passed)

State recorded:
- Changes are uncommitted and unpushed.
- `dev` was not modified or merged.

2026-09-19T12:01:23+07:00
---------------------------------
Scope: Use crates.io for upgrades and migrate the legacy runtime layout
Branch: fix/crates-upgrade-migration

- `blip --upgrade` now selects the published `bliper` crate instead of
  updating and building the installer source checkout.
- The installer accepts a crates.io build mode for upgrade-only execution.
- Startup performs an idempotent migration from `/etc/blip` and `/var/lib/blip`
  into the current per-user data directory, preserving a timestamped backup.
- Updated upgrade documentation and focused command/configuration coverage.
- Running `blip` without a subcommand now prints the CLI help instead of an
  error-only response.

Files modified:
- src/config.rs
- src/main.rs
- src/system.rs
- docs/install.sh
- README.md
- docs/wiki/Installation.md
- change.log

Validation:
- `cargo test --locked --all-targets` (38 passed)
- `cargo clippy --locked --all-targets --all-features -- -D warnings` (passed)
- `bash -n docs/install.sh` (passed)
- `git diff --check` (passed)

State recorded:
- Changes are uncommitted and unpushed.
- dev was not modified or merged.

2026-09-18T20:41:37+07:00
---------------------------------
Scope: Stable runtime paths for service and CLI inspection
Branch: feature/durable-queue-recovery

- Fixed relative history paths producing different queue and history locations
  when the CLI ran outside the systemd working directory.
- Made the system configuration resolve relative runtime files under
  /var/lib/blip and other configurations resolve them beside their config file.
- Added tests for system, local, and explicitly absolute runtime paths.
- Verified the release binary resolves the installed configuration to the same
  history, delivery journal, and lock paths used by the system service.

Files modified:
- change.log
- docs/wiki/Architecture.md
- docs/wiki/Configuration.md
- docs/wiki/Development-log.md
- docs/wiki/Installation.md
- src/config.rs

Validation recorded:
- cargo fmt --all -- --check
- cargo test --locked --all-targets: 20 passed
- cargo clippy --locked --all-targets --all-features -- -D warnings
- cargo build --locked --release
- bash -n docs/install.sh
- git diff --check
- Read-only release-binary inspection confirmed absolute runtime paths under
  /var/lib/blip.

State recorded:
- Follow-up fix is uncommitted and unpushed at this timestamp.
- The feature branch remains one commit ahead of dev; dev was not modified.

2026-09-18T21:17:32+07:00
---------------------------------
Scope: Graceful shutdown, in-place upgrade, and Phase 1 version metadata
Branch: feature/graceful-shutdown-upgrade

- Added SIGTERM and SIGINT handling that closes webhook admission, finishes
  the active deployment, and leaves waiting work queued for the next start.
- Made global-lock waits interruptible during shutdown without changing queue
  state.
- Added blip --upgrade and blip -U, backed by an upgrade-only installer path
  that fast-forwards source, builds as a non-root user, preserves and validates
  configuration, updates the unit, and restarts the service.
- Fixed normal service installation to restart an active service after binary
  replacement.
- Added KillMode=mixed and an unlimited systemd stop timeout so the active
  deployment child can finish during graceful shutdown.
- Simplified the documented first-install command to curl piped directly to
  sudo bash; the installer derives the build account from SUDO_USER.
- Updated the package and public status to 0.2.0 and recorded the policy that
  Phase 1 uses 0.x releases while Phase 2 begins at 1.0.0.

Files modified:
- AGENTS.md
- Cargo.lock
- Cargo.toml
- README.md
- change.log
- docs/install.sh
- docs/wiki/Architecture.md
- docs/wiki/Development-log.md
- docs/wiki/GitLab.md
- docs/wiki/Home.md
- docs/wiki/Installation.md
- docs/wiki/Roadmap.md
- docs/wiki/Security.md
- src/main.rs
- src/runtime.rs
- src/system.rs

Validation recorded:
- cargo fmt --all -- --check
- cargo test --locked --all-targets: 27 passed
- cargo clippy --locked --all-targets --all-features -- -D warnings
- cargo build --locked --release
- bash -n docs/install.sh
- git diff --check
- Release CLI inspection reported blip 0.2.0 and exposed -U/--upgrade.
- Repository identity scan found no personal path, private hostname, tunnel ID,
  old installer wrapper, or stale 0.1.0 metadata.

State recorded:
- Changes are uncommitted and unpushed.
- dev was not modified or merged.

2026-09-18T21:18:12+07:00
---------------------------------
Scope: Final validation state
Branch: feature/graceful-shutdown-upgrade

- Completed the full repository validation gate after all implementation,
  documentation, installer, service-unit, and change-log updates.

Files modified:
- change.log

Validation recorded:
- git diff --check: passed after this final log update.

State recorded:
- Changes remain uncommitted and unpushed.
- dev remains untouched.

2026-09-19T09:51:25+07:00
---------------------------------
Scope: GitHub, Gitea, and Codeberg provider templates
Branch: feature/provider-templates

- Added mutually exclusive nested GitHub, Gitea, and Codeberg configuration
  templates while preserving the existing GitLab schema.
- Added GitHub X-Hub-Signature-256 authentication with X-GitHub-Delivery,
  native Gitea X-Gitea-Signature with X-Gitea-Delivery, and native
  Codeberg/Forgejo X-Forgejo-Signature with X-Forgejo-Delivery.
- Verified provider HMAC signatures over the unmodified request body and kept
  credential comparisons constant-time through HMAC verification.
- Extended project add with provider selection, provider-aware secret prompts,
  list output, validation, rendering, redaction, and round-trip coverage.
- Extended initial installation with BLIP_PROVIDER and provider validation.
- Restored upgrade preflight discovery of the installed non-root service user
  before binary replacement and retained compatibility with older GitLab-only
  binaries during default initial setup.
- Added provider-specific wiki pages, updated all affected public references,
  and moved provider templates from pending roadmap scope to implemented scope.
- Advanced the Phase 1 package version from 0.2.1 to 0.3.0.

Files added:
- docs/wiki/Codeberg.md
- docs/wiki/GitHub.md
- docs/wiki/Gitea.md

Files modified:
- AGENTS.md
- Cargo.lock
- Cargo.toml
- README.md
- change.log
- docs/examples/blip.toml.example
- docs/install.sh
- docs/wiki/Architecture.md
- docs/wiki/Configuration.md
- docs/wiki/Development-log.md
- docs/wiki/GitLab.md
- docs/wiki/Home.md
- docs/wiki/Installation.md
- docs/wiki/Roadmap.md
- docs/wiki/Security.md
- src/config.rs
- src/main.rs
- src/runtime.rs

Validation recorded:
- Focused provider, configuration, CLI, and webhook-admission tests: 35 passed.
- git diff --check: passed.
- cargo fmt --all -- --check: passed.
- cargo test --locked --all-targets: 35 passed.
- cargo clippy --locked --all-targets --all-features -- -D warnings: passed.
- cargo build --locked --release: passed.
- bash -n docs/install.sh: passed.
- Release CLI inspection reported blip 0.3.0 and all four provider values.
- Repository identity and credential scan found no personal path, private
  hostname, tunnel ID, SSH remote, or real Signing token.

State recorded:
- Changes are uncommitted and unpushed.
- dev was not modified or merged.

2026-09-19T09:52:07+07:00
---------------------------------
Scope: Final provider-template validation
Branch: feature/provider-templates

- Completed the full repository validation gate after implementation,
  installer, metadata, documentation, and roadmap updates.

Files modified:
- change.log

Validation recorded:
- git diff --check passed after this final log update.

State recorded:
- Changes remain uncommitted and unpushed.
- dev remains untouched.

2026-09-19T09:56:48+07:00
---------------------------------
Scope: Pre-commit provider audit
Branch: feature/provider-templates

- Added negative coverage for altered GitHub, Gitea, and Codeberg payloads,
  the required GitHub signature prefix, and missing or oversized delivery IDs.
- Verified that CLI project construction materializes only the selected nested
  provider template.
- Rechecked Forgejo's native signature and delivery headers against its current
  official webhook documentation.

Files modified:
- change.log
- src/main.rs
- src/runtime.rs

Validation recorded:
- git diff --check: passed.
- cargo fmt --all -- --check: passed.
- cargo test --locked --all-targets: 35 passed.
- cargo clippy --locked --all-targets --all-features -- -D warnings: passed.
- cargo build --locked --release: passed.
- bash -n docs/install.sh: passed.

State recorded:
- Changes are ready for the authorized commit and push.
- dev remains untouched.

2026-09-18T22:25:20+07:00
---------------------------------
Scope: Pre-built binary installation method and documentation
Branch: feature/prebuilt-binary-installer

- Added pre-built release binary installation support to docs/install.sh via
  BLIP_INSTALL_METHOD="binary" with automated OS/architecture detection and
  SHA256 checksum verification.
- Preserved default source compilation behavior and single-installer semantics.
- Updated README.md and docs/wiki/Installation.md to document both the default
  source installation and the lightweight pre-built binary installation paths.
- Sourced the installer command via the canonical GitLab repository URL.

Files modified:
- README.md
- docs/install.sh
- docs/wiki/Installation.md
- change.log

Validation recorded:
- git diff --check
- cargo fmt --all -- --check
- cargo test --locked --all-targets: 27 passed
- cargo clippy --locked --all-targets --all-features -- -D warnings
- cargo build --locked --release
- bash -n docs/install.sh

State recorded:
- Merged into dev on remote.

2026-09-18T23:08:20+07:00
---------------------------------
Scope: Package name bliper for Crates.io publication
Branch: feature/rename-crate-to-bliper

- Renamed Cargo package to "bliper" to enable Crates.io registration while
  preserving the output binary name as "blip" via explicit [[bin]] target.
- Updated Cargo.lock to match package name bliper.
- Added Cargo (crates.io) installation documentation to README.md and
  docs/wiki/Installation.md.
- Added automatic publish-crates job to GitHub Actions workflow on kitchen branch
  using the Kitchen environment.

Files modified:
- Cargo.toml
- Cargo.lock
- README.md
- docs/wiki/Installation.md
- change.log

Validation recorded:
- git diff --check
- cargo fmt --all -- --check
- cargo test --locked --all-targets: 27 passed
- cargo clippy --locked --all-targets --all-features -- -D warnings
- cargo build --locked --release
- cargo package verification: passed
- bash -n docs/install.sh

State recorded:
- Merged into dev on remote.

2026-09-18T23:52:50+07:00
---------------------------------
Scope: Release version bump 0.2.1
Branch: feature/bump-version-0.2.1

- Bumped package version to 0.2.1 in Cargo.toml and updated Cargo.lock.
- Updated documentation status to 0.2.1 in README.md.

Files modified:
- Cargo.toml
- Cargo.lock
- README.md
- change.log

Validation recorded:
- git diff --check
- cargo fmt --all -- --check
- cargo test --locked --all-targets: 27 passed
- cargo clippy --locked --all-targets --all-features -- -D warnings
- cargo build --locked --release
- cargo package verification: passed
- bash -n docs/install.sh

State recorded:
- Committed locally in one commit on feature/bump-version-0.2.1.
- Pushed to GitLab for merge request verification.
2026-09-19T10:31:44+07:00
---------------------------------
Scope: Queue observability, per-user runtime layout, and repository automation
Branch: feature/queue-observability

- Added structured history records for authenticated deliveries rejected at
  queue capacity without claiming their delivery IDs.
- Added lock_wait_ms to execution history while keeping duration_ms scoped to
  executable runtime.
- Serialized concurrent history appends with a short advisory data lock; the
  existing blip.queue.lock remains the only execution lock.
- Changed the default configuration and runtime directory to the service
  user's ~/.local/share/blip directory while retaining explicit config and
  history overrides.
- Added installer migration of the former default configuration, history,
  delivery journal, and queue lock with a timestamped configuration backup.
- Changed systemd generation to use the selected configuration directory as
  its working and data directory.
- Added a mirrored-dev workflow that explicitly dispatches the release Kitchen
  workflow on its kitchen branch.
- Added optional GitHub and GitLab Wiki publication from docs/wiki, including
  explicit warnings for missing credentials or an uninitialized GitHub Wiki.
- Advanced the Phase 1 package version from 0.3.0 to 0.4.0 and updated the
  roadmap and public documentation.

Files added:
- .github/workflows/dispatch-kitchen.yml
- .github/workflows/publish-wikis.yml
- docs/wiki/Repository-automation.md

Files modified:
- AGENTS.md
- Cargo.lock
- Cargo.toml
- README.md
- change.log
- docs/install.sh
- docs/wiki/Architecture.md
- docs/wiki/Configuration.md
- docs/wiki/Development-log.md
- docs/wiki/GitLab.md
- docs/wiki/Home.md
- docs/wiki/Installation.md
- docs/wiki/Roadmap.md
- docs/wiki/Security.md
- src/config.rs
- src/main.rs
- src/runtime.rs
- src/system.rs

Validation recorded:
- Focused queue-rejection history test passed.
- Focused global-lock wait history test passed.
- YAML parsing passed for both GitHub Actions workflows.
- git diff --check passed.
- cargo fmt --all -- --check passed.
- cargo test --locked --all-targets passed: 37 tests.
- cargo clippy --locked --all-targets --all-features -- -D warnings passed.
- cargo build --locked --release passed.
- bash -n docs/install.sh passed.

State recorded:
- Changes are committed locally in 8397c20 and pushed to
  origin/feature/queue-observability.
- dev remains untouched.

2026-09-19T11:18:07+07:00
---------------------------------
Scope: Prevent GitLab Wiki links from being created by legacy schema text
Branch: fix/avoid-gitlab-wiki-link-syntax

- Replaced public documentation text containing `[[projects]]`, which GitLab
  interprets as Wiki-link syntax, with the unambiguous projects-array schema
  wording.
- Applied the wording fix to the GitLab Wiki source pages and the GitHub
  Kitchen README.

Files modified:
- README.md
- docs/wiki/Development-log.md
- docs/wiki/Installation.md
- change.log

Validation:
- git diff --check passed.
- Confirmed no public Markdown file uses `[[...]]` Wiki-link syntax for this
  schema.

State recorded:
- Changes are uncommitted and unpushed on this feature branch.

2026-09-19T11:09:34+07:00
---------------------------------
Scope: Correct the public GitLab Wiki link
Branch: dev

- Changed the README Wiki index link from the repository-relative source page
  to the published GitLab Wiki Home page.

Files modified:
- README.md
- change.log

Validation:
- Confirmed the published GitLab Wiki contains Home.md and the provider,
  installation, architecture, security, roadmap, and automation pages.

State recorded:
- Changes are uncommitted and unpushed.