77 lines
3.2 KiB
Markdown
77 lines
3.2 KiB
Markdown
# PR-25 Asset Cache Model and Repository
|
|
|
|
Domain Owner: `docs/packer`
|
|
|
|
## Briefing
|
|
|
|
`PR-24` defines the need for a durable asset file cache in `assets/.prometeu/cache.json`, but the first executable slice should stop at cache persistence itself.
|
|
|
|
Before walkers or runtime snapshot integration can reuse prior file facts safely, the packer needs a stable cache schema, explicit load/save ownership, and tests that prove the cache is keyed correctly and excludes non-cacheable data.
|
|
|
|
## Objective
|
|
|
|
Deliver the durable `cache.json` model and repository, keyed by stable `asset_id`, with no persisted diagnostics.
|
|
|
|
## Dependencies
|
|
|
|
- [`./PR-24-asset-file-cache-hydration-and-walker-reuse.md`](./PR-24-asset-file-cache-hydration-and-walker-reuse.md)
|
|
- [`./PR-14-project-runtime-core-snapshot-model-and-lifecycle.md`](./PR-14-project-runtime-core-snapshot-model-and-lifecycle.md)
|
|
- [`../specs/2. Workspace, Registry, and Asset Identity Specification.md`](../specs/2.%20Workspace,%20Registry,%20and%20Asset%20Identity%20Specification.md)
|
|
|
|
## Scope
|
|
|
|
- define the durable schema for `assets/.prometeu/cache.json`
|
|
- key asset cache ownership by stable `asset_id`
|
|
- omit unregistered assets from durable cache ownership entirely
|
|
- key file cache entries by normalized relative path inside the asset root
|
|
- persist reusable probe facts only:
|
|
- `mimeType`
|
|
- `size`
|
|
- `lastModified`
|
|
- fingerprint/hash
|
|
- family-specific metadata
|
|
- exclude diagnostics from the durable cache artifact
|
|
- add a packer-owned repository for cache load/save and schema validation
|
|
|
|
## Non-Goals
|
|
|
|
- no walker contract changes yet
|
|
- no cache comparison or reuse policy yet
|
|
- no runtime snapshot model changes yet
|
|
- no Studio adapter changes
|
|
|
|
## Execution Method
|
|
|
|
1. Add cache model types under the packer runtime model layer.
|
|
2. Define one versioned workspace cache artifact for `assets/.prometeu/cache.json`.
|
|
3. Encode asset entries by `asset_id`, never by asset root path.
|
|
4. Encode file entries by normalized asset-relative path.
|
|
5. Add repository load/save behavior with safe fallback on missing or invalid cache files.
|
|
6. Prove by tests that diagnostics cannot be serialized into the durable cache artifact.
|
|
|
|
## Acceptance Criteria
|
|
|
|
- the packer has explicit model types for the durable cache artifact
|
|
- cache ownership is keyed by `asset_id`
|
|
- unregistered assets do not receive durable cache entries
|
|
- file cache entries are keyed by normalized relative file path
|
|
- repository load on absent cache returns a safe empty state
|
|
- malformed or schema-incompatible cache can be rejected cleanly without crashing the runtime load path
|
|
- diagnostics are not part of the serialized cache schema
|
|
|
|
## Validation
|
|
|
|
- schema serialization tests for workspace cache
|
|
- repository round-trip tests for valid cache content
|
|
- repository tests for absent cache file
|
|
- repository tests for malformed cache file
|
|
- cache model tests proving `asset_id`-aligned lookup
|
|
- serialization tests proving diagnostics are excluded from `cache.json`
|
|
|
|
## Affected Artifacts
|
|
|
|
- `docs/packer/pull-requests/**`
|
|
- `prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/repositories/**`
|
|
- `prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/models/**`
|
|
- `prometeu-packer/prometeu-packer-v1/src/test/java/p/packer/repositories/**`
|