feat(module): add ntpdate apt module + reconcile ADR-0011/0026 freeze wording - #389
Merged
Conversation
… wording Task 1 — ntpdate module. module/ntpdate.module.sh is an optional apt-archetype module (module_use_apt_archetype) for the legacy ntpdate package, satisfying the 10-function contract (ADR-0002, #305) with a real doctor() that probes `command -v ntpdate` beyond the dpkg check. is_recommended() is always off (legacy special-purpose tool, never in Quick Setup); en + zh-TW DESCRIPTION flags that modern systems use systemd-timesyncd but the dual_system_time_sync one-off tool (ADR-0029) drives ntpdate. Full spec at test/unit/module/ntpdate_spec.bats (54 cases; 94.59% unit coverage). The dual_system_time_sync maintainer note now points at `setup_ubuntu install ntpdate` (the package it dropped is now this module). Task 2 — ADR-0011/0026 mixed-signal reconciliation. ADR-0011's superseded banner said the freeze machinery "is being retired" while ADR-0026 still said it "is retained per module". Both now state accurately that the per-module freeze (frozen_pkgs / frozen_platform) was never built into a live module, the dead migration/freeze code was retired in PR #373, and per-module freeze remains a future design option only. doc/module/INDEX.md regenerated (90 modules); CHANGELOG updated. Gates (blocking-foreground, Docker via justfile.ci): test-unit, test-integration (24/24), coverage, and #305 contract-conformance all green. Claude-Session: https://claude.ai/code/session_01NX5H2vuMTv4mBmjpPYoS3s Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
ycpss91255
enabled auto-merge (squash)
July 14, 2026 11:20
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.
Summary
Two small independent changes:
Task 1 —
ntpdateapt module. Addsmodule/ntpdate.module.sh(optional,archetype A /
module_use_apt_archetype) provisioning the legacyntpdatepackage, plus
test/unit/module/ntpdate_spec.bats(54 cases). It satisfies the10-function module contract (ADR-0002, enforced by
test/unit/module/contract_conformance_spec.bats/ #305) and ships a realdoctor()that goes beyond the dpkg check by verifying thentpdatebinaryresolves on PATH (
command -v ntpdate).is_recommended()is always off —ntpdate is a legacy special-purpose tool, never part of Quick Setup. The en +
zh-TW
DESCRIPTIONflags that modern systems use systemd-timesyncd but thedual_system_time_syncone-off tool (ADR-0029) drivesntpdate.SUPPORTED_UBUNTU=("22.04" "24.04" "26.04"). Thedual_system_time_syncmaintainer note now points at
setup_ubuntu install ntpdate(the package itused to install inline is now this module).
Task 2 — ADR-0011 / ADR-0026 freeze-wording reconciliation. ADR-0011's
superseded banner said the freeze machinery "is being retired" while ADR-0026
still said "the ADR-0011 freeze mechanism is retained per module" — a mixed
signal. Both now state accurately that the per-module freeze (
frozen_pkgs/frozen_platform) was never built into a live module, the dead migration/freezecode was retired in PR #373, and per-module freeze remains a future design
option only.
doc/module/INDEX.mdregenerated (90 modules); CHANGELOG updated (Added +Documentation).
Test plan
Run in Docker via
justfile.ci(the CI gate), all blocking-foreground:just -f justfile.ci test-unit— green (full suite; ntpdate spec 54/54).just -f justfile.ci test-integration— green (24/24).just -f justfile.ci coverage— green; ntpdate unit-shard coverage 94.59%(AC-17 gate is >= 80%).
test-unit contract_conformance(test(module): module-iterating contract conformance meta-test #305) — green (5/5); every module stillsatisfies the 10-function contract.
🤖 Generated with Claude Code
https://claude.ai/code/session_01NX5H2vuMTv4mBmjpPYoS3s