chore(spec): record Task 7 host convergence as verified - #108
Merged
Conversation
Task 7 is the bundle's one manual unit -- a run-and-observe loop on
hardware that produces no repo artifact a worker can generate -- so this
empty commit is the artifact: it carries the trailer the derivation
reads, and the evidence below is the record.
All four Done-when clauses, verified on the physical Linux host:
Two consecutive runs converge
Confirmed by the operator: the second run reported zero changed
tasks and zero failures.
Both services running and reachable after a reboot
scripts/dev-services-runtime-test.sh passes 6/6 after a genuine
reboot: PostgreSQL and Valkey each active, enabled, and accepting a
connection on their declared 127.0.0.1 ports. The units'
ActiveEnterTimestamp reads 2026-04-15 11:33 -- this host's pre-NTP
RTC value -- which places their start inside early boot rather than
a later manual `systemctl start`. Worth stating because the previous
check looked identical and was not: the services had been installed
six minutes AFTER that boot, so "active and enabled" proved nothing
about surviving one.
An interrupted run is followed by one that converges, no manual cleanup
Reached by accident rather than by design, which makes it a fair
test. Verified after the fact: `dpkg --audit` reports nothing, so no
package was left half-configured, and both harnesses pass --
including postgresql-access-test.sh creating, migrating and dropping
a scratch database and asserting port 5432 is loopback-only.
The role's macOS-only content absent, ~/.my.cnf specifically
Absent, and absent across a reboot. It was NOT absent when this
clause was first checked: a symlink dated Jul 24 predated the
platform split, and the Darwin guard stops the file being recreated
without removing one already there. Removed by hand on the host, by
explicit operator choice over declaring it absent in the role -- so
another host carrying the same leftover would still fail this clause
with no guard to catch it.
Not closing the bundle. Task 1's mechanism shipped in #98, but
REQ-D1.2 and REQ-D1.3 stay unmet until the machine-local identifier file
exists and the generated block lands in .gitleaks.toml, which is empty
today. Status therefore stays as it is, and the Awaiting-input entry for
Task 1 stays with it.
Planwright-Task: dev-services/7
Claude-Session: https://claude.ai/code/session_01F8oKrXASMQSXMVjSvuJpn9
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Records the bundle's one manual unit. Task 7 is a run-and-observe loop on hardware that produces no repo artifact a worker can generate, so this is an empty commit whose message is the record and whose
Planwright-Task: dev-services/7trailer is what the derivation reads.All four Done-when clauses verified on the physical host. Two are worth calling out because the obvious check would have passed while proving nothing:
Reboot survival.
dev-services-runtime-test.shpasses 6/6 after a genuine reboot. The units'ActiveEnterTimestampreads2026-04-15 11:33, this host's pre-NTP RTC value, which places their start inside early boot rather than a later manualsystemctl start. The previous check looked identical and was not: the services had been installed six minutes after that boot, so "active and enabled" said nothing about surviving one.Interrupted-run convergence. Reached by accident rather than by design, which makes it a fairer test than a staged one. Verified after the fact:
dpkg --auditreports nothing, so no package was left half-configured, and both harnesses pass, includingpostgresql-access-test.shcreating, migrating and dropping a scratch database and asserting 5432 is loopback-only.~/.my.cnfis absent and stayed absent across the reboot. It was not absent when the clause was first checked, so this one changed state during the work.Not closing the bundle
Task 1's mechanism shipped in #98, but REQ-D1.2 and REQ-D1.3 remain unmet: the generated
private-project-identifierblock does not exist in.gitleaks.tomlat all, so that guard has never been active. It needs the machine-local identifier file, which cannot be supplied from a PR.Status:therefore stays as it is, and Task 1's Awaiting-input entry stays with it. Flipping to Done with two REQs unsatisfied would be the same inaccurate tracked claim this bundle's Task 5 existed to remove.