Describe the bug
complyctl get re-syncs a complypack via atomic directory replacement, destroying the previously-extracted content/ directory inside ~/.complytime/complypacks/<evaluator>/<version>/. The generation cache (.complytime/generation/) and provider artifacts (.complytime/opa/generated/scan-config.json) are not invalidated. The next complyctl scan skips Generate
("Reusing generated artifacts...") and Scan reads a dead bundle_dir path from the stale scan-config.json.
To Reproduce
- Run
complyctl get — pulls complypack, stores content.tar.gz
- Run
complyctl scan — Generate extracts content.tar.gz to content/, writes scan-config.json with bundle_dir: .../content
- Run
complyctl get again — atomic rename replaces 0.1.0/ dir, content/ is gone
- Run
complyctl scan — error: stat /home/user/.complytime/complypacks/opa/0.1.0/content: no such file or directory
Expected behavior
When complyctl get replaces a complypack, it should invalidate the generation cache for that evaluator so the next scan triggers a fresh Generate cycle.
Additional context
Workaround:
rm -rf .complytime/generation .complytime/opa
complyctl scan --policy-id <id> --format pretty
Describe the bug
complyctl getre-syncs a complypack via atomic directory replacement, destroying the previously-extractedcontent/directory inside~/.complytime/complypacks/<evaluator>/<version>/. The generation cache (.complytime/generation/) and provider artifacts (.complytime/opa/generated/scan-config.json) are not invalidated. The nextcomplyctl scanskips Generate("Reusing generated artifacts...") and Scan reads a dead
bundle_dirpath from the stalescan-config.json.To Reproduce
complyctl get— pulls complypack, storescontent.tar.gzcomplyctl scan— Generate extractscontent.tar.gztocontent/, writesscan-config.jsonwithbundle_dir: .../contentcomplyctl getagain — atomic rename replaces0.1.0/dir,content/is gonecomplyctl scan— error:stat /home/user/.complytime/complypacks/opa/0.1.0/content: no such file or directoryExpected behavior
When
complyctl getreplaces a complypack, it should invalidate the generation cache for that evaluator so the next scan triggers a fresh Generate cycle.Additional context
Workaround: