13 KiB
Upgrade Plan: v0.8.0 AX Compliance
Scope: planning only. This document identifies the repo changes required for AX v0.8.0 compliance without changing package code yet.
Breaking-change risk: medium. This module is consumed by core, go-blockchain, and LEM, so any public API edits made during compliance work should be reviewed as a consumer-facing change even if the primary AX items are mechanical.
Current Audit Summary
- Banned imports: 52 hits across production and test code.
- Test naming violations: 292
Test...functions do not followTestFile_Function_{Good,Bad,Ugly}. - Exported API usage-example gaps: 162 exported declarations in non-test files do not include a usage/example-oriented doc comment.
Execution Order
- Fix production banned imports first to reduce AX failures without changing public behaviour.
- Rename tests package-by-package, starting with the largest files, and rerun targeted
go test ./.... - Add usage/example comments to exported API surfaces, starting with the packages most likely to be imported by consumers:
auth,crypt,trust. - Run the full validation flow:
go build ./...,go vet ./...,go test ./... -count=1 -timeout 120s,go test -cover ./...,go mod tidy. - Review downstream consumers for naming-only vs behavioural risk before releasing v0.8.0.
1. Remove Banned Imports
Production code should be prioritised before test helpers.
Production files
auth/auth.go: replace banned imports atauth/auth.go:32,auth/auth.go:33,auth/auth.go:34.auth/session_store_sqlite.go: replace banned imports atauth/session_store_sqlite.go:4,auth/session_store_sqlite.go:5.cmd/crypt/cmd_checksum.go: replace banned imports atcmd/crypt/cmd_checksum.go:4,cmd/crypt/cmd_checksum.go:5.cmd/crypt/cmd_encrypt.go: replace banned imports atcmd/crypt/cmd_encrypt.go:4,cmd/crypt/cmd_encrypt.go:5.cmd/crypt/cmd_hash.go: replace banned import atcmd/crypt/cmd_hash.go:4.cmd/crypt/cmd_keygen.go: replace banned import atcmd/crypt/cmd_keygen.go:7.cmd/testcmd/cmd_output.go: replace banned imports atcmd/testcmd/cmd_output.go:6,cmd/testcmd/cmd_output.go:7,cmd/testcmd/cmd_output.go:11.cmd/testcmd/cmd_runner.go: replace banned imports atcmd/testcmd/cmd_runner.go:5,cmd/testcmd/cmd_runner.go:7,cmd/testcmd/cmd_runner.go:8,cmd/testcmd/cmd_runner.go:10.crypt/chachapoly/chachapoly.go: replace banned import atcrypt/chachapoly/chachapoly.go:5.crypt/checksum.go: replace banned import atcrypt/checksum.go:8.crypt/hash.go: replace banned imports atcrypt/hash.go:6,crypt/hash.go:7.crypt/openpgp/service.go: replace banned import atcrypt/openpgp/service.go:7.crypt/rsa/rsa.go: replace banned import atcrypt/rsa/rsa.go:9.trust/approval.go: replace banned import attrust/approval.go:4.trust/audit.go: replace banned import attrust/audit.go:4.trust/config.go: replace banned imports attrust/config.go:4,trust/config.go:5,trust/config.go:7.trust/policy.go: replace banned imports attrust/policy.go:4,trust/policy.go:6.trust/trust.go: replace banned import attrust/trust.go:14.
Test files
auth/auth_test.go: banned imports atauth/auth_test.go:4,auth/auth_test.go:5,auth/auth_test.go:6.auth/session_store_test.go: banned imports atauth/session_store_test.go:5,auth/session_store_test.go:6,auth/session_store_test.go:7.crypt/chachapoly/chachapoly_test.go: banned import atcrypt/chachapoly/chachapoly_test.go:5.crypt/checksum_test.go: banned imports atcrypt/checksum_test.go:4,crypt/checksum_test.go:5.crypt/rsa/rsa_test.go: banned import atcrypt/rsa/rsa_test.go:9.trust/approval_test.go: banned import attrust/approval_test.go:4.trust/audit_test.go: banned imports attrust/audit_test.go:5,trust/audit_test.go:6,trust/audit_test.go:8.trust/bench_test.go: banned import attrust/bench_test.go:4.trust/config_test.go: banned imports attrust/config_test.go:5,trust/config_test.go:6,trust/config_test.go:7,trust/config_test.go:8.trust/trust_test.go: banned import attrust/trust_test.go:4.
Plan notes:
- Prefer package-local replacements already used elsewhere in the repo rather than introducing new compatibility shims.
cmd/testcmd/cmd_runner.go:8is the onlyos/exechit and may need the largest redesign if AX forbids subprocess execution outright.encoding/jsonuse is concentrated inauthandtrust; validate AX-approved serialisation alternatives before changing wire formats consumed by downstream modules.
2. Rename Tests To TestFile_Function_{Good,Bad,Ugly}
Every audited Test... function currently fails the file-prefix requirement. The work is mechanical but broad, so do it file-by-file to keep diffs reviewable.
Highest-volume files first
auth/auth_test.go: 55 renames, starting atauth/auth_test.go:28.trust/policy_test.go: 38 renames, starting attrust/policy_test.go:32.trust/trust_test.go: 26 renames, starting attrust/trust_test.go:15.trust/approval_test.go: 23 renames, starting attrust/approval_test.go:14.trust/scope_test.go: 23 renames, starting attrust/scope_test.go:12.trust/config_test.go: 20 renames, starting attrust/config_test.go:37.auth/session_store_test.go: 19 renames, starting atauth/session_store_test.go:21.trust/audit_test.go: 17 renames, starting attrust/audit_test.go:18.
Remaining files
crypt/pgp/pgp_test.go: 12 renames, starting atcrypt/pgp/pgp_test.go:10.crypt/chachapoly/chachapoly_test.go: 9 renames, starting atcrypt/chachapoly/chachapoly_test.go:18.crypt/symmetric_test.go: 8 renames, starting atcrypt/symmetric_test.go:10.crypt/checksum_test.go: 7 renames, starting atcrypt/checksum_test.go:12.crypt/crypt_test.go: 7 renames, starting atcrypt/crypt_test.go:11.crypt/lthn/lthn_test.go: 7 renames, starting atcrypt/lthn/lthn_test.go:10.crypt/kdf_test.go: 6 renames, starting atcrypt/kdf_test.go:9.cmd/testcmd/output_test.go: 4 renames, starting atcmd/testcmd/output_test.go:9.crypt/hash_test.go: 3 renames, starting atcrypt/hash_test.go:10.crypt/hmac_test.go: 3 renames, starting atcrypt/hmac_test.go:11.crypt/rsa/rsa_test.go: 3 renames, starting atcrypt/rsa/rsa_test.go:22.crypt/openpgp/service_test.go: 2 renames, starting atcrypt/openpgp/service_test.go:12.
Plan notes:
- Apply the file stem as the prefix. Examples:
approval_test.go->TestApproval_...,policy_test.go->TestPolicy_...,session_store_test.go->TestSessionStore_.... - Preserve existing subcase suffixes after
Good,Bad, orUglywhere they add meaning. - Renames should not change behaviour, but they can break editor tooling, test filters, and CI allowlists that depend on old names.
3. Add Usage-Example Comments To Exported API
The package has normal doc comments in many places, but the audit found no usage/example-oriented export comments matching AX expectations. This affects all major public surfaces.
auth package
auth/auth.go: 26 exported declarations atauth/auth.go:47,auth/auth.go:48,auth/auth.go:60,auth/auth.go:70,auth/auth.go:77,auth/auth.go:85,auth/auth.go:92,auth/auth.go:95,auth/auth.go:102,auth/auth.go:110,auth/auth.go:125,auth/auth.go:138,auth/auth.go:164,auth/auth.go:241,auth/auth.go:283,auth/auth.go:317,auth/auth.go:334,auth/auth.go:355,auth/auth.go:367,auth/auth.go:407,auth/auth.go:459,auth/auth.go:540,auth/auth.go:576,auth/auth.go:600,auth/auth.go:623,auth/auth.go:696.auth/hardware.go: 2 exported declarations atauth/hardware.go:20,auth/hardware.go:47.auth/session_store.go: 9 exported declarations atauth/session_store.go:12,auth/session_store.go:15,auth/session_store.go:24,auth/session_store.go:30,auth/session_store.go:37,auth/session_store.go:52,auth/session_store.go:63,auth/session_store.go:76,auth/session_store.go:87.auth/session_store_sqlite.go: 8 exported declarations atauth/session_store_sqlite.go:16,auth/session_store_sqlite.go:23,auth/session_store_sqlite.go:32,auth/session_store_sqlite.go:52,auth/session_store_sqlite.go:64,auth/session_store_sqlite.go:80,auth/session_store_sqlite.go:104,auth/session_store_sqlite.go:131.
crypt package family
crypt/chachapoly/chachapoly.go: 2 exported declarations atcrypt/chachapoly/chachapoly.go:14,crypt/chachapoly/chachapoly.go:29.crypt/checksum.go: 4 exported declarations atcrypt/checksum.go:14,crypt/checksum.go:30,crypt/checksum.go:46,crypt/checksum.go:52.crypt/crypt.go: 4 exported declarations atcrypt/crypt.go:10,crypt/crypt.go:32,crypt/crypt.go:53,crypt/crypt.go:74.crypt/hash.go: 4 exported declarations atcrypt/hash.go:17,crypt/hash.go:37,crypt/hash.go:72,crypt/hash.go:81.crypt/hmac.go: 3 exported declarations atcrypt/hmac.go:11,crypt/hmac.go:18,crypt/hmac.go:26.crypt/kdf.go: 3 exported declarations atcrypt/kdf.go:28,crypt/kdf.go:34,crypt/kdf.go:45.crypt/lthn/lthn.go: 4 exported declarations atcrypt/lthn/lthn.go:45,crypt/lthn/lthn.go:50,crypt/lthn/lthn.go:64,crypt/lthn/lthn.go:92.crypt/openpgp/service.go: 6 exported declarations atcrypt/openpgp/service.go:18,crypt/openpgp/service.go:23,crypt/openpgp/service.go:29,crypt/openpgp/service.go:104,crypt/openpgp/service.go:139,crypt/openpgp/service.go:177.crypt/pgp/pgp.go: 6 exported declarations atcrypt/pgp/pgp.go:19,crypt/pgp/pgp.go:27,crypt/pgp/pgp.go:119,crypt/pgp/pgp.go:152,crypt/pgp/pgp.go:196,crypt/pgp/pgp.go:227.crypt/rsa/rsa.go: 5 exported declarations atcrypt/rsa/rsa.go:15,crypt/rsa/rsa.go:18,crypt/rsa/rsa.go:23,crypt/rsa/rsa.go:53,crypt/rsa/rsa.go:80.crypt/symmetric.go: 4 exported declarations atcrypt/symmetric.go:16,crypt/symmetric.go:33,crypt/symmetric.go:56,crypt/symmetric.go:78.
trust package
trust/approval.go: 15 exported declarations attrust/approval.go:13,trust/approval.go:17,trust/approval.go:19,trust/approval.go:21,trust/approval.go:25,trust/approval.go:39,trust/approval.go:61,trust/approval.go:68,trust/approval.go:76,trust/approval.go:104,trust/approval.go:125,trust/approval.go:145,trust/approval.go:159,trust/approval.go:173,trust/approval.go:189.trust/audit.go: 11 exported declarations attrust/audit.go:14,trust/audit.go:30,trust/audit.go:35,trust/audit.go:54,trust/audit.go:62,trust/audit.go:69,trust/audit.go:99,trust/audit.go:109,trust/audit.go:123,trust/audit.go:130,trust/audit.go:144.trust/config.go: 7 exported declarations attrust/config.go:13,trust/config.go:21,trust/config.go:26,trust/config.go:36,trust/config.go:70,trust/config.go:84,trust/config.go:94.trust/policy.go: 12 exported declarations attrust/policy.go:12,trust/policy.go:24,trust/policy.go:30,trust/policy.go:34,trust/policy.go:36,trust/policy.go:38,trust/policy.go:42,trust/policy.go:56,trust/policy.go:64,trust/policy.go:76,trust/policy.go:149,trust/policy.go:158.trust/trust.go: 25 exported declarations attrust/trust.go:23,trust/trust.go:27,trust/trust.go:29,trust/trust.go:31,trust/trust.go:35,trust/trust.go:49,trust/trust.go:54,trust/trust.go:57,trust/trust.go:58,trust/trust.go:59,trust/trust.go:60,trust/trust.go:61,trust/trust.go:62,trust/trust.go:63,trust/trust.go:64,trust/trust.go:65,trust/trust.go:69,trust/trust.go:86,trust/trust.go:92,trust/trust.go:100,trust/trust.go:121,trust/trust.go:128,trust/trust.go:139,trust/trust.go:150,trust/trust.go:163.
Command entrypoints
cmd/crypt/cmd.go: exported declaration atcmd/crypt/cmd.go:10.cmd/testcmd/cmd_main.go: exported declaration atcmd/testcmd/cmd_main.go:59.
Plan notes:
- Keep comments example-oriented and consumer-safe. Public comments should explain the happy-path call pattern without embedding secrets or unstable implementation details.
- Prioritise constructor and entrypoint comments first:
auth.New,trust.NewRegistry,trust.NewPolicyEngine,trust.NewApprovalQueue,trust.NewAuditLog,crypt/openpgp.New,crypt/rsa.NewService, and the command registration functions. - If AX requires literal
Usage:blocks, standardise that wording repo-wide before editing all 162 declarations.
4. Validation And Release Checks
- Run the required flow after each migration stage, not only at the end, so failures stay attributable to one category of change.
- Add a final review for consumer impact before tagging
v0.8.0, especially if banned-import replacements force API or behaviour adjustments inauth,trust/config, or CLI codepaths. - Commit the compliance work in small conventional-commit slices where practical. If the migration is done in one batch, use a non-breaking conventional commit scope that matches the touched package set.