F5_Storage_Upload / Storage / Upload
objectの選択、検査、保存、削除を所有権と承認で分ける器官。
選択したfile metadataをtype/size/hash/malwareで検証し、presigned intentのpreviewを承認して保存する。
入力 → 状態 → 出力
- 入力validated JSON payload
- 状態engine-owned durable slice
- 承認必要な外部 / 不可逆操作だけ
- 出力result / receipt / explicit error
- 回復quarantineはfinalizeを止める。削除はuploadと別の承認連鎖で、失敗はretry対象として残る。
保存状態はAction Coreのfilesystem state store内の capabilities sliceとして再起動可能なplain dataで保持される。functionや秘密値をstateへ保存しない。
全Action
以下はAction Registryに実在するF5_Storage_Uploadの全actionである。クリックでpayload境界、状態、出力、回復を開ける。
capability.storage.bindBind storagelocal or validated transition
- payload
provider- 状態
- unbound → configured / ready
- result
- Capability engine の
okresult、または明示的な validation / provider error。plan・receipt・stateは持続sliceへ返る。 - recovery
- error codeと状態を残し、必要に応じて再計画・再承認・retryへ戻る。
capability.storage.selectSelect uploadlocal or validated transition
- payload
ownerIdobjectKeymimeTypecontentsizeBytes- 状態
- state transition defined by the capability engine
- result
- Capability engine の
okresult、または明示的な validation / provider error。plan・receipt・stateは持続sliceへ返る。 - recovery
- error codeと状態を残し、必要に応じて再計画・再承認・retryへ戻る。
capability.storage.validateValidate uploadlocal or validated transition
- payload
uploadIdsubjectId- 状態
- state transition defined by the capability engine
- result
- Capability engine の
okresult、または明示的な validation / provider error。plan・receipt・stateは持続sliceへ返る。 - recovery
- error codeと状態を残し、必要に応じて再計画・再承認・retryへ戻る。
capability.storage.plan_uploadPlan uploadreversible preparation
- payload
uploadId- 状態
- durable plan → approval_required
- result
- Capability engine の
okresult、または明示的な validation / provider error。plan・receipt・stateは持続sliceへ返る。 - recovery
- error codeと状態を残し、必要に応じて再計画・再承認・retryへ戻る。
capability.storage.arm_uploadArm uploadreversible preparation
- payload
uploadPlanId- 状態
- approval_required → armed
- result
- Capability engine の
okresult、または明示的な validation / provider error。plan・receipt・stateは持続sliceへ返る。 - recovery
- error codeと状態を残し、必要に応じて再計画・再承認・retryへ戻る。
capability.storage.execute_uploadExecute uploadapproval boundary / external effect
- payload
uploadPlanId- 状態
- armed → visible provider/result state
- result
- Capability engine の
okresult、または明示的な validation / provider error。plan・receipt・stateは持続sliceへ返る。 - recovery
- 実行前にarm状態を要求する。失敗はengineが保持し、同一keyは重複実行を防ぐ。
capability.storage.plan_deletionPlan deletionreversible preparation
- payload
uploadId- 状態
- durable plan → approval_required
- result
- Capability engine の
okresult、または明示的な validation / provider error。plan・receipt・stateは持続sliceへ返る。 - recovery
- error codeと状態を残し、必要に応じて再計画・再承認・retryへ戻る。
capability.storage.arm_deletionArm deletionreversible preparation
- payload
deletionPlanId- 状態
- approval_required → armed
- result
- Capability engine の
okresult、または明示的な validation / provider error。plan・receipt・stateは持続sliceへ返る。 - recovery
- error codeと状態を残し、必要に応じて再計画・再承認・retryへ戻る。
capability.storage.execute_deletionExecute deletionapproval boundary / external effect
- payload
deletionPlanId- 状態
- armed → visible provider/result state
- result
- Capability engine の
okresult、または明示的な validation / provider error。plan・receipt・stateは持続sliceへ返る。 - recovery
- 実行前にarm状態を要求する。失敗はengineが保持し、同一keyは重複実行を防ぐ。
Capability Spec
F5 Storage / Upload — Capability Spec
Provider-independent object upload lifecycle with size/type/hash validation, presigned intent contracts, malware quarantine, ownership authorization, idempotent finalize, and separate deletion approval. Supabase Storage and R2 binding contracts (mock only).
Upload States
| State | Meaning |
|---|---|
selected | File metadata chosen locally. |
validated | Size, type, hash, malware scan passed. |
planned | Upload plan recorded. |
approval_required | Awaiting human approval before finalize. |
uploading | Provider finalize in flight. |
stored | Durable object receipt. |
failed | Upload failure preserved for retry. |
deleted | Object removed after separate deletion approval. |
Malware States
| State | Meaning |
|---|---|
clean | No signature match. |
quarantined | Signature matched; upload blocked. |
rejected | Operator rejected quarantined object. |
Actions
| Action | Flow |
|---|---|
bind | Configure Supabase Storage or R2 binding |
select | Record file metadata (selected) |
validate | Size/type/hash/malware + ownership check |
plan_upload | Create presigned intent + upload plan with preview |
arm_upload | Explicit human approval |
execute_upload | Armed → provider mock finalize; idempotent |
plan_deletion | Separate deletion plan with preview |
arm_deletion | Explicit deletion approval |
execute_deletion | Armed → provider mock delete |
Boundaries
- No live upload: plan → approval → execute only
- Deletion requires separate approval chain
- Malware/quarantine blocks upload finalize
- Ownership enforced before validate and execute
- Idempotency key prevents duplicate finalize/delete
Environment Names (values never in repo)
| Name | Role |
|---|---|
SUPABASE_URL | Supabase project URL reference |
SUPABASE_STORAGE_BUCKET | Bucket name |
MIKAAIR_STORAGE_MAX_BYTES | Max upload size |
MIKAAIR_STORAGE_ALLOWED_TYPES | Comma-separated MIME allowlist |
MIKAAIR_STORAGE_MALWARE_SIGNATURES | Comma-separated mock signatures |
R2_BUCKET_NAME | Cloudflare R2 bucket |
R2_ACCOUNT_ID | R2 account reference |
Provider Binding
Reference adapters: binding/adapter_contract.mjs (Supabase Storage + R2 mocks). No network I/O.
binding / secret boundary
provider設定はbinding templateから参照する。環境変数は名前だけを扱い、値はsource repository・画面・reportに書かない。
| 環境変数名 | 扱い |
|---|---|
SUPABASE_URL | configuration reference — 値は表示・保存しない |
SUPABASE_STORAGE_BUCKET | configuration reference — 値は表示・保存しない |
MIKAAIR_STORAGE_MAX_BYTES | configuration reference — 値は表示・保存しない |
MIKAAIR_STORAGE_ALLOWED_TYPES | configuration reference — 値は表示・保存しない |
MIKAAIR_STORAGE_MALWARE_SIGNATURES | configuration reference — 値は表示・保存しない |
R2_BUCKET_NAME | configuration reference — 値は表示・保存しない |
R2_ACCOUNT_ID | configuration reference — 値は表示・保存しない |
quarantineはfinalizeを止める。削除はuploadと別の承認連鎖で、失敗はretry対象として残る。
source trace
../MikaAir LIGHTNESS/F_BUS_Capability/F5_Storage_Upload/spec/capability_spec.md 0376821188c5../MikaAir LIGHTNESS/F_BUS_Capability/F5_Storage_Upload/binding/binding_manifest.template.json f136635d5c06../MikaAir LIGHTNESS/F_BUS_Capability/F5_Storage_Upload/agent.md c34a891fc52a../MikaAir LIGHTNESS/F_BUS_Capability/runtime_bridge.mjs 7e7384638a41../MikaAir LIGHTNESS/F_BUS_Capability/action_surface.mjs e5bae5f48648../MikaAir LIGHTNESS/A_BUS_Action_Core/A2_State_Store/filesystem_store.mjs b1cc32d3f456../MikaAir LIGHTNESS/F_BUS_Capability/F5_Storage_Upload/contract/index.mjs a140a1d71870../MikaAir LIGHTNESS/F_BUS_Capability/F5_Storage_Upload/engine.mjs f270767c9da2