moose-inventory 2.0 → 2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/release.yml +2 -0
- data/.gitignore +2 -1
- data/.rubocop.yml +21 -0
- data/BACKLOG.md +630 -8
- data/Gemfile +2 -0
- data/Gemfile.lock +1 -1
- data/README.md +315 -39
- data/Rakefile +2 -0
- data/bin/moose-inventory +2 -1
- data/docs/architecture/architecture-and-trust-boundaries.md +444 -0
- data/docs/compatibility/cli-output-compatibility.md +76 -0
- data/docs/governance/approval-register.md +37 -0
- data/docs/maintenance/database-backup-restore-guidance.md +162 -0
- data/docs/maintenance/package-maintenance-and-agent-boundaries.md +260 -0
- data/docs/process/conformance-gap-analysis-2026-05-28.md +192 -0
- data/docs/product/product-brief.md +161 -0
- data/docs/product/requirements-baseline.md +477 -0
- data/docs/qa/qa-documentation-and-release-gates.md +283 -0
- data/docs/release/package-provenance-hardening.md +126 -0
- data/docs/release/publishing.md +11 -3
- data/docs/release/release-environment-protection.md +70 -0
- data/docs/release/release-readiness.md +23 -4
- data/docs/security/accepted-risk-register.md +84 -0
- data/docs/security/security-privacy-process.md +287 -0
- data/docs/security-audit-2026-05-26-rerun.md +2 -2
- data/docs/ux/cli-workflow-notes.md +287 -0
- data/examples/ansible/ansible.cfg +3 -0
- data/examples/ansible/inventory/moose_inventory.yml +5 -0
- data/examples/ansible/inventory_plugins/moose_inventory.py +100 -0
- data/examples/ci/README.md +16 -0
- data/examples/ci/github-actions/inventory-review.yml +38 -0
- data/examples/ci/inventory/example-snapshot.yml +19 -0
- data/examples/ci/scripts/validate-inventory-snapshot.sh +30 -0
- data/lib/moose_inventory/cli/application.rb +133 -5
- data/lib/moose_inventory/cli/association_rendering.rb +74 -0
- data/lib/moose_inventory/cli/association_rendering_support.rb +89 -0
- data/lib/moose_inventory/cli/audit.rb +62 -0
- data/lib/moose_inventory/cli/audit_recording.rb +40 -0
- data/lib/moose_inventory/cli/child_relation_rendering.rb +110 -0
- data/lib/moose_inventory/cli/console.rb +135 -0
- data/lib/moose_inventory/cli/db.rb +64 -0
- data/lib/moose_inventory/cli/factory.rb +28 -0
- data/lib/moose_inventory/cli/formatter.rb +8 -12
- data/lib/moose_inventory/cli/group.rb +5 -2
- data/lib/moose_inventory/cli/group_add.rb +11 -9
- data/lib/moose_inventory/cli/group_addchild.rb +23 -65
- data/lib/moose_inventory/cli/group_addhost.rb +16 -67
- data/lib/moose_inventory/cli/group_addvar.rb +27 -47
- data/lib/moose_inventory/cli/group_get.rb +8 -42
- data/lib/moose_inventory/cli/group_list.rb +7 -40
- data/lib/moose_inventory/cli/group_listvars.rb +9 -55
- data/lib/moose_inventory/cli/group_rm.rb +12 -10
- data/lib/moose_inventory/cli/group_rmchild.rb +26 -82
- data/lib/moose_inventory/cli/group_rmhost.rb +18 -53
- data/lib/moose_inventory/cli/group_rmvar.rb +30 -41
- data/lib/moose_inventory/cli/group_tags.rb +33 -0
- data/lib/moose_inventory/cli/helpers.rb +68 -1
- data/lib/moose_inventory/cli/host.rb +6 -3
- data/lib/moose_inventory/cli/host_add.rb +69 -29
- data/lib/moose_inventory/cli/host_addgroup.rb +22 -58
- data/lib/moose_inventory/cli/host_addvar.rb +28 -52
- data/lib/moose_inventory/cli/host_get.rb +9 -37
- data/lib/moose_inventory/cli/host_list.rb +24 -21
- data/lib/moose_inventory/cli/host_listvars.rb +9 -62
- data/lib/moose_inventory/cli/host_rm.rb +60 -42
- data/lib/moose_inventory/cli/host_rmgroup.rb +25 -44
- data/lib/moose_inventory/cli/host_rmvar.rb +31 -45
- data/lib/moose_inventory/cli/host_tags.rb +33 -0
- data/lib/moose_inventory/cli/listvars_support.rb +55 -0
- data/lib/moose_inventory/cli/plan_rendering.rb +50 -0
- data/lib/moose_inventory/cli/relation_transaction_support.rb +51 -0
- data/lib/moose_inventory/cli/tag_support.rb +97 -0
- data/lib/moose_inventory/cli/variable_rendering.rb +67 -0
- data/lib/moose_inventory/config/config.rb +185 -108
- data/lib/moose_inventory/db/db.rb +170 -195
- data/lib/moose_inventory/db/exceptions.rb +6 -3
- data/lib/moose_inventory/db/models.rb +16 -0
- data/lib/moose_inventory/db/schema_migrations.rb +248 -0
- data/lib/moose_inventory/inventory_context.rb +68 -2
- data/lib/moose_inventory/operations/add_associations.rb +20 -16
- data/lib/moose_inventory/operations/add_groups.rb +21 -13
- data/lib/moose_inventory/operations/add_hosts.rb +30 -17
- data/lib/moose_inventory/operations/add_variables.rb +77 -0
- data/lib/moose_inventory/operations/entity_variable_operation_support.rb +46 -0
- data/lib/moose_inventory/operations/group_child_relations.rb +23 -16
- data/lib/moose_inventory/operations/group_cleanup.rb +23 -8
- data/lib/moose_inventory/operations/import_inventory_snapshot.rb +41 -0
- data/lib/moose_inventory/operations/inventory_doctor.rb +172 -0
- data/lib/moose_inventory/operations/inventory_snapshot.rb +60 -0
- data/lib/moose_inventory/operations/inventory_snapshot_applier.rb +112 -0
- data/lib/moose_inventory/operations/inventory_snapshot_preview.rb +174 -0
- data/lib/moose_inventory/operations/inventory_snapshot_validator.rb +134 -0
- data/lib/moose_inventory/operations/operation_event_support.rb +27 -0
- data/lib/moose_inventory/operations/query_inventory/base_query.rb +24 -0
- data/lib/moose_inventory/operations/query_inventory/group_queries.rb +86 -0
- data/lib/moose_inventory/operations/query_inventory/host_queries.rb +106 -0
- data/lib/moose_inventory/operations/query_inventory.rb +47 -0
- data/lib/moose_inventory/operations/remove_associations.rb +30 -18
- data/lib/moose_inventory/operations/remove_groups.rb +12 -12
- data/lib/moose_inventory/operations/remove_hosts.rb +68 -0
- data/lib/moose_inventory/operations/remove_variables.rb +67 -0
- data/lib/moose_inventory/runtime_options.rb +31 -0
- data/lib/moose_inventory/version.rb +3 -1
- data/lib/moose_inventory.rb +10 -7
- data/moose-inventory.gemspec +19 -35
- data/scripts/check.sh +1 -0
- data/scripts/ci/check_generated_artifacts.sh +41 -0
- data/scripts/ci/check_permissions.sh +2 -0
- data/scripts/ci/check_rubocop.sh +30 -25
- data/scripts/files.rb +5 -4
- data/spec/examples/ci_examples_spec.rb +37 -0
- data/spec/lib/moose_inventory/ansible_plugin_examples_spec.rb +29 -0
- data/spec/lib/moose_inventory/cli/application_doctor_spec.rb +50 -0
- data/spec/lib/moose_inventory/cli/application_import_export_spec.rb +100 -0
- data/spec/lib/moose_inventory/cli/application_spec.rb +25 -15
- data/spec/lib/moose_inventory/cli/audit_spec.rb +56 -0
- data/spec/lib/moose_inventory/cli/cli_spec.rb +15 -19
- data/spec/lib/moose_inventory/cli/console_spec.rb +98 -0
- data/spec/lib/moose_inventory/cli/factory_spec.rb +27 -0
- data/spec/lib/moose_inventory/cli/formatter_spec.rb +95 -3
- data/spec/lib/moose_inventory/cli/group_add_spec.rb +140 -116
- data/spec/lib/moose_inventory/cli/group_addchild_spec.rb +89 -35
- data/spec/lib/moose_inventory/cli/group_addhost_spec.rb +81 -84
- data/spec/lib/moose_inventory/cli/group_addvar_spec.rb +65 -68
- data/spec/lib/moose_inventory/cli/group_get_spec.rb +17 -33
- data/spec/lib/moose_inventory/cli/group_list_spec.rb +16 -38
- data/spec/lib/moose_inventory/cli/group_listvar_spec.rb +33 -40
- data/spec/lib/moose_inventory/cli/group_rm_spec.rb +136 -96
- data/spec/lib/moose_inventory/cli/group_rmchild_spec.rb +66 -41
- data/spec/lib/moose_inventory/cli/group_rmhost_spec.rb +76 -78
- data/spec/lib/moose_inventory/cli/group_rmvar_spec.rb +57 -63
- data/spec/lib/moose_inventory/cli/group_spec.rb +2 -0
- data/spec/lib/moose_inventory/cli/helpers_spec.rb +146 -0
- data/spec/lib/moose_inventory/cli/host_add_spec.rb +170 -116
- data/spec/lib/moose_inventory/cli/host_addgroup_spec.rb +100 -83
- data/spec/lib/moose_inventory/cli/host_addvar_spec.rb +92 -74
- data/spec/lib/moose_inventory/cli/host_get_spec.rb +14 -33
- data/spec/lib/moose_inventory/cli/host_list_spec.rb +41 -33
- data/spec/lib/moose_inventory/cli/host_listvar_spec.rb +45 -53
- data/spec/lib/moose_inventory/cli/host_rm_spec.rb +66 -48
- data/spec/lib/moose_inventory/cli/host_rmgroup_spec.rb +73 -83
- data/spec/lib/moose_inventory/cli/host_rmvar_spec.rb +56 -63
- data/spec/lib/moose_inventory/cli/host_spec.rb +2 -0
- data/spec/lib/moose_inventory/cli/tags_spec.rb +81 -0
- data/spec/lib/moose_inventory/config/config_spec.rb +41 -3
- data/spec/lib/moose_inventory/db/db_spec.rb +396 -36
- data/spec/lib/moose_inventory/db/exceptions_spec.rb +18 -0
- data/spec/lib/moose_inventory/db/models_spec.rb +7 -3
- data/spec/lib/moose_inventory/db_lifecycle_spec.rb +73 -0
- data/spec/lib/moose_inventory/inventory_context_spec.rb +10 -0
- data/spec/lib/moose_inventory/operations/add_associations_spec.rb +34 -0
- data/spec/lib/moose_inventory/operations/add_groups_spec.rb +15 -0
- data/spec/lib/moose_inventory/operations/add_hosts_spec.rb +13 -0
- data/spec/lib/moose_inventory/operations/add_variables_spec.rb +103 -0
- data/spec/lib/moose_inventory/operations/group_child_relations_spec.rb +46 -0
- data/spec/lib/moose_inventory/operations/import_inventory_snapshot_spec.rb +226 -0
- data/spec/lib/moose_inventory/operations/inventory_doctor_spec.rb +77 -0
- data/spec/lib/moose_inventory/operations/inventory_snapshot_spec.rb +50 -0
- data/spec/lib/moose_inventory/operations/operation_event_support_spec.rb +78 -0
- data/spec/lib/moose_inventory/operations/query_inventory_spec.rb +146 -0
- data/spec/lib/moose_inventory/operations/remove_associations_spec.rb +35 -0
- data/spec/lib/moose_inventory/operations/remove_groups_spec.rb +21 -0
- data/spec/lib/moose_inventory/operations/remove_hosts_spec.rb +55 -0
- data/spec/lib/moose_inventory/operations/remove_variables_spec.rb +83 -0
- data/spec/shared/shared_config_setup.rb +4 -3
- data/spec/spec_helper.rb +50 -40
- data/spec/support/cli_harness.rb +33 -0
- metadata +80 -41
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# Database backup and restore guidance
|
|
2
|
+
|
|
3
|
+
Status: operational guidance for users; not an approval for destructive restore features.
|
|
4
|
+
|
|
5
|
+
Moose Inventory supports SQLite, MySQL/MariaDB, and PostgreSQL database adapters. The CLI provides a direct `db backup` helper for SQLite only. Server-backed database engines should be backed up and restored with their native database tools and the user's normal operational controls.
|
|
6
|
+
|
|
7
|
+
## Scope boundary
|
|
8
|
+
|
|
9
|
+
Moose Inventory can:
|
|
10
|
+
|
|
11
|
+
- report the configured adapter through `moose-inventory db status`;
|
|
12
|
+
- run explicit ordered schema migrations through `moose-inventory db migrate`;
|
|
13
|
+
- check expected schema/table state through `moose-inventory db doctor`;
|
|
14
|
+
- copy the configured SQLite database file through `moose-inventory db backup FILE`;
|
|
15
|
+
- export portable inventory snapshots for review, migration, and automation workflows.
|
|
16
|
+
|
|
17
|
+
Moose Inventory does not currently:
|
|
18
|
+
|
|
19
|
+
- run `mysqldump`, `mariadb-dump`, `pg_dump`, `pg_restore`, or server-specific restore commands;
|
|
20
|
+
- manage database users, grants, TLS, server encryption, replication, point-in-time recovery, or retention policies;
|
|
21
|
+
- guarantee transaction-consistent backups for server-backed databases;
|
|
22
|
+
- implement destructive snapshot sync/restore semantics;
|
|
23
|
+
- overwrite or drop user databases as a restore mechanism.
|
|
24
|
+
|
|
25
|
+
Those operations belong to the database administrator, hosting platform, or user's backup system.
|
|
26
|
+
|
|
27
|
+
## General backup principles
|
|
28
|
+
|
|
29
|
+
For all adapters:
|
|
30
|
+
|
|
31
|
+
1. Treat inventory databases, exported snapshots, audit output, and backups as sensitive infrastructure metadata.
|
|
32
|
+
2. Back up before migrations, version upgrades, bulk imports, and manual database maintenance.
|
|
33
|
+
3. Store backups outside the working directory if the repository may be shared.
|
|
34
|
+
4. Protect backup files with filesystem, database, or object-storage access controls matching the source data sensitivity.
|
|
35
|
+
5. Test restore procedures on a disposable database before trusting them for production recovery.
|
|
36
|
+
6. Record the Moose Inventory version, database adapter, schema version, and source environment alongside backup evidence.
|
|
37
|
+
|
|
38
|
+
Suggested pre-change evidence:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
moose-inventory db status
|
|
42
|
+
moose-inventory db doctor
|
|
43
|
+
moose-inventory export snapshot ./backup/pre-change-inventory.yml
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The snapshot is not a physical database backup. It is useful for review, migration, and reconstruction workflows, but it does not replace native database backups for server-backed engines.
|
|
47
|
+
|
|
48
|
+
## SQLite
|
|
49
|
+
|
|
50
|
+
SQLite is file-backed, so the CLI can provide a direct backup helper:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
moose-inventory db backup ./backup/moose-inventory.sqlite3
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Recommended SQLite restore pattern:
|
|
57
|
+
|
|
58
|
+
1. Stop jobs or shells that may write to the SQLite database.
|
|
59
|
+
2. Move the current database file aside rather than deleting it.
|
|
60
|
+
3. Copy the backup into the configured database path.
|
|
61
|
+
4. Run `moose-inventory db status` and `moose-inventory db doctor`.
|
|
62
|
+
5. Inspect expected hosts/groups before resuming automation.
|
|
63
|
+
|
|
64
|
+
Example manual restore outline:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
cp ~/.moose/db/dev.db ~/.moose/db/dev.db.before-restore
|
|
68
|
+
cp ./backup/moose-inventory.sqlite3 ~/.moose/db/dev.db
|
|
69
|
+
moose-inventory db status
|
|
70
|
+
moose-inventory db doctor
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Do not restore over an active writer. If using SQLite in automation, pause the automation first.
|
|
74
|
+
|
|
75
|
+
## MySQL and MariaDB
|
|
76
|
+
|
|
77
|
+
Use native MySQL/MariaDB backup tooling such as `mysqldump` or `mariadb-dump`. Moose Inventory should not be the process that chooses dump options, credentials, locks, replication state, compression, encryption, or restore targets.
|
|
78
|
+
|
|
79
|
+
Typical logical backup shape:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
mysqldump \
|
|
83
|
+
--single-transaction \
|
|
84
|
+
--routines \
|
|
85
|
+
--triggers \
|
|
86
|
+
--databases moose_inventory \
|
|
87
|
+
> moose-inventory-mysql.sql
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Notes:
|
|
91
|
+
|
|
92
|
+
- Prefer credentials from a protected option file, environment-specific secret manager, or interactive prompt rather than committed config.
|
|
93
|
+
- `--single-transaction` is appropriate for transactional tables such as InnoDB; confirm table engines before relying on it.
|
|
94
|
+
- Capture grants/users separately if the restore target also needs database accounts and permissions.
|
|
95
|
+
- For large deployments, consider physical backup, snapshots, or managed-service backup features instead of a logical dump.
|
|
96
|
+
|
|
97
|
+
Recommended restore boundary:
|
|
98
|
+
|
|
99
|
+
1. Restore into a new or disposable database first.
|
|
100
|
+
2. Point a temporary Moose Inventory config at the restored database.
|
|
101
|
+
3. Run `moose-inventory db status` and `moose-inventory db doctor`.
|
|
102
|
+
4. Export and inspect a snapshot from the restored database.
|
|
103
|
+
5. Cut over application configuration only after human review.
|
|
104
|
+
|
|
105
|
+
Avoid restoring directly over the active database unless there is a separate incident/recovery plan and approval.
|
|
106
|
+
|
|
107
|
+
## PostgreSQL
|
|
108
|
+
|
|
109
|
+
Use native PostgreSQL backup tooling such as `pg_dump`, `pg_dumpall`, `pg_restore`, managed-service snapshots, or WAL/PITR tooling depending on the deployment.
|
|
110
|
+
|
|
111
|
+
Typical custom-format logical backup shape:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
pg_dump \
|
|
115
|
+
--format=custom \
|
|
116
|
+
--file=moose-inventory-postgres.dump \
|
|
117
|
+
moose_inventory
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Typical inspection/restore shape for a disposable database:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
createdb moose_inventory_restore_check
|
|
124
|
+
pg_restore \
|
|
125
|
+
--dbname=moose_inventory_restore_check \
|
|
126
|
+
--clean \
|
|
127
|
+
--if-exists \
|
|
128
|
+
moose-inventory-postgres.dump
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Notes:
|
|
132
|
+
|
|
133
|
+
- Capture roles, ownership, and grants separately when needed; `pg_dump` of one database does not fully replace cluster-level role backup.
|
|
134
|
+
- Use managed-service snapshot/PITR features when recovery-point objectives matter.
|
|
135
|
+
- Keep connection strings, passwords, and dump files out of the repository.
|
|
136
|
+
- Verify restore compatibility before upgrading PostgreSQL major versions or Moose Inventory schema versions.
|
|
137
|
+
|
|
138
|
+
Recommended restore boundary is the same as MySQL/MariaDB: restore to a disposable database, verify with Moose Inventory read/status commands, then cut over only after human review.
|
|
139
|
+
|
|
140
|
+
## Snapshot export/import and restore expectations
|
|
141
|
+
|
|
142
|
+
`moose-inventory export snapshot` is a portable application-level export. It is useful for:
|
|
143
|
+
|
|
144
|
+
- inventory review;
|
|
145
|
+
- CI checks;
|
|
146
|
+
- migration rehearsal;
|
|
147
|
+
- emergency reconstruction when native DB backups are unavailable.
|
|
148
|
+
|
|
149
|
+
Snapshot import remains additive/update-oriented. It is not a destructive restore or exact database rollback. A future destructive sync/restore mode would require separate requirements, UX design, recovery controls, tests, and explicit approval.
|
|
150
|
+
|
|
151
|
+
## Release and maintenance checklist
|
|
152
|
+
|
|
153
|
+
Before migrations, bulk import work, or release-adjacent database testing:
|
|
154
|
+
|
|
155
|
+
- identify the adapter and environment;
|
|
156
|
+
- run `moose-inventory db status` and `moose-inventory db doctor`;
|
|
157
|
+
- create a SQLite backup or native server-backed database backup;
|
|
158
|
+
- export a snapshot as review evidence;
|
|
159
|
+
- test restore on a disposable target when risk warrants it;
|
|
160
|
+
- document any destructive or externally managed restore action separately.
|
|
161
|
+
|
|
162
|
+
If a backup or restore requires production credentials, cloud-console actions, database-account changes, or destructive replacement of an active database, stop and get explicit human approval.
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
# Moose Inventory Package Maintenance Runbook and AI-Agent Boundaries
|
|
2
|
+
|
|
3
|
+
## Approval status
|
|
4
|
+
|
|
5
|
+
Status: **Approved package maintenance and AI-agent operation-boundary baseline**
|
|
6
|
+
|
|
7
|
+
Russ / Rusty Frink Desiato approved this document as the package maintenance and AI-agent operation-boundary baseline for Moose Inventory on 2026-05-29. Approval reference: `GOV-MAINT-001`.
|
|
8
|
+
|
|
9
|
+
This document defines the routine package-maintenance runbook and AI-agent operation boundaries for Moose Inventory.
|
|
10
|
+
|
|
11
|
+
Approved references:
|
|
12
|
+
|
|
13
|
+
- `GOV-TAILOR-001`: Moose Inventory is approved as Class 4 with target profile Software Library / Package.
|
|
14
|
+
- `GOV-PRODUCT-001`: `docs/product/product-brief.md` is approved as the product-framing baseline.
|
|
15
|
+
- `GOV-REQ-001`: `docs/product/requirements-baseline.md` is approved as the requirements and acceptance criteria baseline.
|
|
16
|
+
- `GOV-UX-001`: `docs/ux/cli-workflow-notes.md` is approved as the CLI UX/workflow baseline.
|
|
17
|
+
- `GOV-ARCH-001`: `docs/architecture/architecture-and-trust-boundaries.md` is approved as the architecture and trust-boundary baseline.
|
|
18
|
+
- `GOV-SEC-001`: `docs/security/security-privacy-process.md` is approved as the security and privacy process baseline.
|
|
19
|
+
- `GOV-RISK-REG-001`: `docs/security/accepted-risk-register.md` is approved as the maintained accepted-risk register baseline.
|
|
20
|
+
- `GOV-MAINT-001`: this document is approved as the package maintenance and AI-agent operation-boundary baseline.
|
|
21
|
+
|
|
22
|
+
Related templates:
|
|
23
|
+
|
|
24
|
+
- `docs/qa/qa-documentation-and-release-gates.md`
|
|
25
|
+
- `docs/release/release-readiness.md`
|
|
26
|
+
- `docs/release/publishing.md`
|
|
27
|
+
- `docs/security/accepted-risk-register.md`
|
|
28
|
+
|
|
29
|
+
Scope limit: this runbook covers local repository maintenance and release-readiness stewardship. It does not approve publishing a release, yanking/deprecating a gem, accepting risk, changing RubyGems/GitHub account ownership, adding hosted operations, or performing external communications as the project.
|
|
30
|
+
|
|
31
|
+
## Maintenance principles
|
|
32
|
+
|
|
33
|
+
- Keep maintenance boring. Boring is the grown-up version of secure.
|
|
34
|
+
- Prefer small, reviewable branches with one intent each.
|
|
35
|
+
- Keep generated files, local databases, coverage reports, temporary gems, and tool caches out of commits unless intentionally documented.
|
|
36
|
+
- Use the full release gate before claiming release readiness.
|
|
37
|
+
- Treat dependency, workflow, and release-infrastructure changes as supply-chain-sensitive.
|
|
38
|
+
- Evidence is not approval. Tests, scans, and docs support human decisions; they do not replace them.
|
|
39
|
+
|
|
40
|
+
## Routine maintenance cadence
|
|
41
|
+
|
|
42
|
+
| Area | Suggested cadence | Evidence / command | Notes |
|
|
43
|
+
| --- | --- | --- | --- |
|
|
44
|
+
| Ruby dependencies | Monthly, before releases, and when advisories appear | `bundle outdated`, `bundle update <gem>` on scoped branches, `MOOSE_INVENTORY_REQUIRE_SECURITY_TOOLS=1 ./scripts/check.sh` | Prefer targeted updates over broad churn unless doing a planned dependency refresh. |
|
|
45
|
+
| Ruby version support | Quarterly and before CI matrix changes | `.github/workflows/ci.yml`, gemspec Ruby requirement, local/CI gate | Changing supported Ruby versions is compatibility work and should be reflected in docs/release notes. |
|
|
46
|
+
| GitHub Actions versions | Monthly or when deprecation/security notices appear | Review `.github/workflows/*.yml`, then full gate | Pin or upgrade actions deliberately; review permission and release-token implications. |
|
|
47
|
+
| Security tools | Monthly and before releases | `scripts/ci/install_security_tools.sh`, `check_security.sh`, `check_secrets.sh` | If tool availability changes, update release-readiness docs and accepted-risk notes as needed. |
|
|
48
|
+
| Vulnerability advisories | Before releases and when alerts arrive | OSV, `bundler-audit`, `osv-scanner`, GitHub advisory evidence when available | Triage reachability and severity; do not ship unresolved critical/high without explicit risk acceptance. |
|
|
49
|
+
| Package metadata | Before releases and dependency bumps | `moose-inventory.gemspec`, `scripts/ci/package_sanity.sh` | Review executable, files, MFA metadata, dependency ranges, required Ruby, license, and homepage/source links. |
|
|
50
|
+
| Release workflow and RubyGems publishing path | Before each release | `.github/workflows/release.yml`, `docs/release/publishing.md`, GitHub `release` environment status | Confirm trusted publishing assumptions before tagging. |
|
|
51
|
+
| Documentation drift | After user-facing changes and before releases | Documentation QA checklist | Keep README, requirements, UX, architecture, security, QA, and release docs aligned. |
|
|
52
|
+
|
|
53
|
+
## Standard maintenance workflow
|
|
54
|
+
|
|
55
|
+
1. Start from a clean `master` branch.
|
|
56
|
+
2. Create a focused branch for the maintenance item.
|
|
57
|
+
3. Inspect the relevant docs, code, workflows, and backlog entries before editing.
|
|
58
|
+
4. Make the smallest coherent change.
|
|
59
|
+
5. Update docs and backlog records in the same branch when behavior, process, or risk posture changes.
|
|
60
|
+
6. Run the smallest meaningful gate while developing.
|
|
61
|
+
7. Run `MOOSE_INVENTORY_REQUIRE_SECURITY_TOOLS=1 ./scripts/check.sh` before merge when the work touches dependencies, package metadata, release tooling, security posture, or process evidence.
|
|
62
|
+
8. Commit the branch work with a clear message.
|
|
63
|
+
9. Merge back to `master` deliberately.
|
|
64
|
+
10. Rerun the meaningful gate after merge.
|
|
65
|
+
11. Report what changed, verification evidence, new backlog items, blockers, and whether `master` is clean/ahead of origin.
|
|
66
|
+
|
|
67
|
+
## Dependency update runbook
|
|
68
|
+
|
|
69
|
+
Use this for RubyGem dependency updates and dependency-range changes.
|
|
70
|
+
|
|
71
|
+
1. Identify the reason for the update:
|
|
72
|
+
- vulnerability fix;
|
|
73
|
+
- compatibility with supported Ruby versions;
|
|
74
|
+
- routine maintenance;
|
|
75
|
+
- toolchain or CI support.
|
|
76
|
+
2. Review current dependency constraints in `moose-inventory.gemspec`, `Gemfile`, and `Gemfile.lock`.
|
|
77
|
+
3. Prefer a targeted update:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
bundle update <gem-name>
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
4. For security fixes, capture advisory identifiers and affected versions.
|
|
84
|
+
5. Run:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
MOOSE_INVENTORY_REQUIRE_SECURITY_TOOLS=1 ./scripts/check.sh
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
6. Review whether package metadata or docs need updates.
|
|
91
|
+
7. If a critical/high issue remains reachable, block release unless a human records accepted risk.
|
|
92
|
+
8. Commit `Gemfile.lock` and any intentional constraint/doc updates together.
|
|
93
|
+
|
|
94
|
+
Do not:
|
|
95
|
+
|
|
96
|
+
- hide dependency warnings by weakening gates;
|
|
97
|
+
- switch package sources without approval;
|
|
98
|
+
- add network/runtime dependencies without architecture/security review;
|
|
99
|
+
- broaden dependency ranges purely to silence tooling.
|
|
100
|
+
|
|
101
|
+
## Ruby and CI action update runbook
|
|
102
|
+
|
|
103
|
+
Use this when changing Ruby support or GitHub Actions dependencies.
|
|
104
|
+
|
|
105
|
+
1. Review `.github/workflows/ci.yml`, `.github/workflows/release.yml`, `moose-inventory.gemspec`, and docs.
|
|
106
|
+
2. For Ruby support changes, confirm the version is supported by required native/database gems.
|
|
107
|
+
3. For action upgrades, review changelogs for permission, token, runtime, and behavior changes.
|
|
108
|
+
4. Keep release workflow permissions minimal.
|
|
109
|
+
5. Do not add publish secrets unless manual fallback is explicitly approved; trusted publishing/OIDC is the baseline.
|
|
110
|
+
6. Run the full local gate and wait for CI evidence when pushed.
|
|
111
|
+
7. Update release docs if release workflow behavior changes.
|
|
112
|
+
|
|
113
|
+
## Vulnerability triage runbook
|
|
114
|
+
|
|
115
|
+
Use highest applicable severity from `docs/security/security-privacy-process.md`.
|
|
116
|
+
|
|
117
|
+
1. Capture the source:
|
|
118
|
+
- OSV/advisory ID;
|
|
119
|
+
- `bundler-audit` finding;
|
|
120
|
+
- `osv-scanner` result;
|
|
121
|
+
- GitHub security advisory;
|
|
122
|
+
- manual report.
|
|
123
|
+
2. Identify affected component, version, and reachability:
|
|
124
|
+
- runtime dependency;
|
|
125
|
+
- development/test dependency;
|
|
126
|
+
- release workflow/tooling;
|
|
127
|
+
- documentation/example only.
|
|
128
|
+
3. Determine impact:
|
|
129
|
+
- credential exposure;
|
|
130
|
+
- arbitrary code execution;
|
|
131
|
+
- data corruption/loss;
|
|
132
|
+
- package compromise;
|
|
133
|
+
- denial of service;
|
|
134
|
+
- process/tooling hardening gap.
|
|
135
|
+
4. Choose disposition:
|
|
136
|
+
- fix immediately;
|
|
137
|
+
- patch dependency or workflow;
|
|
138
|
+
- document non-reachability;
|
|
139
|
+
- defer as backlog for low/medium findings;
|
|
140
|
+
- request accepted-risk approval when release would proceed with known risk.
|
|
141
|
+
5. For suspected credential exposure or package compromise, stop release activity and escalate to a human maintainer.
|
|
142
|
+
6. Record evidence in docs, backlog, or security notes as appropriate.
|
|
143
|
+
|
|
144
|
+
Release blocking rule: unresolved critical/high findings block release unless an explicit human accepted-risk decision exists in `docs/security/accepted-risk-register.md`.
|
|
145
|
+
|
|
146
|
+
## GitHub and RubyGems release-infrastructure stewardship
|
|
147
|
+
|
|
148
|
+
Maintainers should periodically confirm:
|
|
149
|
+
|
|
150
|
+
- repository owner/name remain `RusDavies/moose-inventory` for trusted publishing;
|
|
151
|
+
- release workflow filename remains `release.yml`;
|
|
152
|
+
- RubyGems trusted publisher uses the `release` environment;
|
|
153
|
+
- GitHub `release` environment protection rules are understood before release;
|
|
154
|
+
- workflow permissions remain least-privilege;
|
|
155
|
+
- no RubyGems API key is stored in GitHub secrets for normal trusted publishing;
|
|
156
|
+
- manual publishing credentials, if ever used, remain local, scoped, and protected with `0600` permissions.
|
|
157
|
+
|
|
158
|
+
Agents may document observed configuration and prepare checklists, but changing GitHub/RubyGems account settings, repository ownership, trusted-publisher setup, secrets, or environment protections requires explicit human approval.
|
|
159
|
+
|
|
160
|
+
## Release recovery runbook
|
|
161
|
+
|
|
162
|
+
Use `docs/qa/qa-documentation-and-release-gates.md` for full yank/deprecation/rollback templates. Summary:
|
|
163
|
+
|
|
164
|
+
1. Stop further release activity.
|
|
165
|
+
2. Preserve evidence: version, tag, commit, workflow run, RubyGems URL, install output, and failure symptoms.
|
|
166
|
+
3. Determine whether this is:
|
|
167
|
+
- ordinary regression;
|
|
168
|
+
- security issue;
|
|
169
|
+
- credential exposure;
|
|
170
|
+
- package compromise;
|
|
171
|
+
- publishing/workflow failure;
|
|
172
|
+
- RubyGems propagation false negative.
|
|
173
|
+
4. If users are affected, prepare a patch release on a new version number.
|
|
174
|
+
5. Do not yank, deprecate, publish an advisory, or manually push a gem without explicit human maintainer approval.
|
|
175
|
+
6. Update release docs, accepted-risk register, audit notes, or backlog based on the outcome.
|
|
176
|
+
|
|
177
|
+
## AI-agent permitted maintenance actions
|
|
178
|
+
|
|
179
|
+
AI agents may perform these actions when working inside this repository and following the git workflow:
|
|
180
|
+
|
|
181
|
+
- inspect repository files, docs, tests, and local git history;
|
|
182
|
+
- create focused branches;
|
|
183
|
+
- edit code, tests, docs, and process files for scoped tasks;
|
|
184
|
+
- run local tests, linters, package sanity checks, security scans, and documentation checks;
|
|
185
|
+
- update `BACKLOG.md` with discovered follow-up work;
|
|
186
|
+
- add or update local runbooks, templates, and evidence docs;
|
|
187
|
+
- commit and merge local branches after verification;
|
|
188
|
+
- report status and evidence in the project Discord channel;
|
|
189
|
+
- prepare release checklists, drafts, and recommendations.
|
|
190
|
+
|
|
191
|
+
## AI-agent actions requiring explicit human approval
|
|
192
|
+
|
|
193
|
+
Agents must ask first before:
|
|
194
|
+
|
|
195
|
+
- pushing to remote branches or tags unless Russ explicitly requests it;
|
|
196
|
+
- creating, moving, or deleting release tags;
|
|
197
|
+
- publishing to RubyGems;
|
|
198
|
+
- yanking or deprecating RubyGems versions;
|
|
199
|
+
- changing RubyGems owners, trusted publishers, MFA settings, or package credentials;
|
|
200
|
+
- changing GitHub repository settings, branch protections, release environment protections, secrets, deploy keys, or ownership;
|
|
201
|
+
- adding/removing CI secrets or credentials;
|
|
202
|
+
- accepting security/privacy/release risk;
|
|
203
|
+
- making public security disclosures or advisories;
|
|
204
|
+
- sending external communications as the project or maintainer;
|
|
205
|
+
- introducing hosted-service behavior, telemetry, or new external network behavior;
|
|
206
|
+
- deleting repository history or performing destructive cleanup beyond recoverable local temporary files.
|
|
207
|
+
|
|
208
|
+
## AI-agent no-go zones
|
|
209
|
+
|
|
210
|
+
Agents must not:
|
|
211
|
+
|
|
212
|
+
- exfiltrate, print, commit, or store credentials;
|
|
213
|
+
- bypass failed security checks by weakening gates without explicit review and approval;
|
|
214
|
+
- treat proposed/monitored risks as accepted risks;
|
|
215
|
+
- publish a release because checks passed;
|
|
216
|
+
- use manual RubyGems credentials unless a human maintainer explicitly chooses that fallback;
|
|
217
|
+
- modify account-level GitHub or RubyGems settings autonomously;
|
|
218
|
+
- rewrite public history without explicit approval;
|
|
219
|
+
- make legal/compliance claims beyond the approved docs;
|
|
220
|
+
- represent the project as having hosted operations, RBAC, tenant isolation, telemetry guarantees, or compliance certifications not explicitly approved.
|
|
221
|
+
|
|
222
|
+
## Maintenance report template
|
|
223
|
+
|
|
224
|
+
```markdown
|
|
225
|
+
## Maintenance report
|
|
226
|
+
|
|
227
|
+
Item:
|
|
228
|
+
Branch:
|
|
229
|
+
Commit / merge:
|
|
230
|
+
Date:
|
|
231
|
+
|
|
232
|
+
Changed:
|
|
233
|
+
-
|
|
234
|
+
|
|
235
|
+
Verification:
|
|
236
|
+
- [ ] Small gate:
|
|
237
|
+
- [ ] Full gate, if required:
|
|
238
|
+
- [ ] Documentation reviewed:
|
|
239
|
+
|
|
240
|
+
Risk / security notes:
|
|
241
|
+
- Accepted-risk register changed: yes/no
|
|
242
|
+
- New findings:
|
|
243
|
+
- Human approvals required:
|
|
244
|
+
|
|
245
|
+
Backlog:
|
|
246
|
+
- New items added:
|
|
247
|
+
- Burndown:
|
|
248
|
+
|
|
249
|
+
Status:
|
|
250
|
+
- `master` clean:
|
|
251
|
+
- Ahead/behind origin:
|
|
252
|
+
- Next recommended item:
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
## Current known operational follow-ups
|
|
256
|
+
|
|
257
|
+
- Confirm GitHub `release` environment protection rules with maintainers before a future release.
|
|
258
|
+
- Decide whether public `SECURITY.md` vulnerability intake should be added.
|
|
259
|
+
- Complete destructive-command confirmation work before expanding destructive workflows.
|
|
260
|
+
- Evaluate signed provenance or attestations later if target users require more than RubyGems trusted publishing.
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
# Moose Inventory Process Conformance Gap Analysis — 2026-05-28
|
|
2
|
+
|
|
3
|
+
## Scope
|
|
4
|
+
|
|
5
|
+
This analysis compares Moose Inventory against the updated workspace product-process guidance, especially:
|
|
6
|
+
|
|
7
|
+
- `SOFTWARE_PRODUCT_DEVELOPMENT_PROCESS.md`
|
|
8
|
+
- `TAILORING_GUIDE.md`
|
|
9
|
+
- `GOVERNANCE_AND_APPROVALS.md`
|
|
10
|
+
- requirements, architecture, security, QA, release, operations, and documentation guidance
|
|
11
|
+
|
|
12
|
+
The key governance rule for this audit is explicit: **a document existing in the repository is evidence, not approval**. Approval requires a durable recorded decision with approver, date, scope, and limitations.
|
|
13
|
+
|
|
14
|
+
## Recommended tailoring classification
|
|
15
|
+
|
|
16
|
+
Recommended classification for approval: **Class 4 — Public / Production / Commercial Product**, target profile **Software Library / Package**.
|
|
17
|
+
|
|
18
|
+
Rationale:
|
|
19
|
+
|
|
20
|
+
- Moose Inventory is a public RubyGem published to RubyGems.
|
|
21
|
+
- It is intended for real Ansible inventory workflows and can affect infrastructure operations.
|
|
22
|
+
- It handles database configuration, environment-specific inventory state, package publishing, CI, and release automation.
|
|
23
|
+
- It is not a hosted service or operated runtime, so the software-library/package target profile excludes normal service monitoring, alert routing, backup/restore operations, and runtime incident runbooks unless a future hosted/runtime component is added.
|
|
24
|
+
- Library/package concerns remain mandatory: API/CLI compatibility, release integrity, trusted publishing, supply-chain security, vulnerability intake, security patching, maintainer ownership, and developer/user documentation.
|
|
25
|
+
|
|
26
|
+
Approval status: **not approved**. This is a recommendation prepared for Russ or another authorized product owner to approve, revise, or reject.
|
|
27
|
+
|
|
28
|
+
## Current evidence inventory
|
|
29
|
+
|
|
30
|
+
| Area | Existing evidence | Approval status | Gap |
|
|
31
|
+
| --- | --- | --- | --- |
|
|
32
|
+
| Tailoring/classification | This analysis recommends Class 4 + Software Library/Package | Not approved | Need durable tailoring decision record |
|
|
33
|
+
| Product framing | README explains purpose/use with Ansible | Not approved as product baseline | Need concise product brief/framing note with goals, users, non-goals, success criteria |
|
|
34
|
+
| Requirements | README, CLI behavior, tests, backlog | Not approved as requirements baseline | Need requirements/acceptance baseline covering CLI, DB, Ansible integration, package/release, security, compatibility |
|
|
35
|
+
| UX/product design | CLI help/README/tests | No UX approval | For CLI package, need lightweight CLI workflow/UX notes rather than wireframes |
|
|
36
|
+
| Architecture | Code and README describe behavior; release docs cover publishing | Not approved | Need architecture overview for CLI/package, DB adapters, schema migrations, Ansible integration, trust boundaries, and release pipeline |
|
|
37
|
+
| Security/privacy | Security audit reports, gitleaks/OSV/bundler-audit gates, README secret guidance, draft `docs/security/security-privacy-process.md`, draft `docs/security/accepted-risk-register.md` | Draft process evidence exists, not approved security/privacy baseline or risk acceptance | Need explicit review/approval of security/privacy baseline; future releases still need release-specific accepted-risk disposition |
|
|
38
|
+
| Compliance readiness | Not applicable as enterprise product claim today | No compliance claims approved | Need explicit non-goal/claim boundary so no SOC 2/ISO/ISO-style readiness is implied |
|
|
39
|
+
| Documentation planning | README and release docs exist | No documentation QA/sign-off record | Need documentation plan/checklist for user/developer/release/security docs |
|
|
40
|
+
| QA/test evidence | `scripts/check.sh`, RSpec, SimpleCov, RuboCop, permission check, OSV, bundler-audit, gitleaks, package sanity, CI matrix | Test evidence exists per run, not process approval | Need QA plan mapping gates to requirements and release criteria |
|
|
41
|
+
| Release security gate | Release readiness/publishing docs and security audits exist | No formal release approval template/current gate record | Need release-security gate checklist, accepted-risk disposition, release approval fields |
|
|
42
|
+
| Operations/maintenance | Release docs, CI/release workflows, security audits | Partial | Need package-maintenance runbook: owner, release infrastructure, vulnerability intake, update cadence, release/yank/deprecation path, AI-agent maintenance boundaries |
|
|
43
|
+
| AI-agent operation boundaries | Workspace/git workflow exists outside repo; no repo-local boundary | Not approved | Need repo-local boundaries for agent-assisted maintenance/release prep, especially no publishing/release/accepted-risk decisions without human approval |
|
|
44
|
+
| Backlog/evidence practice | BACKLOG.md is extensive and current | Partial | Need process backlog acceptance criteria/approval notes on process items |
|
|
45
|
+
|
|
46
|
+
## Gap analysis
|
|
47
|
+
|
|
48
|
+
### 1. Governance and approvals
|
|
49
|
+
|
|
50
|
+
The repository has strong implementation evidence but little explicit governance evidence. Release docs describe trusted publishing and successful v2.0 publishing, but they do not by themselves approve future releases, accepted risks, classification, or product direction.
|
|
51
|
+
|
|
52
|
+
Gaps:
|
|
53
|
+
|
|
54
|
+
- No recorded tailoring/classification approval.
|
|
55
|
+
- No approval register or decision-record location specific to the repo.
|
|
56
|
+
- No explicit list of human-owned decisions vs agent-executable maintenance work.
|
|
57
|
+
- No accepted-risk register, even if currently empty.
|
|
58
|
+
|
|
59
|
+
Impact: future agents can confuse “documented process” with “approved gate,” which is exactly the paper goblin we are trying not to feed.
|
|
60
|
+
|
|
61
|
+
### 2. Product and requirements baseline
|
|
62
|
+
|
|
63
|
+
README and tests provide a de facto behavioral contract, but there is no approved product/requirements baseline.
|
|
64
|
+
|
|
65
|
+
Gaps:
|
|
66
|
+
|
|
67
|
+
- No concise product brief stating target users, use cases, non-goals, and success criteria.
|
|
68
|
+
- No requirements spec separating functional, non-functional, security, package/release, compatibility, and documentation requirements.
|
|
69
|
+
- No explicit public API/CLI compatibility and deprecation policy beyond existing behavior/tests.
|
|
70
|
+
|
|
71
|
+
Impact: development can continue, but release readiness and change impact rely on tribal knowledge plus tests rather than an approved baseline.
|
|
72
|
+
|
|
73
|
+
### 3. CLI UX/workflow design
|
|
74
|
+
|
|
75
|
+
Because Moose Inventory is a CLI/package, full visual UX wireframes are not needed. However, the updated process still expects workflow/usability/trust states where user-facing workflows exist.
|
|
76
|
+
|
|
77
|
+
Gaps:
|
|
78
|
+
|
|
79
|
+
- No lightweight CLI workflow/UX note for core workflows, destructive operations, dry-run behavior, machine-readable output, error states, accessibility/readability expectations, and trust/confirmation boundaries.
|
|
80
|
+
- No UX approval record for CLI workflow conventions.
|
|
81
|
+
|
|
82
|
+
Impact: output compatibility is well tested, but UX decisions are implicit.
|
|
83
|
+
|
|
84
|
+
### 4. Architecture and trust boundaries
|
|
85
|
+
|
|
86
|
+
The code has improved architecture, and release docs capture publishing mechanics, but there is no architecture overview matching the updated guidance.
|
|
87
|
+
|
|
88
|
+
Gaps:
|
|
89
|
+
|
|
90
|
+
- No architecture overview for CLI layers, operation objects, DB schema/migrations, adapters, Ansible plugin/shim integration, audit log, import/export, and release pipeline.
|
|
91
|
+
- No data model/trust-boundary diagram or written equivalent.
|
|
92
|
+
|
|
93
|
+
Impact: maintainers can infer architecture from code, but future maintainers/agents lack a clear evidence artifact.
|
|
94
|
+
|
|
95
|
+
### 5. Security/privacy and vulnerability operations
|
|
96
|
+
|
|
97
|
+
Security audit evidence is strong for recent work. The missing piece is not “did we scan?” but “what is the maintained security model?”
|
|
98
|
+
|
|
99
|
+
Gaps:
|
|
100
|
+
|
|
101
|
+
- Draft threat model/abuse-case, data classification/data-flow, secrets/logging, vulnerability intake/security patch policy, and accepted-risk register now exist under `docs/security/`.
|
|
102
|
+
- These drafts are evidence, not approval. `GOV-SEC-001` must be approved, revised, or rejected before they become approved security/privacy process baseline.
|
|
103
|
+
- Future releases still need release-specific accepted-risk disposition and release approval.
|
|
104
|
+
- Secret scanning on GitHub is documented as unavailable/disabled in audit evidence; local gitleaks compensates, and the residual posture is tracked as a monitored proposed risk.
|
|
105
|
+
|
|
106
|
+
Impact: current gates are good, but future security decisions lack durable process scaffolding.
|
|
107
|
+
|
|
108
|
+
### 6. QA and documentation QA
|
|
109
|
+
|
|
110
|
+
The automated gate is strong and repeatable. The process gap is mapping those checks to requirements/release criteria and documenting documentation QA.
|
|
111
|
+
|
|
112
|
+
Gaps:
|
|
113
|
+
|
|
114
|
+
- No QA plan that maps RSpec/SimpleCov/RuboCop/permission/security/package checks to release criteria.
|
|
115
|
+
- No documentation QA checklist for README, release docs, examples, Ansible plugin docs, and security claims.
|
|
116
|
+
- No known-issues/accepted-exceptions template for release candidates.
|
|
117
|
+
|
|
118
|
+
Impact: checks are real, but release evidence is less reviewable than it should be.
|
|
119
|
+
|
|
120
|
+
### 7. Release and package operations
|
|
121
|
+
|
|
122
|
+
Trusted publishing and release docs are good. Updated guidance expects approval records, rollback/yank/deprecation plans, and post-release review.
|
|
123
|
+
|
|
124
|
+
Gaps:
|
|
125
|
+
|
|
126
|
+
- No formal release checklist template with approver/date/scope/conditions.
|
|
127
|
+
- No release security gate template/current gate record.
|
|
128
|
+
- No explicit gem yank/deprecation/rollback decision path.
|
|
129
|
+
- No post-release review template or cadence.
|
|
130
|
+
|
|
131
|
+
Impact: publishing mechanics are documented, but release governance is incomplete.
|
|
132
|
+
|
|
133
|
+
### 8. Operations profile for a library/package
|
|
134
|
+
|
|
135
|
+
Moose Inventory does not need hosted-service monitoring, alerting, backup/restore, or runtime incident operations unless it later ships an operated service. It does need package maintenance operations.
|
|
136
|
+
|
|
137
|
+
Gaps:
|
|
138
|
+
|
|
139
|
+
- No maintainer operations runbook for dependency update cadence, vulnerability triage, CI/release failures, RubyGems/GitHub account stewardship, trusted publishing maintenance, and release recovery.
|
|
140
|
+
- No AI-agent operation boundaries for repository maintenance and release preparation.
|
|
141
|
+
|
|
142
|
+
Impact: routine maintenance remains doable, but not yet process-conformant under the updated package-maintenance and AI-agent guidance.
|
|
143
|
+
|
|
144
|
+
## Proposed remediation plan
|
|
145
|
+
|
|
146
|
+
### Phase 1 — Governance baseline and tailoring
|
|
147
|
+
|
|
148
|
+
1. Create `docs/governance/approval-register.md` or equivalent.
|
|
149
|
+
2. Record proposed Class 4 + Software Library/Package tailoring decision as **pending approval**.
|
|
150
|
+
3. Define human-owned decisions: product direction, release approval, accepted risks, RubyGems publishing, compliance/public claims, destructive repo/package actions.
|
|
151
|
+
4. Define agent-executable work: local docs/code/test changes, evidence gathering, draft release notes/checklists, non-public internal backlog work.
|
|
152
|
+
|
|
153
|
+
Exit criteria: Russ or delegated approver explicitly approves or revises the tailoring decision.
|
|
154
|
+
|
|
155
|
+
### Phase 2 — Product and requirements baseline
|
|
156
|
+
|
|
157
|
+
1. Add a concise product brief.
|
|
158
|
+
2. Add requirements/acceptance criteria for CLI behavior, DB backends, Ansible integration, import/export, dry-run/plan, audit log, release/package integrity, compatibility, and documentation.
|
|
159
|
+
3. Mark requirements as draft until approved.
|
|
160
|
+
|
|
161
|
+
Exit criteria: requirements baseline approved or explicitly left draft with blockers tracked.
|
|
162
|
+
|
|
163
|
+
### Phase 3 - Architecture, security, and trust boundaries
|
|
164
|
+
|
|
165
|
+
1. Add architecture overview and data/trust-boundary notes.
|
|
166
|
+
2. Add threat model/data classification/secrets-handling notes.
|
|
167
|
+
3. Add vulnerability intake/security patch policy and accepted-risk register.
|
|
168
|
+
|
|
169
|
+
Exit criteria: architecture/security baseline reviewed; unresolved risks tracked.
|
|
170
|
+
|
|
171
|
+
### Phase 4 — QA, documentation, and release gates
|
|
172
|
+
|
|
173
|
+
1. Add QA plan mapping current `scripts/check.sh` gates to process expectations.
|
|
174
|
+
2. Add documentation plan and documentation QA checklist.
|
|
175
|
+
3. Add release checklist and release security gate template with approval fields.
|
|
176
|
+
4. Add package rollback/yank/deprecation path and post-release review template.
|
|
177
|
+
|
|
178
|
+
Exit criteria: next release can produce a complete evidence packet without reconstructing process from commit history and vibes.
|
|
179
|
+
|
|
180
|
+
### Phase 5 — Maintenance/agent boundaries
|
|
181
|
+
|
|
182
|
+
1. Add package maintenance runbook.
|
|
183
|
+
2. Add AI-agent operation boundaries for repo maintenance, release prep, and explicit no-go zones.
|
|
184
|
+
3. Add maintenance cadence reminders/backlog items for dependencies, Ruby versions, CI actions, security scans, and docs review.
|
|
185
|
+
|
|
186
|
+
Exit criteria: maintainers and agents can safely inspect, patch, prepare releases, and know when to stop for human approval.
|
|
187
|
+
|
|
188
|
+
## Current launch/release posture
|
|
189
|
+
|
|
190
|
+
Moose Inventory has strong automated verification and trusted-publishing evidence, but under the updated process it is **not process-conformant for a future release** until at least tailoring, release approval, accepted-risk disposition, documentation QA, and release-security gate evidence are recorded for that release.
|
|
191
|
+
|
|
192
|
+
This does not invalidate prior releases; it identifies the gap between current repository evidence and the updated workspace process baseline.
|