forge-storage: Object and file storage
Engine: Hybrid — Forge + Supabase, Cloudflare, Google
Purpose
Inspect object naming, access control, encryption, lifecycle, consistency, integrity, and recovery.
Deterministic runtime composition
Before loading any provider procedure, run:
Resolve ../../runtime/cli/src/composition-entry.js relative to this SKILL.md, then run:
node "<resolved-absolute-runner-path>" storage compose --workflow audit --root "<repository-root>" --dry-run --json
Add one repeatable --request <provider-or-source> flag for each explicit user request. Add
--condition <task-condition> or --risk-surface <surface> only for a task fact you directly
proved; never infer one from generic wording. The command above is the default for this
audit-oriented module; for implementation use --workflow build, and for a fix, retest, or
release gate use --workflow fix, verify, or ship respectively. Read the JSON response,
keep the Forge contract at index zero, and resolve paths against the absolute runtime_root
reported in that response. Read eager[].runtimePath when entering the module. The full
selected[] list is availability/provenance; load only deferred[].runtimePath when the task
reaches that concern, in tier order. Refuse any path that escapes the root. Respect every reported
suppression and context budget. If missing is non-empty, stop and report the installation as
damaged; do not improvise a prose fallback. The runner and specialist content may live in a plugin
cache or global installation; never assume they are inside the audited repository.
Resolve and read ../fullstack-forge/references/shared/module-contract.md (applicability,
execution, mutation, verification, completion) and
../fullstack-forge/references/shared/evidence-rules.md (statuses, standards, tools, findings via
../fullstack-forge/references/PROTOCOL.md) relative to this module SKILL.md before reporting.
Never hide failed checks or claim that an operation ran when it did not.
Automatic activation signals
Activate when a request or direct repository evidence involves object and file storage, when
the user explicitly names forge-storage, or when discovery proves an applicable boundary.
- Object stores, file systems, blob databases, and CDN-backed assets
When not to activate
- No persistent files or objects
Automated support
Relevant discovery inputs are:
- storage clients
- bucket and CDN configuration
- object references
Deterministic support, bounded evidence only:
Agent inspection procedure
- Inventory storage destinations (buckets, filesystems, database blobs) with their access policies and encryption settings.
- Verify private-by-default access and trace every public exposure to an explicit recorded decision.
- Check signed-URL generation for prior authorization, scope, and expiry, and object keys for server generation and tenant separation.
- Trace lifecycle: replacement, orphan detection, account and tenant deletion, retention, and backup inclusion for stored objects.
- Verify environment separation and quota or growth controls.
Manual inspection requirements:
- Review actual bucket, key, network, replication, and lifecycle policy
- Test provider consistency and failure assumptions
Stack-specific guidance:
- Treat presigned URLs as scoped credentials and bind method, object, size, and expiry
Evidence to collect
Standards used as criteria:
- OWASP ASVS 5.0
- CIS storage-service guidance
Common production failures
- Trace create, read, replace, copy, list, and delete authorization
- Inspect private-by-default policy, object naming, tenant prefixes, signed URL constraints, encryption, checksums, versioning, and lifecycle
- Check orphan cleanup, partial writes, metadata leakage, CDN caching, legal holds, and restore expectations
Missing-control checks
Each item needs direct evidence or one reasoned status.
- Files stored as database blobs
- Object-storage configuration
- Public versus private files
- Signed URLs
- Authorization
- Metadata
- CDN configuration
- File lifecycle
- Orphaned objects
- Deletion
- Backups
- Encryption
- Temporary files
- Retention
- Storage quotas
- Environment isolation
Commands and tools
- Run
forge storage audit --json or fullstack-forge storage audit --json when
an explicit audit is requested and the CLI is installed. Normal feature work does not require it.
Safe fixes
- Add integrity validation and explicit content headers
- Add cleanup for proven temporary-object leaks
Approval-required changes
- Changing visibility, retention, replication, or deleting objects
Verification
- Exercise unauthorized and cross-tenant object access
- Verify lifecycle and restore behavior with recorded provider output
Completion contract
Follow fullstack-forge/references/shared/completion.md and the limitations below.
Known limitations
- Repository configuration does not prove deployed bucket policy
1---2name: forge-storage-33description: Inspect object naming, access control, encryption, lifecycle, consistency, integrity, and recovery.4---56# forge-storage: Object and file storage78Engine: Hybrid — Forge + Supabase, Cloudflare, Google910## Purpose1112Inspect object naming, access control, encryption, lifecycle, consistency, integrity, and recovery.131415## Deterministic runtime composition1617Before loading any provider procedure, run:1819Resolve `../../runtime/cli/src/composition-entry.js` relative to this `SKILL.md`, then run:2021`node "<resolved-absolute-runner-path>" storage compose --workflow audit --root "<repository-root>" --dry-run --json`2223Add one repeatable `--request <provider-or-source>` flag for each explicit user request. Add24`--condition <task-condition>` or `--risk-surface <surface>` only for a task fact you directly25proved; never infer one from generic wording. The command above is the default for this26audit-oriented module; for implementation use `--workflow build`, and for a fix, retest, or27release gate use `--workflow fix`, `verify`, or `ship` respectively. Read the JSON response,28keep the Forge contract at index zero, and resolve paths against the absolute `runtime_root`29reported in that response. Read `eager[].runtimePath` when entering the module. The full30`selected[]` list is availability/provenance; load only `deferred[].runtimePath` when the task31reaches that concern, in tier order. Refuse any path that escapes the root. Respect every reported32suppression and context budget. If `missing` is non-empty, stop and report the installation as33damaged; do not improvise a prose fallback. The runner and specialist content may live in a plugin34cache or global installation; never assume they are inside the audited repository.353637Resolve and read `../fullstack-forge/references/shared/module-contract.md` (applicability,38execution, mutation, verification, completion) and39`../fullstack-forge/references/shared/evidence-rules.md` (statuses, standards, tools, findings via40`../fullstack-forge/references/PROTOCOL.md`) relative to this module `SKILL.md` before reporting.4142Never hide failed checks or claim that an operation ran when it did not.4344## Automatic activation signals4546Activate when a request or direct repository evidence involves object and file storage, when47the user explicitly names `forge-storage`, or when discovery proves an applicable boundary.4849- Object stores, file systems, blob databases, and CDN-backed assets5051## When not to activate5253- No persistent files or objects5455## Automated support5657Relevant discovery inputs are:5859- storage clients60- bucket and CDN configuration61- object references6263Deterministic support, bounded evidence only:6465- `inspect-upload-pipeline`6667## Agent inspection procedure68691. Inventory storage destinations (buckets, filesystems, database blobs) with their access policies and encryption settings.702. Verify private-by-default access and trace every public exposure to an explicit recorded decision.713. Check signed-URL generation for prior authorization, scope, and expiry, and object keys for server generation and tenant separation.724. Trace lifecycle: replacement, orphan detection, account and tenant deletion, retention, and backup inclusion for stored objects.735. Verify environment separation and quota or growth controls.7475Manual inspection requirements:7677- Review actual bucket, key, network, replication, and lifecycle policy78- Test provider consistency and failure assumptions7980Stack-specific guidance:8182- Treat presigned URLs as scoped credentials and bind method, object, size, and expiry8384## Evidence to collect8586Standards used as criteria:8788- OWASP ASVS 5.089- CIS storage-service guidance9091## Common production failures9293- Trace create, read, replace, copy, list, and delete authorization94- Inspect private-by-default policy, object naming, tenant prefixes, signed URL constraints, encryption, checksums, versioning, and lifecycle95- Check orphan cleanup, partial writes, metadata leakage, CDN caching, legal holds, and restore expectations9697## Missing-control checks9899Each item needs direct evidence or one reasoned status.100101- Files stored as database blobs102- Object-storage configuration103- Public versus private files104- Signed URLs105- Authorization106- Metadata107- CDN configuration108- File lifecycle109- Orphaned objects110- Deletion111- Backups112- Encryption113- Temporary files114- Retention115- Storage quotas116- Environment isolation117118## Commands and tools119120- Run `forge storage audit --json` or `fullstack-forge storage audit --json` when121 an explicit audit is requested and the CLI is installed. Normal feature work does not require it.122123## Safe fixes124125- Add integrity validation and explicit content headers126- Add cleanup for proven temporary-object leaks127128## Approval-required changes129130- Changing visibility, retention, replication, or deleting objects131132## Verification133134- Exercise unauthorized and cross-tenant object access135- Verify lifecycle and restore behavior with recorded provider output136137## Completion contract138139Follow `fullstack-forge/references/shared/completion.md` and the limitations below.140141## Known limitations142143- Repository configuration does not prove deployed bucket policy