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.