-- =============================================================================
-- Asset Management — tasks INSERT (pippa_task_manager.tasks)
-- Single-statement; view_order auto-appends after MAX(view_order) for project_id=1
-- Schema-first: AST-SCHEMA-MIG owns all V1 CREATE TABLE migrations
-- project_id=1, project_module_id=24, estimate_hours=3.00 each
-- =============================================================================
-- If re-run fails on branch_name unique: delete prior Asset rows first, e.g.
--   DELETE FROM tasks WHERE project_id = 1 AND branch_name LIKE '%asset%';
--   (or delete by the specific branch_name list)
-- =============================================================================

INSERT INTO `tasks` (
  `project_id`,
  `project_module_id`,
  `title`,
  `branch_name`,
  `view_order`,
  `type`,
  `description`,
  `estimate_hours`,
  `status`,
  `priority`,
  `due_date`,
  `qa_status`,
  `qa_comment`,
  `created_at`,
  `updated_at`
)
SELECT
  1,
  24,
  v.title,
  v.branch_name,
  (SELECT COALESCE(MAX(t.view_order), 0) FROM `tasks` t WHERE t.project_id = 1) + v.ord AS view_order,
  v.type,
  v.description,
  3.00,
  'todo',
  v.priority,
  NULL,
  NULL,
  NULL,
  NOW(),
  NOW()
FROM (
  SELECT 1 AS ord, 'Phase 0 Plan Review & Sign-off' AS title, 'docs-asset-phase0-signoff' AS branch_name, 'Spike' AS type,  '<h3>Summary</h3><p>As a product/tech owner, I want the Phase 0 plan formally signed so that implementation does not start on ambiguous scope.</p>
<h3>Task serial</h3><p><code>AST-1.0.1 — Phase 0 Plan Review &amp; Sign-off</code> · Spike</p>
<h3>Depends on</h3><p>—</p>
<h3>Related tables / schema</h3>
<p>No new tables. References plan §A–N and WBS 1.0.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Implementation is blocked until this card is Done.</li>
<li>Changes to scope after sign-off require a new decision note.</li>
</ul>
<h3>STOP gate</h3><p>Plan accepted or change list published.</p>
<h3>Task scope</h3><p>Review ASSET_MANAGEMENT_IMPLEMENTATION_PLAN.md and ASSET_MANAGEMENT_WBS.md. Record sign-off in the plan header. Do not write application code.</p>
<h3>Definition of done</h3>
<ul>
<li>Decision/doc published and linked from docs/asset-management/.</li>
<li>STOP gate signed: Plan accepted or change list published.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 2 AS ord, 'Section N Decisions Log' AS title, 'docs-asset-section-n-decisions' AS branch_name, 'Spike' AS type,  '<h3>Summary</h3><p>As a tech lead, I want every Section N ambiguity decided and written down so later phases do not invent rules.</p>
<h3>Task serial</h3><p><code>AST-1.0.2 — Section N Decisions Log</code> · Spike</p>
<h3>Depends on</h3><p>AST-1.0.1</p>
<h3>Related tables / schema</h3>
<p>No new tables. Decision log in docs/asset-management/.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Legacy: one-way bridge + freeze writer.</li>
<li>Item master owner = Asset.</li>
<li>Locations under work_locations.</li>
<li>Serial policy.</li>
<li>Proxy handover.</li>
<li>Adjustment approval default.</li>
<li>Temporary service providers.</li>
<li>Overlapping warranty.</li>
<li>Import template at 1.8 STOP.</li>
<li>No depreciation in Asset.</li>
<li>Negative stock hard-blocked.</li>
</ul>
<h3>STOP gate</h3><p>All Phase 1 blockers decided (item master owner, location grain).</p>
<h3>Task scope</h3><p>Create/update DECISIONS.md with each decision, owner, date, and unblocked phase. Phase 1 blockers must be Done.</p>
<h3>Definition of done</h3>
<ul>
<li>Decision/doc published and linked from docs/asset-management/.</li>
<li>STOP gate signed: All Phase 1 blockers decided (item master owner, location grain).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 3 AS ord, 'Phase STOP Gate Process' AS title, 'docs-asset-stop-gates' AS branch_name, 'Spike' AS type,  '<h3>Summary</h3><p>As a tech lead, I want a repeatable STOP checklist per phase so work does not silently roll into the next phase.</p>
<h3>Task serial</h3><p><code>AST-1.0.3 — Phase STOP Gate Process</code> · Spike</p>
<h3>Depends on</h3><p>AST-1.0.1</p>
<h3>Related tables / schema</h3>
<p>None.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>No phase starts without previous STOP Done.</li>
<li>STOP evidence: demo notes or test IDs.</li>
</ul>
<h3>Task scope</h3><p>Document STOP checklist template and attach to WBS. No code.</p>
<h3>Definition of done</h3>
<ul>
<li>Decision/doc published and linked from docs/asset-management/.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 4 AS ord, 'Release & Rollback Coordination' AS title, 'docs-asset-release-rollback' AS branch_name, 'Spike' AS type,  '<h3>Summary</h3><p>As a release owner, I want rollback notes per phase so production enablement is reversible.</p>
<h3>Task serial</h3><p><code>AST-1.0.4 — Release &amp; Rollback Coordination</code> · Spike</p>
<h3>Depends on</h3><p>AST-1.0.1</p>
<h3>Related tables / schema</h3>
<p>References schema file; no DDL here.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Prefer disable module/flag over destructive drops when data exists.</li>
<li>Ledger/assignment rows not hard-deleted without approval.</li>
</ul>
<h3>Task scope</h3><p>Write release order and rollback per phase in docs. Coordinate with AST-1.12.0.</p>
<h3>Definition of done</h3>
<ul>
<li>Decision/doc published and linked from docs/asset-management/.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 5 AS ord, 'Full V1 Database Schema Lock (DDL Doc)' AS title, 'docs-asset-database-schema' AS branch_name, 'Spike' AS type,  '<h3>Summary</h3><p>As the backend team, I want one locked DDL document for all V1 Asset tables so migrations do not invent columns.</p>
<h3>Task serial</h3><p><code>AST-SCHEMA-1 — Full V1 Database Schema Lock (DDL Doc)</code> · Spike</p>
<h3>Depends on</h3><p>AST-1.0.2 (Phase 1 decisions)</p>
<h3>Related tables / schema</h3>
<p>All V1 tables listed in ASSET_MANAGEMENT_DATABASE_SCHEMA.md (see AST-SCHEMA-MIG for migrations).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>No second table named assets.</li>
<li>No soft deletes on ledger/assignment/verification lines.</li>
<li>Unique constraints and FKs as in schema file.</li>
<li>Any DDL change updates the schema doc BEFORE AST-SCHEMA-MIG (or a follow-up migration task).</li>
</ul>
<h3>Notes</h3><p>Migrations are centralized in AST-SCHEMA-MIG. Feature cards must not ship domain CREATE TABLE migrations.</p>
<h3>STOP gate</h3><p>Schema DDL accepted.</p>
<h3>Task scope</h3><p>Review and lock ASSET_MANAGEMENT_DATABASE_SCHEMA.md. This card does NOT create Laravel migrations — that is AST-SCHEMA-MIG only.</p>
<h3>Definition of done</h3>
<ul>
<li>Decision/doc published and linked from docs/asset-management/.</li>
<li>STOP gate signed: Schema DDL accepted.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 6 AS ord, 'Asset Module Skeleton — Backend' AS title, 'feature-asset-module-skeleton' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As a developer, I want the nwidart Asset module scaffolded so later stories and migrations have a home.</p>
<h3>Task serial</h3><p><code>AST-1.1.1 — Asset Module Skeleton — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.0.2, AST-SCHEMA-1</p>
<h3>Related tables / schema</h3>
<p>No domain tables in this card. Domain migrations = AST-SCHEMA-MIG.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Module name Asset, alias asset.</li>
<li>API prefix api/v1/asset, route name api.asset.</li>
<li>Do not enable writes to Employee assets tables.</li>
<li>Do not create domain table migrations here.</li>
</ul>
<h3>Task scope</h3><p>module:make Asset, enable in modules_statuses.json, RouteServiceProvider, empty ServiceProvider bindings, health route behind auth. Follow module-development-standard.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 7 AS ord, 'Asset V1 Full Schema Migrations — Backend' AS title, 'feature-asset-v1-schema-migrations' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As a backend developer, I want one migration set that creates all V1 Asset/Inventory tables so feature cards never invent schema.</p>
<h3>Task serial</h3><p><code>AST-SCHEMA-MIG — Asset V1 Full Schema Migrations — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.1.1, AST-SCHEMA-1</p>
<h3>Related tables / schema</h3>
<p>Creates ALL tables:</p>
<ul>
<li><code>asset_categories</code></li>
<li><code>asset_units</code></li>
<li><code>asset_items</code></li>
<li><code>asset_attribute_definitions</code></li>
<li><code>asset_attribute_options</code></li>
<li><code>asset_item_attribute_values</code></li>
<li><code>asset_locations</code></li>
<li><code>serialized_assets</code></li>
<li><code>serialized_asset_attribute_values</code></li>
<li><code>asset_tags</code></li>
<li><code>asset_tag_events</code></li>
<li><code>inventory_transactions</code></li>
<li><code>inventory_balances</code></li>
<li><code>asset_receipt_inbox</code></li>
<li><code>serialized_asset_assignments</code></li>
<li><code>asset_handovers</code></li>
<li><code>verification_sessions</code></li>
<li><code>verification_lines</code></li>
<li><code>asset_transfers</code></li>
<li><code>asset_disposals</code></li>
<li><code>asset_write_offs</code></li>
<li><code>inventory_adjustments</code></li>
<li><code>inventory_adjustment_lines</code></li>
<li><code>asset_finance_events</code></li>
<li><code>asset_service_providers</code></li>
<li><code>asset_warranties</code></li>
<li><code>asset_service_contracts</code></li>
<li><code>asset_service_contract_assets</code></li>
<li><code>asset_service_contract_files</code></li>
<li><code>asset_import_batches</code></li>
<li><code>asset_import_rows</code></li>
<li><code>asset_service_events</code></li>
</ul>
<p>Out of scope for this card:</p>
<ul>
<li>ALTER on Employee <code>employee_assets</code> (AST-1.4.2 bridge only)</li>
<li>Measured performance indexes (AST-1.11.6)</li>
</ul>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Match ASSET_MANAGEMENT_DATABASE_SCHEMA.md exactly.</li>
<li>company_id + FKs + uniques as documented.</li>
<li>No table named assets.</li>
<li>Do not modify Employee assets/employee_assets.</li>
<li>Prefer one ordered migration series under Modules/Asset/database/migrations.</li>
<li>down() must drop in safe FK order.</li>
<li>Empty tables only — no data backfill.</li>
</ul>
<h3>Notes</h3><p>After this card, feature BE cards use existing tables only (models/repos/services/APIs). No duplicate CREATE TABLE.</p>
<h3>STOP gate</h3><p>All V1 Asset tables exist in DB; rollback works; schema doc still matches.</p>
<h3>Task scope</h3><p>Implement Laravel migrations for every V1 Asset table listed in the schema doc. Register migrations via Asset module provider. Verify migrate + migrate:rollback. Eloquent models may be stubbed here or in feature cards — but CREATE TABLE belongs only here.</p>
<h3>Definition of done</h3>
<ul>
<li>All V1 Asset tables migrated and rollback-safe.</li>
<li>migrate/rollback verified in local/CI.</li>
<li>No second table named assets; Employee assets untouched.</li>
<li>FKs/uniques match ASSET_MANAGEMENT_DATABASE_SCHEMA.md.</li>
<li>STOP gate signed: All V1 Asset tables exist in DB; rollback works; schema doc still matches.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 8 AS ord, 'Asset Permissions Seed (actions.php)' AS title, 'feature-asset-permissions-seed' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As an admin, I want Asset module actions registered so RBAC can gate every Asset screen.</p>
<h3>Task serial</h3><p><code>AST-1.1.2 — Asset Permissions Seed (actions.php)</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.1.1</p>
<h3>Related tables / schema</h3>
<p>Uses platform actions / module_actions / permissions sync — no domain tables.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Naming asset.{section}.{action}.</li>
<li>Seed items.view/manage, assets.*, inventory.*, verification.*, handover.*, contracts.*, import.*, tags.*, finance.view, menu-view.</li>
<li>Sync via existing action sync command.</li>
</ul>
<h3>Task scope</h3><p>Add asset module section to backend/config/actions.php. Run sync. Feature test that permissions exist. No UI yet.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 9 AS ord, 'Asset Categories — Backend' AS title, 'feature-asset-categories-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As an asset manager, I want category CRUD with a tree so items can be classified.</p>
<h3>Task serial</h3><p><code>AST-1.1.3 — Asset Categories — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-SCHEMA-MIG, AST-1.1.2</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Table: <code>asset_categories</code> (already migrated)<br>
Columns</p>
<ul>
<li>id — BIGINT UNSIGNED PK</li>
<li>company_id — BIGINT UNSIGNED FK</li>
<li>name — VARCHAR(150)</li>
<li>code — VARCHAR(50)</li>
<li>parent_id — BIGINT UNSIGNED NULL</li>
<li>status — ENUM active|inactive</li>
<li>created_by / updated_by</li>
<li>timestamps</li>
</ul>
<p>Unique: (company_id, code).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Category code unique per company.</li>
<li>Parent same company.</li>
<li>Cycle blocked.</li>
<li>Restrict delete when children/items exist.</li>
<li>Inactive not selectable on new items.</li>
</ul>
<h3>Task scope</h3><p>Model, repository+interface, service+interface, form requests, controller, resources, routes. Permissions asset.items.manage / view. Feature tests for unique, cycle, IDOR. Do not create migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 10 AS ord, 'Asset Units of Measure — Backend' AS title, 'feature-asset-units-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As an asset manager, I want units of measure so quantity items have a consistent unit.</p>
<h3>Task serial</h3><p><code>AST-1.1.4 — Asset Units of Measure — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-SCHEMA-MIG</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Table: <code>asset_units</code> (already migrated)</p>
<ul>
<li>id, company_id, name, code, decimal_places, status, created_by, updated_by, timestamps</li>
</ul>
<p>Unique: (company_id, code).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Code unique per company.</li>
<li>decimal_places &gt;= 0.</li>
<li>Restrict delete when referenced by items.</li>
</ul>
<h3>Task scope</h3><p>Full Service-Repository CRUD API on existing table. Tests for uniqueness and company scope. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 11 AS ord, 'Asset Items + Tracking Mode — Backend' AS title, 'feature-asset-items-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As an asset manager, I want an item master with SERIALIZED or QUANTITY tracking so the catalog drives both asset types.</p>
<h3>Task serial</h3><p><code>AST-1.1.5 — Asset Items + Tracking Mode — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.1.3, AST-1.1.4</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Table: <code>asset_items</code> (already migrated)</p>
<ul>
<li>category_id, unit_id, name, code, tracking_mode ENUM(SERIALIZED|QUANTITY), status, description</li>
</ul>
<p>Unique: (company_id, code).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>tracking_mode immutable once any serialized_asset or inventory_transaction exists.</li>
<li>Item cannot be both modes.</li>
<li>Category and unit active and same company.</li>
</ul>
<h3>Task scope</h3><p>CRUD API + validation on existing table. Enforce immutability in service. Tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 12 AS ord, 'Category Attributes — Backend' AS title, 'feature-asset-attributes-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As an asset manager, I want category-specific custom attributes so laptops and vehicles do not share one flat column set.</p>
<h3>Task serial</h3><p><code>AST-1.1.6 — Category Attributes — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.1.3, AST-1.1.5</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Tables already migrated:</p>
<ul>
<li><code>asset_attribute_definitions</code></li>
<li><code>asset_attribute_options</code></li>
<li><code>asset_item_attribute_values</code></li>
</ul>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Definition code unique per category.</li>
<li>Options required for SELECT/MULTI_SELECT.</li>
<li>Item values must match item category definitions.</li>
<li>Validate by data_type.</li>
<li>Do not invent a platform-wide dynamic field engine.</li>
</ul>
<h3>Task scope</h3><p>CRUD for definitions/options; set/get item attribute values. Validation service. Tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 13 AS ord, 'Asset Locations — Backend' AS title, 'feature-asset-locations-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As an asset manager, I want floor/room/store locations under existing work locations so assets and stock have a physical place.</p>
<h3>Task serial</h3><p><code>AST-1.1.7 — Asset Locations — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-SCHEMA-MIG, AST-1.0.2 (location grain)</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Table: <code>asset_locations</code> (already migrated)</p>
<ul>
<li>work_location_id, branch_id, parent_id, name, code, kind site|floor|room|store, status</li>
</ul>
<p>Unique: (company_id, code).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Do not alter Configuration work_locations schema.</li>
<li>Parent same company and same work_location_id.</li>
<li>Cycle blocked.</li>
<li>Code unique per company.</li>
</ul>
<h3>Task scope</h3><p>CRUD API on existing table. Validate work_location belongs to company. Tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 14 AS ord, 'Asset Masters — Frontend' AS title, 'feature-asset-masters-frontend' AS branch_name, 'Frontend' AS type,  '<h3>Summary</h3><p>As an asset manager, I want UI for categories, units, items, attributes, and locations so I can configure the catalog without API tools.</p>
<h3>Task serial</h3><p><code>AST-1.1.8 — Asset Masters — Frontend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.1.2, AST-1.1.3, AST-1.1.4, AST-1.1.5, AST-1.1.6, AST-1.1.7</p>
<h3>Related tables / schema</h3>
<p>Consumes Phase 1 APIs. No new tables.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Gate with asset.items.view/manage.</li>
<li>Hide inactive options on create forms unless editing.</li>
<li>tracking_mode read-only after immutability applies.</li>
</ul>
<h3>Task scope</h3><p>frontend/src/modules/asset: nav, routes, list/form for category, unit, item, attributes, locations.</p>
<h3>Definition of done</h3>
<ul>
<li>UI covers list/form/empty/loading/error states.</li>
<li>Permission gating matches actions.php.</li>
<li>Follows existing ERPFlow frontend patterns.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 15 AS ord, 'Phase 1 Tests + STOP' AS title, 'test-asset-phase1-stop' AS branch_name, 'QA' AS type,  '<h3>Summary</h3><p>As a tech lead, I want Phase 1 proven and STOP signed so Phase 2 may start.</p>
<h3>Task serial</h3><p><code>AST-1.1.9 — Phase 1 Tests + STOP</code> · QA</p>
<h3>Depends on</h3><p>AST-1.1.8, AST-SCHEMA-MIG</p>
<h3>Related tables / schema</h3>
<p>Phase 1 tables already from AST-SCHEMA-MIG; verify they exist and APIs work.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>No writes to Employee assets tables verified.</li>
<li>Catalog + location grain confirmed.</li>
<li>Schema migrations already applied.</li>
</ul>
<h3>STOP gate</h3><p>Human confirms catalog, location grain, and AST-SCHEMA-MIG complete before feature work continues.</p>
<h3>Task scope</h3><p>Run/complete feature tests for Phase 1. Demo masters UI. Confirm all V1 tables migrated. Sign STOP on WBS 1.1.</p>
<h3>Definition of done</h3>
<ul>
<li>Automated and/or UAT evidence attached; failures fixed or explicitly blocked.</li>
<li>STOP gate signed: Human confirms catalog, location grain, and AST-SCHEMA-MIG complete before feature work continues.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 16 AS ord, 'Serialized Assets Registry — Backend' AS title, 'feature-asset-serialized-registry-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As an asset custodian, I want individually identifiable assets with code, serial, cost, and location so I can manage physical instances.</p>
<h3>Task serial</h3><p><code>AST-1.2.1 — Serialized Assets Registry — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.1.9, AST-SCHEMA-MIG</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Table: <code>serialized_assets</code> (already migrated)</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Item must be SERIALIZED.</li>
<li>Asset code unique per company.</li>
<li>Serial unique per company+item when present.</li>
<li>Quantity items rejected.</li>
<li>Do not implement assignment/transfer/dispose APIs here.</li>
</ul>
<h3>Task scope</h3><p>CRUD on existing table: create/update/view/list with filters. Cost fields gated by asset.finance.view. Activity log. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 17 AS ord, 'Serialized Asset Status Machine + Condition — Backend' AS title, 'feature-asset-status-machine-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As a custodian, I want controlled status and condition transitions so assets do not jump into illegal states.</p>
<h3>Task serial</h3><p><code>AST-1.2.2 — Serialized Asset Status Machine + Condition — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.2.1</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Uses serialized_assets.status and condition columns (table already migrated).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Allowed: RECEIVED→AVAILABLE, AVAILABLE↔UNDER_MAINTENANCE, AVAILABLE→LOST→AVAILABLE, AVAILABLE→RETIRED.</li>
<li>Deferred: ASSIGNED, transfer, dispose, write-off APIs.</li>
<li>Condition: NEW|GOOD|FAIR|POOR|DAMAGED|UNUSABLE.</li>
</ul>
<h3>Task scope</h3><p>StatusTransition service + guards/endpoints. Tests for illegal jumps. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 18 AS ord, 'Serialized Asset Attribute Values — Backend' AS title, 'feature-asset-instance-attributes-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As a custodian, I want instance-level attribute values so each laptop can store CPU/RAM etc.</p>
<h3>Task serial</h3><p><code>AST-1.2.3 — Serialized Asset Attribute Values — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.2.1, AST-1.1.6</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Table: <code>serialized_asset_attribute_values</code> (already migrated)</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Definitions must belong to asset item category.</li>
<li>Required attributes on create when category requires.</li>
<li>Changes logged to activity_logs.</li>
</ul>
<h3>Task scope</h3><p>Set/get values API. Validation. Tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 19 AS ord, 'Asset Tags Issue / Replace / Void — Backend' AS title, 'feature-asset-tags-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As a custodian, I want QR/barcode tags with replace history so physical stickers resolve to the correct asset.</p>
<h3>Task serial</h3><p><code>AST-1.2.4 — Asset Tags Issue / Replace / Void — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.2.1</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Tables already migrated: <code>asset_tags</code>, <code>asset_tag_events</code></p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Token opaque; do not encode full asset payload.</li>
<li>One active tag per asset — replace in same transaction.</li>
<li>Inactive/replaced token must not resolve.</li>
</ul>
<h3>Task scope</h3><p>Issue/replace/void services + APIs. Permission asset.tags.issue. Tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 20 AS ord, 'QR Library Selection + Image Endpoint — Backend' AS title, 'feature-asset-qr-image-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As a custodian, I want a QR image for a tag so I can print stickers.</p>
<h3>Task serial</h3><p><code>AST-1.2.5 — QR Library Selection + Image Endpoint — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.2.4</p>
<h3>Related tables / schema</h3>
<p>Uses asset_tags.token only (table already migrated).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Image encodes token or URL containing token only.</li>
<li>Auth required.</li>
<li>Document chosen composer package in PR.</li>
</ul>
<h3>Task scope</h3><p>Select library, composer dependency, GET image endpoint for active tag. Tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 21 AS ord, 'Label Print Single + Bulk — Backend/Frontend' AS title, 'feature-asset-label-print' AS branch_name, 'Fullstack' AS type,  '<h3>Summary</h3><p>As a custodian, I want single and bulk label print so tagging drives are efficient.</p>
<h3>Task serial</h3><p><code>AST-1.2.6 — Label Print Single + Bulk — Backend/Frontend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.2.5</p>
<h3>Related tables / schema</h3>
<p>Uses tags + serialized assets (already migrated).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Only active tags.</li>
<li>Bulk limited (document max batch size).</li>
<li>Print layout shows asset_code + QR.</li>
</ul>
<h3>Task scope</h3><p>Print view/PDF or browser print for one and many assets.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 22 AS ord, 'Authenticated Scan Resolve — Backend' AS title, 'feature-asset-scan-resolve-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As an authorized user, I want scanning a tag to return asset details filtered by my permissions.</p>
<h3>Task serial</h3><p><code>AST-1.2.7 — Authenticated Scan Resolve — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.2.4, AST-1.1.2</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Resolve via asset_tags.token → serialized_assets (already migrated).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Auth required.</li>
<li>Permission-aware response fields.</li>
<li>Hide cost without asset.finance.view.</li>
<li>Void/replaced → not found.</li>
</ul>
<h3>Task scope</h3><p>GET scan endpoint + permission-aware Resource. Tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 23 AS ord, 'Serialized Assets List/Detail/Scan — Frontend' AS title, 'feature-asset-serialized-frontend' AS branch_name, 'Frontend' AS type,  '<h3>Summary</h3><p>As a custodian, I want list, detail, and scan pages for serialized assets.</p>
<h3>Task serial</h3><p><code>AST-1.2.8 — Serialized Assets List/Detail/Scan — Frontend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.2.1, AST-1.2.2, AST-1.2.3, AST-1.2.5, AST-1.2.7</p>
<h3>Related tables / schema</h3>
<p>Consumes 1.2 APIs. No new tables.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Permission gating.</li>
<li>Cost fields hidden without finance.view.</li>
<li>Scan page camera/manual token.</li>
</ul>
<h3>Task scope</h3><p>Asset list/filters, detail, scan page, print actions.</p>
<h3>Definition of done</h3>
<ul>
<li>UI covers list/form/empty/loading/error states.</li>
<li>Permission gating matches actions.php.</li>
<li>Follows existing ERPFlow frontend patterns.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 24 AS ord, 'Phase 2 Tests + STOP' AS title, 'test-asset-phase2-stop' AS branch_name, 'QA' AS type,  '<h3>Summary</h3><p>As a tech lead, I want Phase 2 STOP so Phase 3 feature work may proceed.</p>
<h3>Task serial</h3><p><code>AST-1.2.9 — Phase 2 Tests + STOP</code> · QA</p>
<h3>Depends on</h3><p>AST-1.2.8</p>
<h3>Related tables / schema</h3>
<p>Phase 2 tables already from AST-SCHEMA-MIG.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Serial policy confirmed.</li>
<li>Assignment/transfer/dispose APIs still absent.</li>
</ul>
<h3>STOP gate</h3><p>Confirm status list and serial mandatory/exceptions.</p>
<h3>Task scope</h3><p>Regression tests + demo create asset, print tag, scan. Sign STOP.</p>
<h3>Definition of done</h3>
<ul>
<li>Automated and/or UAT evidence attached; failures fixed or explicitly blocked.</li>
<li>STOP gate signed: Confirm status list and serial mandatory/exceptions.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 25 AS ord, 'Inventory Transactions Ledger — Backend' AS title, 'feature-asset-inventory-transactions-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As inventory, I want an append-only stock ledger so quantity changes are auditable.</p>
<h3>Task serial</h3><p><code>AST-1.3.1 — Inventory Transactions Ledger — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.1.9, AST-SCHEMA-MIG</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Table: <code>inventory_transactions</code> (already migrated)<br>
Types include RECEIPT|ISSUE|TRANSFER_OUT|TRANSFER_IN|RETURN|ADJUSTMENT|DAMAGE|DISPOSAL|OPENING_BALANCE.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Append-only — no UPDATE/DELETE in application.</li>
<li>Item must be QUANTITY.</li>
<li>Idempotency key required and unique.</li>
</ul>
<h3>Task scope</h3><p>Model + repository insert-only methods on existing table. Pair with 1.3.2/1.3.4 for balance updates. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 26 AS ord, 'Inventory Balances Projection — Backend' AS title, 'feature-asset-inventory-balances-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As inventory, I want a locked balance projection per item+location so stock queries are fast and safe.</p>
<h3>Task serial</h3><p><code>AST-1.3.2 — Inventory Balances Projection — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.3.1</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Table: <code>inventory_balances</code> (already migrated)</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Update only inside transaction with lockForUpdate after ledger insert.</li>
<li>Reject if quantity+delta &lt; 0.</li>
<li>reserved_quantity stays 0 in V1.</li>
<li>Never update quantity without a ledger row.</li>
</ul>
<h3>Task scope</h3><p>Balance repository with lock helpers on existing table. Unit tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 27 AS ord, 'Asset Receipt Inbox — Backend' AS title, 'feature-asset-receipt-inbox-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As the system, I want an idempotent receipt inbox so manual import and future GRN cannot double-post.</p>
<h3>Task serial</h3><p><code>AST-1.3.3 — Asset Receipt Inbox — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.3.1</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Table: <code>asset_receipt_inbox</code> (already migrated)</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Duplicate source key returns existing result.</li>
<li>Applied rows immutable.</li>
</ul>
<h3>Task scope</h3><p>Inbox repository on existing table for AssetReceiptService. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 28 AS ord, 'Inventory Ledger Service — Backend' AS title, 'feature-asset-ledger-service-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As inventory, I want one service that posts receipt/issue/return/damage/disposal/opening movements correctly.</p>
<h3>Task serial</h3><p><code>AST-1.3.4 — Inventory Ledger Service — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.3.1, AST-1.3.2</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Writes inventory_transactions + updates inventory_balances (tables already migrated).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Single DB transaction: lock balance → insert ledger → update projection.</li>
<li>Negative stock blocked.</li>
<li>Serialized items rejected.</li>
<li>OPENING_BALANCE supported for later import.</li>
</ul>
<h3>Task scope</h3><p>InventoryLedgerServiceInterface + implementation. Activity log. Feature tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 29 AS ord, 'Inventory Location Transfer — Backend' AS title, 'feature-asset-inventory-transfer-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As inventory, I want stock transfers between locations that cannot deadlock or go negative.</p>
<h3>Task serial</h3><p><code>AST-1.3.5 — Inventory Location Transfer — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.3.4</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Posts TRANSFER_OUT + TRANSFER_IN on existing ledger/balance tables.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Lock both balance rows in ascending id order.</li>
<li>Source cannot go negative.</li>
<li>Both rows same transaction.</li>
</ul>
<h3>Task scope</h3><p>Transfer API + service. Concurrency tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 30 AS ord, 'AssetReceiptService (Shared) — Backend' AS title, 'feature-asset-receipt-service-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As the platform, I want one receipt application service for manual, import, and future GRN.</p>
<h3>Task serial</h3><p><code>AST-1.3.6 — AssetReceiptService (Shared) — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.3.3, AST-1.3.4, AST-1.2.1</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Uses inbox + serialized_assets OR ledger (all already migrated).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>SERIALIZED: create N assets RECEIVED.</li>
<li>QUANTITY: ledger RECEIPT.</li>
<li>Idempotent via inbox unique key.</li>
<li>Never open Procurement tables.</li>
</ul>
<h3>Task scope</h3><p>AssetReceiptServiceInterface. Apply inbox line. Tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 31 AS ord, 'Manual Receipt — Backend + Frontend' AS title, 'feature-asset-manual-receipt' AS branch_name, 'Fullstack' AS type,  '<h3>Summary</h3><p>As a custodian, I want to manually receive items into Asset/Inventory because Procurement/GRN does not exist yet.</p>
<h3>Task serial</h3><p><code>AST-1.3.7 — Manual Receipt — Backend + Frontend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.3.6</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Creates inbox rows source_type=manual then applies via AssetReceiptService (tables already migrated).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Permission asset.items.manage (or dedicated receive).</li>
<li>Must specify item, location, qty.</li>
</ul>
<h3>Task scope</h3><p>API + UI form. Show resulting asset codes or new balance. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 32 AS ord, 'Stock by Location — Frontend' AS title, 'feature-asset-stock-by-location-frontend' AS branch_name, 'Frontend' AS type,  '<h3>Summary</h3><p>As inventory, I want to see on-hand quantity by item and location.</p>
<h3>Task serial</h3><p><code>AST-1.3.8 — Stock by Location — Frontend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.3.2, AST-1.1.2</p>
<h3>Related tables / schema</h3>
<p>Reads inventory_balances (already migrated).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>asset.inventory.view required.</li>
<li>Paginated.</li>
</ul>
<h3>Task scope</h3><p>List/filter UI + API if list endpoint missing. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>UI covers list/form/empty/loading/error states.</li>
<li>Permission gating matches actions.php.</li>
<li>Follows existing ERPFlow frontend patterns.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 33 AS ord, 'Phase 3 Tests (Concurrency) + STOP' AS title, 'test-asset-phase3-stop' AS branch_name, 'QA' AS type,  '<h3>Summary</h3><p>As a tech lead, I want concurrency-safe stock proven before assignment/verification.</p>
<h3>Task serial</h3><p><code>AST-1.3.9 — Phase 3 Tests (Concurrency) + STOP</code> · QA</p>
<h3>Depends on</h3><p>AST-1.3.5, AST-1.3.7, AST-1.3.8</p>
<h3>Related tables / schema</h3>
<p>Phase 3 tables already from AST-SCHEMA-MIG.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Negative stock hard-blocked confirmed.</li>
<li>Unit cost informational only.</li>
</ul>
<h3>STOP gate</h3><p>Confirm negative stock policy and informational unit cost.</p>
<h3>Task scope</h3><p>Concurrency tests. Sign STOP.</p>
<h3>Definition of done</h3>
<ul>
<li>Automated and/or UAT evidence attached; failures fixed or explicitly blocked.</li>
<li>STOP gate signed: Confirm negative stock policy and informational unit cost.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 34 AS ord, 'Legacy Asset Data Analysis' AS title, 'spike-asset-legacy-analysis' AS branch_name, 'Spike' AS type,  '<h3>Summary</h3><p>As a tech lead, I want a report of existing assets/employee_assets so the bridge cannot surprise us.</p>
<h3>Task serial</h3><p><code>AST-1.4.1 — Legacy Asset Data Analysis</code> · Spike</p>
<h3>Depends on</h3><p>AST-1.0.2 (legacy decision), AST-1.2.9</p>
<h3>Related tables / schema</h3>
<p>Read-only: Employee assets, employee_assets.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Do not modify legacy tables in this card.</li>
<li>Count open assignments, duplicate codes, orphans.</li>
</ul>
<h3>Task scope</h3><p>SQL/script + findings doc. Input to bridge.</p>
<h3>Definition of done</h3>
<ul>
<li>Decision/doc published and linked from docs/asset-management/.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 35 AS ord, 'Legacy Bridge Migration (One-way Copy)' AS title, 'feature-asset-legacy-bridge-migration' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As a tech lead, I want legacy assets copied into serialized_assets once so the new module becomes source of truth without dual registers.</p>
<h3>Task serial</h3><p><code>AST-1.4.2 — Legacy Bridge Migration (One-way Copy)</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.4.1, AST-1.2.1, AST-SCHEMA-MIG</p>
<h3>Related tables / schema</h3>
<p>Writes serialized_assets (legacy_asset_id). Optional ALTER employee_assets ADD serialized_asset_id — this is the ONLY allowed Employee table change in V1 Asset work.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>One-way copy. Do not delete legacy rows.</li>
<li>Collision fails the batch.</li>
<li>Document item mapping strategy.</li>
<li>Do not recreate Asset domain tables.</li>
</ul>
<h3>Notes</h3><p>Domain CREATE TABLE already done in AST-SCHEMA-MIG. This card is data copy + optional Employee ALTER only.</p>
<h3>Task scope</h3><p>Artisan command + dry-run. Optional nullable FK column on employee_assets only. Tests with fixtures.</p>
<h3>Definition of done</h3>
<ul>
<li>All V1 Asset tables migrated and rollback-safe.</li>
<li>migrate/rollback verified in local/CI.</li>
<li>No second table named assets; Employee assets untouched.</li>
<li>FKs/uniques match ASSET_MANAGEMENT_DATABASE_SCHEMA.md.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 36 AS ord, 'Freeze Old Writer / Repoint Employee AssetTab' AS title, 'feature-asset-freeze-legacy-writer' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As HR/IT, I want the Employee Asset tab to stop creating legacy assets and use the new module so dual assignment cannot happen.</p>
<h3>Task serial</h3><p><code>AST-1.4.3 — Freeze Old Writer / Repoint Employee AssetTab</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.4.2, AST-1.4.4</p>
<h3>Related tables / schema</h3>
<p>May read serialized_assets via port; freeze EmployeeAssetService writes.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Same release as new assignment API.</li>
<li>No dual writers.</li>
<li>Old assign button must not create Employee assets rows.</li>
</ul>
<h3>Task scope</h3><p>Feature-flag or hard switch; AssetTab calls Asset APIs. Same release as AST-1.4.4.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 37 AS ord, 'Asset Assignments — Backend' AS title, 'feature-asset-assignments-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As a custodian, I want to assign a serialized asset to an employee or department with history preserved.</p>
<h3>Task serial</h3><p><code>AST-1.4.4 — Asset Assignments — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.2.9, AST-SCHEMA-MIG, AST-1.0.2 (legacy+proxy decisions)</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Table: <code>serialized_asset_assignments</code> (already migrated)</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Lock serialized_assets row.</li>
<li>Only one open assignment.</li>
<li>Asset must be AVAILABLE (or allowed).</li>
<li>On assign → ASSIGNED.</li>
<li>Department is custody, not location.</li>
</ul>
<h3>Task scope</h3><p>Assign/return services + APIs on existing table. Permission asset.assets.assign. Tests. No CREATE TABLE migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 38 AS ord, 'Asset Handover Acknowledge/Reject/Proxy — Backend' AS title, 'feature-asset-handover-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As an employee, I want to acknowledge receipt of an asset so custody is evidenced; as custodian I need proxy when the employee has no login.</p>
<h3>Task serial</h3><p><code>AST-1.4.5 — Asset Handover Acknowledge/Reject/Proxy — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.4.4</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Table: <code>asset_handovers</code> (already migrated)</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Employee issue requires handover.</li>
<li>Reject leaves ASSIGNED.</li>
<li>Evidence not silently rewritten.</li>
<li>Proxy only with permission + Section N policy.</li>
<li>No e-sign vendor.</li>
</ul>
<h3>Task scope</h3><p>Handover APIs on existing table. Tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 39 AS ord, 'EmployeeDirectoryPort + EmployeeTimelinePort' AS title, 'feature-asset-employee-ports' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As the Asset module, I want ports to Employee so I never import Employee repositories directly.</p>
<h3>Task serial</h3><p><code>AST-1.4.6 — EmployeeDirectoryPort + EmployeeTimelinePort</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.4.4</p>
<h3>Related tables / schema</h3>
<p>No new Asset tables.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Mirror Commissioning context-port pattern.</li>
<li>Timeline asset_assigned/returned.</li>
<li>Exit report reads employment status; no auto-close.</li>
</ul>
<h3>Task scope</h3><p>Integration contracts under Modules/Asset/Integration. Bind in provider. Tests with fake.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 40 AS ord, 'Employee Exit Outstanding Assets Report — Backend' AS title, 'feature-asset-exit-outstanding-report' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As HR, I want a list of outstanding assets for resigned/terminated employees so returns can be chased.</p>
<h3>Task serial</h3><p><code>AST-1.4.7 — Employee Exit Outstanding Assets Report — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.4.4, AST-1.4.6</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Reads assignments (already migrated) joined to employment status.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Report only — no auto return.</li>
<li>Include resigned and terminated.</li>
</ul>
<h3>Task scope</h3><p>API + Resource. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 41 AS ord, 'Employee Self Assets & Handovers — Backend' AS title, 'feature-asset-employee-self-view-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As an employee, I want to see my assigned assets and pending handovers.</p>
<h3>Task serial</h3><p><code>AST-1.4.8 — Employee Self Assets &amp; Handovers — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.4.5</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Filters assignments/handovers (already migrated) by authenticated employee.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Own rows only unless elevated permission.</li>
<li>Hide cost fields.</li>
</ul>
<h3>Task scope</h3><p>Self endpoints. IDOR tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 42 AS ord, 'Assign / Return / Acknowledge — Frontend' AS title, 'feature-asset-assignment-frontend' AS branch_name, 'Frontend' AS type,  '<h3>Summary</h3><p>As a custodian and employee, I want UI to assign, return, and acknowledge assets.</p>
<h3>Task serial</h3><p><code>AST-1.4.9 — Assign / Return / Acknowledge — Frontend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.4.3, AST-1.4.5, AST-1.4.7, AST-1.4.8</p>
<h3>Related tables / schema</h3>
<p>Consumes 1.4 APIs.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Permission gating.</li>
<li>Show pending handover actions to employee.</li>
</ul>
<h3>Task scope</h3><p>Assign/return flows, handover UI, exit outstanding list.</p>
<h3>Definition of done</h3>
<ul>
<li>UI covers list/form/empty/loading/error states.</li>
<li>Permission gating matches actions.php.</li>
<li>Follows existing ERPFlow frontend patterns.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 43 AS ord, 'Phase 4 Tests + STOP (Real Employee Check)' AS title, 'test-asset-phase4-stop' AS branch_name, 'QA' AS type,  '<h3>Summary</h3><p>As a tech lead, I want one real employee’s legacy assignments appearing once and no dual writer.</p>
<h3>Task serial</h3><p><code>AST-1.4.10 — Phase 4 Tests + STOP (Real Employee Check)</code> · QA</p>
<h3>Depends on</h3><p>AST-1.4.9</p>
<h3>Related tables / schema</h3>
<p>Assignments + handovers already migrated; bridge data verified.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Old assign cannot create second register.</li>
<li>Open assignments still listed after resign.</li>
</ul>
<h3>STOP gate</h3><p>Real employee data check passed.</p>
<h3>Task scope</h3><p>Manual UAT + automated tests. Sign STOP.</p>
<h3>Definition of done</h3>
<ul>
<li>Automated and/or UAT evidence attached; failures fixed or explicitly blocked.</li>
<li>STOP gate signed: Real employee data check passed.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 44 AS ord, 'Verification Sessions — Backend' AS title, 'feature-asset-verification-sessions-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As an auditor, I want verification sessions that snapshot the expected set at start so later movements do not rewrite expectations.</p>
<h3>Task serial</h3><p><code>AST-1.5.1 — Verification Sessions — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.3.9, AST-SCHEMA-MIG</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Table: <code>verification_sessions</code> (already migrated)</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Snapshot expected set when session starts.</li>
<li>Completing does not change stock.</li>
<li>Quantity-only sessions allowed without Phase 4.</li>
</ul>
<h3>Task scope</h3><p>Create/start/cancel session APIs + snapshot builder on existing table. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 45 AS ord, 'Verification Lines + Results — Backend' AS title, 'feature-asset-verification-lines-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As an auditor, I want lines that record found/missing/extra/wrong location/holder/damaged results.</p>
<h3>Task serial</h3><p><code>AST-1.5.2 — Verification Lines + Results — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.5.1</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Table: <code>verification_lines</code> (already migrated)</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Unknown scan → extra.</li>
<li>Wrong location/holder are results, not silent moves.</li>
<li>Uniques per schema.</li>
</ul>
<h3>Task scope</h3><p>Line update APIs. Tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 46 AS ord, 'Scan-to-Verify Flow — Backend' AS title, 'feature-asset-scan-to-verify-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As an auditor, I want to scan a QR inside an open session to mark an asset found.</p>
<h3>Task serial</h3><p><code>AST-1.5.3 — Scan-to-Verify Flow — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.5.2, AST-1.2.7</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Uses tags + verification_lines (already migrated).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Only in_progress sessions.</li>
<li>Permission verification.perform.</li>
<li>Does not change asset location.</li>
</ul>
<h3>Task scope</h3><p>Scan endpoint bound to session_id. Tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 47 AS ord, 'Quantity Stock Count + Variance — Backend' AS title, 'feature-asset-stock-count-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As an auditor, I want to enter physical counts and see variance without changing the balance.</p>
<h3>Task serial</h3><p><code>AST-1.5.4 — Quantity Stock Count + Variance — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.5.2</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Quantity verification_lines (already migrated).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>variance = counted - expected.</li>
<li>Balance unchanged.</li>
</ul>
<h3>Task scope</h3><p>Count entry API. Tests proving balances untouched. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 48 AS ord, 'Verification Complete & Review (Draft Adjustments Only)' AS title, 'feature-asset-verification-review-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As a reviewer, I want to complete a session and create draft inventory adjustments without posting stock.</p>
<h3>Task serial</h3><p><code>AST-1.5.5 — Verification Complete &amp; Review (Draft Adjustments Only)</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.5.3, AST-1.5.4</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>May write inventory_adjustments status=draft (table already migrated by AST-SCHEMA-MIG). Posting remains AST-1.6.4.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Pending lines become missing only on explicit complete.</li>
<li>Draft adjustments must not post ledger.</li>
<li>Posting is AST-1.6.4 only.</li>
</ul>
<h3>Notes</h3><p>inventory_adjustments table already exists from AST-SCHEMA-MIG.</p>
<h3>Task scope</h3><p>Complete + review APIs. Create draft adjustment headers/lines without gateway submit. No CREATE TABLE.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 49 AS ord, 'Verification Session / Scan / Count — Frontend' AS title, 'feature-asset-verification-frontend' AS branch_name, 'Frontend' AS type,  '<h3>Summary</h3><p>As an auditor, I want UI to run a verification session with scan and quantity count.</p>
<h3>Task serial</h3><p><code>AST-1.5.6 — Verification Session / Scan / Count — Frontend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.5.5</p>
<h3>Related tables / schema</h3>
<p>Consumes 1.5 APIs.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Show session start time.</li>
<li>Emphasize complete does not change stock.</li>
</ul>
<h3>Task scope</h3><p>Session list, start wizard, scan UI, quantity count UI, review screen.</p>
<h3>Definition of done</h3>
<ul>
<li>UI covers list/form/empty/loading/error states.</li>
<li>Permission gating matches actions.php.</li>
<li>Follows existing ERPFlow frontend patterns.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 50 AS ord, 'Phase 5 Tests + STOP' AS title, 'test-asset-phase5-stop' AS branch_name, 'QA' AS type,  '<h3>Summary</h3><p>As a tech lead, I want one scan session and one chair count demo with balances unchanged.</p>
<h3>Task serial</h3><p><code>AST-1.5.7 — Phase 5 Tests + STOP</code> · QA</p>
<h3>Depends on</h3><p>AST-1.5.6</p>
<h3>Related tables / schema</h3>
<p>Verification tables already migrated.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Balances unchanged after complete.</li>
</ul>
<h3>STOP gate</h3><p>One scan session + one chair count accepted.</p>
<h3>Task scope</h3><p>UAT + tests. Sign STOP.</p>
<h3>Definition of done</h3>
<ul>
<li>Automated and/or UAT evidence attached; failures fixed or explicitly blocked.</li>
<li>STOP gate signed: One scan session + one chair count accepted.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 51 AS ord, 'Asset Finance Events Outbox — Backend' AS title, 'feature-asset-finance-events-outbox' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As Finance (future), I want an outbox of acquisition/disposal/write_off intents without journals in Asset.</p>
<h3>Task serial</h3><p><code>AST-1.6.5 — Asset Finance Events Outbox — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-SCHEMA-MIG, AST-1.2.1</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Table: <code>asset_finance_events</code> (already migrated)</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>No GL columns.</li>
<li>One event per source document.</li>
<li>Asset status + outbox commit together in executor transaction.</li>
</ul>
<h3>Notes</h3><p>Placed early so dispose/write-off/import can depend on it.</p>
<h3>Task scope</h3><p>Writer service used by disposal/write-off/receipt on existing table. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 52 AS ord, 'Asset Transfer Document + Approval Executor' AS title, 'feature-asset-transfer-approval' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As a custodian, I want asset transfers to go through ERPFlow approval before location/holder changes.</p>
<h3>Task serial</h3><p><code>AST-1.6.1 — Asset Transfer Document + Approval Executor</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.5.7, AST-1.4.10, AST-SCHEMA-MIG</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Table: <code>asset_transfers</code> (already migrated) + platform approval_requests.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Use ApprovalGateway; if off, onApproved immediate.</li>
<li>Executor re-checks under lock; stale fails.</li>
<li>Pending blocks second transfer.</li>
<li>Use existing approver resolver.</li>
</ul>
<h3>Task scope</h3><p>Transfer document CRUD, gateway submit, TransferExecutor, register executor. Tests. No CREATE TABLE.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 53 AS ord, 'Asset Disposal Document + Approval Executor' AS title, 'feature-asset-disposal-approval' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As an asset manager, I want disposal requests approved before an asset becomes DISPOSED.</p>
<h3>Task serial</h3><p><code>AST-1.6.2 — Asset Disposal Document + Approval Executor</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.2.2, AST-1.6.5, AST-SCHEMA-MIG</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Table: <code>asset_disposals</code> (already migrated)</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Open assignment must be returned first.</li>
<li>Terminal DISPOSED; double dispose fails.</li>
<li>Writes finance outbox.</li>
</ul>
<h3>Task scope</h3><p>Disposal document + DisposalExecutor. Tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 54 AS ord, 'Asset Write-off Document + Approval Executor' AS title, 'feature-asset-writeoff-approval' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As an asset manager, I want write-offs approved before WRITTEN_OFF status and finance outbox entry.</p>
<h3>Task serial</h3><p><code>AST-1.6.3 — Asset Write-off Document + Approval Executor</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.6.5, AST-SCHEMA-MIG</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Table: <code>asset_write_offs</code> (already migrated)</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Terminal WRITTEN_OFF.</li>
<li>Double write-off fails.</li>
<li>Amount frozen onto finance event.</li>
</ul>
<h3>Task scope</h3><p>WriteOff document + executor. Tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 55 AS ord, 'Inventory Adjustment Document + Approval Executor' AS title, 'feature-asset-inventory-adjustment-approval' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As inventory, I want stock adjustments approved (when enabled) and posted only as ledger ADJUSTMENT rows.</p>
<h3>Task serial</h3><p><code>AST-1.6.4 — Inventory Adjustment Document + Approval Executor</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.5.5, AST-1.3.4, AST-SCHEMA-MIG</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Tables already migrated: <code>inventory_adjustments</code>, <code>inventory_adjustment_lines</code></p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Reject → no ledger change.</li>
<li>Post → ADJUSTMENT via ledger service under lock.</li>
<li>Optional verification_session_id.</li>
<li>Company may leave approval off.</li>
</ul>
<h3>Task scope</h3><p>Adjustment APIs through gateway to posted. AdjustmentExecutor. Tests. No CREATE TABLE.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 56 AS ord, 'Approval Module Actions + Executor Registration' AS title, 'feature-asset-approval-registration' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As an admin, I want Asset transfer/dispose/write-off/adjust-stock actions wired to the approval platform.</p>
<h3>Task serial</h3><p><code>AST-1.6.6 — Approval Module Actions + Executor Registration</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.6.1, AST-1.6.2, AST-1.6.3, AST-1.6.4</p>
<h3>Related tables / schema</h3>
<p>Platform approval_settings / module_actions.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Register executors via Platform::registerApprovalExecutor.</li>
<li>Seed settings with approval_enabled=false by default.</li>
</ul>
<h3>Task scope</h3><p>actions.php entries, provider registration, sync. Document how to attach workflows.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 57 AS ord, 'Asset Approval Requests — Frontend' AS title, 'feature-asset-approval-frontend' AS branch_name, 'Frontend' AS type,  '<h3>Summary</h3><p>As a custodian, I want screens to request transfer/disposal/write-off/adjustment; as approver I use existing platform inbox.</p>
<h3>Task serial</h3><p><code>AST-1.6.7 — Asset Approval Requests — Frontend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.6.6</p>
<h3>Related tables / schema</h3>
<p>Consumes document APIs; approvals via existing platform UI.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Do not rebuild approval inbox.</li>
<li>Show pending/rejected/completed on documents.</li>
</ul>
<h3>Task scope</h3><p>Request forms + document status pages.</p>
<h3>Definition of done</h3>
<ul>
<li>UI covers list/form/empty/loading/error states.</li>
<li>Permission gating matches actions.php.</li>
<li>Follows existing ERPFlow frontend patterns.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 58 AS ord, 'Phase 6 Tests + STOP' AS title, 'test-asset-phase6-stop' AS branch_name, 'QA' AS type,  '<h3>Summary</h3><p>As a tech lead, I want approval on/off, reject, stale, and double-dispose covered.</p>
<h3>Task serial</h3><p><code>AST-1.6.8 — Phase 6 Tests + STOP</code> · QA</p>
<h3>Depends on</h3><p>AST-1.6.7</p>
<h3>Related tables / schema</h3>
<p>Phase 6 documents + outbox already migrated.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Approver resolver must be an existing one.</li>
</ul>
<h3>STOP gate</h3><p>Approver resolution confirmed; demos done.</p>
<h3>Task scope</h3><p>Automated tests + demo. Sign STOP.</p>
<h3>Definition of done</h3>
<ul>
<li>Automated and/or UAT evidence attached; failures fixed or explicitly blocked.</li>
<li>STOP gate signed: Approver resolution confirmed; demos done.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 59 AS ord, 'Asset Service Providers — Backend' AS title, 'feature-asset-service-providers-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As an asset manager, I want a minimal temporary provider list for warranties/AMC until a real vendor master exists.</p>
<h3>Task serial</h3><p><code>AST-1.7.1 — Asset Service Providers — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.0.2 (provider decision), AST-1.2.9, AST-SCHEMA-MIG</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Table: <code>asset_service_providers</code> (already migrated)</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Not a global vendor master.</li>
<li>Do not use onboarding user_type vendor.</li>
<li>Minimal columns only.</li>
</ul>
<h3>Task scope</h3><p>CRUD API on existing table. Permission contracts.manage. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 60 AS ord, 'Asset Warranties — Backend' AS title, 'feature-asset-warranties-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As a custodian, I want warranty records with dates, provider, coverage, and optional file.</p>
<h3>Task serial</h3><p><code>AST-1.7.2 — Asset Warranties — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.7.1</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Table: <code>asset_warranties</code> (already migrated)</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>ends_on &gt;= starts_on.</li>
<li>Overlapping policy per Section N.</li>
<li>File optional.</li>
</ul>
<h3>Task scope</h3><p>CRUD + file upload on existing table. Tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 61 AS ord, 'AMC Service Contracts + Covered Assets — Backend' AS title, 'feature-asset-service-contracts-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As an asset manager, I want AMC/service contracts covering many assets without using Project contracts.</p>
<h3>Task serial</h3><p><code>AST-1.7.3 — AMC Service Contracts + Covered Assets — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.7.1, AST-1.2.1, AST-SCHEMA-MIG</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Tables already migrated: <code>asset_service_contracts</code>, <code>asset_service_contract_assets</code></p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Do not reuse Project contracts.</li>
<li>Link only serialized assets same company.</li>
</ul>
<h3>Task scope</h3><p>Contract CRUD + attach/detach assets. Tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 62 AS ord, 'Service Contract Files — Backend' AS title, 'feature-asset-service-contract-files-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As an asset manager, I want to attach documents to an AMC contract.</p>
<h3>Task serial</h3><p><code>AST-1.7.4 — Service Contract Files — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.7.3</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Table: <code>asset_service_contract_files</code> (already migrated)</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Company scoped.</li>
<li>Store on configured disk.</li>
</ul>
<h3>Task scope</h3><p>Upload/list/delete file APIs. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 63 AS ord, 'Warranty & AMC on Asset — Frontend' AS title, 'feature-asset-warranty-amc-frontend' AS branch_name, 'Frontend' AS type,  '<h3>Summary</h3><p>As a custodian, I want warranty and AMC visible on the asset detail page.</p>
<h3>Task serial</h3><p><code>AST-1.7.5 — Warranty &amp; AMC on Asset — Frontend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.7.2, AST-1.7.3, AST-1.7.4</p>
<h3>Related tables / schema</h3>
<p>Consumes 1.7 APIs.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Employees may view warranty on assets they hold.</li>
<li>No expiry notifications in V1.</li>
</ul>
<h3>Task scope</h3><p>UI sections on asset detail + provider/contract admin screens.</p>
<h3>Definition of done</h3>
<ul>
<li>UI covers list/form/empty/loading/error states.</li>
<li>Permission gating matches actions.php.</li>
<li>Follows existing ERPFlow frontend patterns.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 64 AS ord, 'Phase 7 Tests + STOP' AS title, 'test-asset-phase7-stop' AS branch_name, 'QA' AS type,  '<h3>Summary</h3><p>As a tech lead, I want overlapping warranty policy confirmed and contracts working.</p>
<h3>Task serial</h3><p><code>AST-1.7.6 — Phase 7 Tests + STOP</code> · QA</p>
<h3>Depends on</h3><p>AST-1.7.5</p>
<h3>Related tables / schema</h3>
<p>Phase 7 tables already migrated.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Provider remains temporary.</li>
</ul>
<h3>STOP gate</h3><p>Overlapping coverage policy confirmed.</p>
<h3>Task scope</h3><p>Tests + STOP sign-off.</p>
<h3>Definition of done</h3>
<ul>
<li>Automated and/or UAT evidence attached; failures fixed or explicitly blocked.</li>
<li>STOP gate signed: Overlapping coverage policy confirmed.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 65 AS ord, 'Opening Balance Import Template Design' AS title, 'docs-asset-import-template' AS branch_name, 'Spike' AS type,  '<h3>Summary</h3><p>As an implementer, I want signed column templates for serialized, quantity, and optional warranty sheets.</p>
<h3>Task serial</h3><p><code>AST-1.8.1 — Opening Balance Import Template Design</code> · Spike</p>
<h3>Depends on</h3><p>AST-1.3.9, AST-1.6.5</p>
<h3>Related tables / schema</h3>
<p>No tables. Spreadsheet columns map to existing schema.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Reject-on-duplicate codes.</li>
<li>No update-in-place.</li>
<li>Confirm required.</li>
</ul>
<h3>STOP gate</h3><p>Template sign-off (also AST-1.8.8).</p>
<h3>Task scope</h3><p>Publish template xlsx + column dictionary. Human sign-off before production use.</p>
<h3>Definition of done</h3>
<ul>
<li>Decision/doc published and linked from docs/asset-management/.</li>
<li>STOP gate signed: Template sign-off (also AST-1.8.8).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 66 AS ord, 'Import Upload + Staging — Backend' AS title, 'feature-asset-import-staging-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As an asset manager, I want to upload an opening file into staging batches/rows before anything is created.</p>
<h3>Task serial</h3><p><code>AST-1.8.2 — Import Upload + Staging — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.8.1, AST-SCHEMA-MIG</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Tables already migrated: <code>asset_import_batches</code>, <code>asset_import_rows</code></p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Upload does not create assets/stock.</li>
<li>Store file; stage JSON payload per row.</li>
</ul>
<h3>Task scope</h3><p>Upload API, batch/row repos on existing tables, Maatwebsite read. No CREATE TABLE.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 67 AS ord, 'Import Validation + Error Report — Backend' AS title, 'feature-asset-import-validation-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As an asset manager, I want validation and an error report file so bad rows are fixed before confirm.</p>
<h3>Task serial</h3><p><code>AST-1.8.3 — Import Validation + Error Report — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.8.2</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Updates asset_import_rows / batches (already migrated).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Unknown location/employee/item → invalid.</li>
<li>Duplicate asset code → invalid.</li>
<li>Required attributes enforced.</li>
</ul>
<h3>Task scope</h3><p>Validate action + Excel error export. Tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 68 AS ord, 'Import Confirm (All / Valid-only) + Queue — Backend' AS title, 'feature-asset-import-confirm-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As an asset manager, I want an explicit confirm that creates assets/stock via AssetReceiptService without double posting.</p>
<h3>Task serial</h3><p><code>AST-1.8.4 — Import Confirm (All / Valid-only) + Queue — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.8.3, AST-1.3.6</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Confirm uses receipt inbox + domain tables (already migrated).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Confirm explicit.</li>
<li>valid-only skips invalid.</li>
<li>Re-confirm idempotent.</li>
<li>No update of existing codes.</li>
<li>Large files via queued job.</li>
</ul>
<h3>Task scope</h3><p>Confirm API + job. Wire AssetReceiptService. Tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 69 AS ord, 'Acquisition Finance Events on Import Confirm' AS title, 'feature-asset-import-acquisition-events' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As Finance, I want acquisition outbox events created when opening assets with cost are confirmed.</p>
<h3>Task serial</h3><p><code>AST-1.8.5 — Acquisition Finance Events on Import Confirm</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.8.4, AST-1.6.5</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Writes asset_finance_events (already migrated).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Same unique key — no double fire on re-confirm.</li>
<li>Amount frozen at confirm.</li>
</ul>
<h3>Task scope</h3><p>Hook in confirm path. Tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 70 AS ord, 'Import Reversal Script (Guarded)' AS title, 'feature-asset-import-reversal' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As a tech lead, I want a guarded reversal for a bad opening import that has not been assigned further.</p>
<h3>Task serial</h3><p><code>AST-1.8.6 — Import Reversal Script (Guarded)</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.8.4</p>
<h3>Related tables / schema</h3>
<p>Uses created_entity references on import rows; reversing ledger quantities.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Refuse if any created asset has been assigned/disposed.</li>
<li>Do not hard-delete if downstream exists.</li>
<li>Explicit --force documented.</li>
</ul>
<h3>Task scope</h3><p>Artisan command + safety checks + tests. No schema CREATE.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 71 AS ord, 'Opening Import Dry-run on Data Copy' AS title, 'ops-asset-import-dryrun' AS branch_name, 'Spike' AS type,  '<h3>Summary</h3><p>As a release owner, I want a dry-run on a copy of real data before production import.</p>
<h3>Task serial</h3><p><code>AST-1.8.7 — Opening Import Dry-run on Data Copy</code> · Spike</p>
<h3>Depends on</h3><p>AST-1.8.3</p>
<h3>Related tables / schema</h3>
<p>Uses staging only / disposable DB copy.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>No production confirm until dry-run notes attached.</li>
</ul>
<h3>Task scope</h3><p>Run validate on copy data; attach results to STOP.</p>
<h3>Definition of done</h3>
<ul>
<li>Decision/doc published and linked from docs/asset-management/.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 72 AS ord, 'Phase 8 Tests + STOP (Template Sign-off)' AS title, 'test-asset-phase8-stop' AS branch_name, 'QA' AS type,  '<h3>Summary</h3><p>As a tech lead, I want template signed and confirm path proven once.</p>
<h3>Task serial</h3><p><code>AST-1.8.8 — Phase 8 Tests + STOP (Template Sign-off)</code> · QA</p>
<h3>Depends on</h3><p>AST-1.8.5, AST-1.8.7</p>
<h3>Related tables / schema</h3>
<p>Import tables already migrated.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Fixture file previews errors and confirms clean file once.</li>
</ul>
<h3>STOP gate</h3><p>Template columns signed before any production file.</p>
<h3>Task scope</h3><p>Tests + template sign-off. Sign STOP.</p>
<h3>Definition of done</h3>
<ul>
<li>Automated and/or UAT evidence attached; failures fixed or explicitly blocked.</li>
<li>STOP gate signed: Template columns signed before any production file.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 73 AS ord, 'Asset Service Events Thin Log — Backend' AS title, 'feature-asset-service-events-backend' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As a custodian, I want a thin maintenance history on an asset without building a CMMS.</p>
<h3>Task serial</h3><p><code>AST-1.9.1 — Asset Service Events Thin Log — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.7.6, AST-SCHEMA-MIG</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Table: <code>asset_service_events</code> (already migrated)</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Reject on DISPOSED/WRITTEN_OFF.</li>
<li>Optional contract/warranty links.</li>
<li>No technicians/schedules/meters.</li>
</ul>
<h3>Task scope</h3><p>Create/list APIs on existing table. Tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 74 AS ord, 'UNDER_MAINTENANCE Status Transitions — Backend' AS title, 'feature-asset-under-maintenance-status' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As a custodian, I want to mark an asset under maintenance and return it to AVAILABLE/ASSIGNED.</p>
<h3>Task serial</h3><p><code>AST-1.9.2 — UNDER_MAINTENANCE Status Transitions — Backend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.2.2, AST-1.9.1</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>serialized_assets.status (already migrated).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Only from allowed statuses.</li>
<li>Does not create work orders.</li>
</ul>
<h3>Task scope</h3><p>Extend status machine. Tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 75 AS ord, 'AssetContextPort for Future Maintenance' AS title, 'feature-asset-context-port' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As a future Maintenance module, I want a read port for asset status, warranty, and AMC.</p>
<h3>Task serial</h3><p><code>AST-1.9.3 — AssetContextPort for Future Maintenance</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.9.1, AST-1.7.2, AST-1.7.3</p>
<h3>Related tables / schema</h3>
<p>No new tables.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Read-only port.</li>
<li>Real adapter in Asset module.</li>
</ul>
<h3>Task scope</h3><p>Interface + DTO + RealAssetContext + tests/fake.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 76 AS ord, 'Service History on Asset Page — Frontend' AS title, 'feature-asset-service-history-frontend' AS branch_name, 'Frontend' AS type,  '<h3>Summary</h3><p>As a custodian, I want service history listed on the asset page.</p>
<h3>Task serial</h3><p><code>AST-1.9.4 — Service History on Asset Page — Frontend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.9.1, AST-1.9.2</p>
<h3>Related tables / schema</h3>
<p>Consumes service events API.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Anti-scope: no CMMS UI.</li>
</ul>
<h3>Task scope</h3><p>History panel + add event form.</p>
<h3>Definition of done</h3>
<ul>
<li>UI covers list/form/empty/loading/error states.</li>
<li>Permission gating matches actions.php.</li>
<li>Follows existing ERPFlow frontend patterns.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 77 AS ord, 'Phase 9 Tests + STOP' AS title, 'test-asset-phase9-stop' AS branch_name, 'QA' AS type,  '<h3>Summary</h3><p>As a tech lead, I want Phase 9 closed without CMMS scope creep.</p>
<h3>Task serial</h3><p><code>AST-1.9.5 — Phase 9 Tests + STOP</code> · QA</p>
<h3>Depends on</h3><p>AST-1.9.4</p>
<h3>Related tables / schema</h3>
<p>service_events already migrated.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>No technicians/schedules/meters shipped.</li>
</ul>
<h3>STOP gate</h3><p>History visible; port returns coverage; anti-scope held.</p>
<h3>Task scope</h3><p>Tests + STOP.</p>
<h3>Definition of done</h3>
<ul>
<li>Automated and/or UAT evidence attached; failures fixed or explicitly blocked.</li>
<li>STOP gate signed: History visible; port returns coverage; anti-scope held.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 78 AS ord, 'Finance Event Frozen Amount Rule' AS title, 'feature-asset-finance-frozen-amount' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As Finance, I want event amounts frozen at posting time so later asset cost edits do not rewrite history.</p>
<h3>Task serial</h3><p><code>AST-1.10.1 — Finance Event Frozen Amount Rule</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.6.5</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>asset_finance_events.amount immutable after insert (table already migrated).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>No updates to amount.</li>
<li>Void via status=void only if ever needed.</li>
</ul>
<h3>Task scope</h3><p>Enforce in writer/repository. Tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 79 AS ord, 'AssetFinanceEventWriter Wiring' AS title, 'feature-asset-finance-event-writer' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As the Asset module, I want one writer used by receipt, disposal, and write-off paths.</p>
<h3>Task serial</h3><p><code>AST-1.10.2 — AssetFinanceEventWriter Wiring</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.10.1, AST-1.8.5, AST-1.6.2, AST-1.6.3</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>asset_finance_events (already migrated).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Called only from those paths.</li>
<li>Unique key prevents duplicates.</li>
</ul>
<h3>Task scope</h3><p>Consolidate writer interface; ensure all three call sites use it. Tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 80 AS ord, 'Pending Finance Events Read API' AS title, 'feature-asset-finance-events-read-api' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As a finance reader, I want to list pending finance events without treating them as journals.</p>
<h3>Task serial</h3><p><code>AST-1.10.3 — Pending Finance Events Read API</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.10.2</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Reads asset_finance_events (already migrated).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Name API finance-events not journals.</li>
<li>Filter by status.</li>
</ul>
<h3>Task scope</h3><p>List API + Resource. Permission asset.finance.view. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 81 AS ord, 'Cost Field Permission Enforcement' AS title, 'feature-asset-finance-view-permission' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As security, I want acquisition cost hidden from users without asset.finance.view.</p>
<h3>Task serial</h3><p><code>AST-1.10.4 — Cost Field Permission Enforcement</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.1.2, AST-1.2.7, AST-1.10.3</p>
<h3>Related tables / schema</h3>
<p>Affects Resources for serialized_assets and reports.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Default hide cost.</li>
<li>Apply on scan resolve and list/detail.</li>
</ul>
<h3>Task scope</h3><p>Resource transformers + FE gating audit. Tests. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 82 AS ord, 'Phase 10 Tests + STOP (Finance Sign-off)' AS title, 'test-asset-phase10-stop' AS branch_name, 'QA' AS type,  '<h3>Summary</h3><p>As Finance owner, I confirm outbox is enough and depreciation is out of Asset.</p>
<h3>Task serial</h3><p><code>AST-1.10.5 — Phase 10 Tests + STOP (Finance Sign-off)</code> · QA</p>
<h3>Depends on</h3><p>AST-1.10.4</p>
<h3>Related tables / schema</h3>
<p>finance_events already migrated.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>No journals created.</li>
</ul>
<h3>STOP gate</h3><p>Finance confirms outbox sufficient.</p>
<h3>Task scope</h3><p>Sign-off note + tests. Sign STOP.</p>
<h3>Definition of done</h3>
<ul>
<li>Automated and/or UAT evidence attached; failures fixed or explicitly blocked.</li>
<li>STOP gate signed: Finance confirms outbox sufficient.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 83 AS ord, 'Asset Register Reports — Backend + Frontend' AS title, 'feature-asset-reports-register' AS branch_name, 'Fullstack' AS type,  '<h3>Summary</h3><p>As a manager, I want asset register and by-employee / by-location / assignment history reports.</p>
<h3>Task serial</h3><p><code>AST-1.11.1 — Asset Register Reports — Backend + Frontend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.4.10, AST-1.10.4</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>Read models from serialized_assets, assignments (already migrated).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Paginated.</li>
<li>Cost columns need finance.view.</li>
</ul>
<h3>Task scope</h3><p>Report APIs + UI pages. No domain CREATE TABLE.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 84 AS ord, 'Verification Reports — Backend + Frontend' AS title, 'feature-asset-reports-verification' AS branch_name, 'Fullstack' AS type,  '<h3>Summary</h3><p>As an auditor, I want verification results, missing, and wrong-location reports.</p>
<h3>Task serial</h3><p><code>AST-1.11.2 — Verification Reports — Backend + Frontend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.5.7</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>verification_sessions/lines (already migrated).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Reflect snapshot results, not live stock.</li>
</ul>
<h3>Task scope</h3><p>APIs + UI. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 85 AS ord, 'Inventory Reports — Backend + Frontend' AS title, 'feature-asset-reports-inventory' AS branch_name, 'Fullstack' AS type,  '<h3>Summary</h3><p>As inventory, I want on-hand, movement, variance, and adjustment history reports.</p>
<h3>Task serial</h3><p><code>AST-1.11.3 — Inventory Reports — Backend + Frontend</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.6.4, AST-1.3.9</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>balances, transactions, adjustments (already migrated).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Movement from ledger only.</li>
</ul>
<h3>Task scope</h3><p>APIs + UI. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 86 AS ord, 'Warranty/AMC Expiry + Acquisition Cost Lists' AS title, 'feature-asset-reports-expiry-cost' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As a manager, I want expiry lists and acquisition cost list as queries, not notifications.</p>
<h3>Task serial</h3><p><code>AST-1.11.4 — Warranty/AMC Expiry + Acquisition Cost Lists</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.7.6, AST-1.10.4</p>
<h3>Related tables / schema</h3>
<p><strong>Tables already created by <code>AST-SCHEMA-MIG</code>. Do <strong>not</strong> add new migrations for these tables in this card. Models/repos only.</strong></p>
<p>warranties, contracts, cost fields (already migrated).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>No notification jobs.</li>
<li>No NBV/depreciation report.</li>
</ul>
<h3>Task scope</h3><p>APIs + UI. No migration.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No new domain table migrations in this card (tables from AST-SCHEMA-MIG).</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 87 AS ord, 'Streaming Export for Asset Reports' AS title, 'feature-asset-reports-export' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As a manager, I want large report exports that do not OOM.</p>
<h3>Task serial</h3><p><code>AST-1.11.5 — Streaming Export for Asset Reports</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.11.1, AST-1.11.3</p>
<h3>Related tables / schema</h3>
<p>Read-only exports.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Stream like activity-log export pattern.</li>
<li>Respect permissions including finance.view.</li>
</ul>
<h3>Task scope</h3><p>Export endpoints for key reports. Tests. No domain schema.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 88 AS ord, 'Index Tuning (Measured Only)' AS title, 'feature-asset-index-tuning' AS branch_name, 'Backend' AS type,  '<h3>Summary</h3><p>As a developer, I want indexes only where EXPLAIN shows sequential scans on real queries.</p>
<h3>Task serial</h3><p><code>AST-1.11.6 — Index Tuning (Measured Only)</code> · Feature</p>
<h3>Depends on</h3><p>AST-1.11.1, AST-1.11.3</p>
<h3>Related tables / schema</h3>
<p>Index migrations only (exception to AST-SCHEMA-MIG). Reason documented per index.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>No speculative indexes.</li>
<li>Migration per measured need only.</li>
</ul>
<h3>Notes</h3><p>Allowed follow-up migrations: ADD INDEX only. No new tables.</p>
<h3>Task scope</h3><p>Measure report/list queries; add justified indexes only.</p>
<h3>Definition of done</h3>
<ul>
<li>Service–Repository architecture with interfaces, Form Request, and API Resource.</li>
<li>company_id tenant scope + IDOR tests.</li>
<li>Feature tests: happy path, validation, unauthorized/forbidden.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 89 AS ord, 'Security Pass (Cost Columns + Company Scope)' AS title, 'test-asset-security-pass' AS branch_name, 'QA' AS type,  '<h3>Summary</h3><p>As security, I want IDOR and cost leakage tested across Asset APIs.</p>
<h3>Task serial</h3><p><code>AST-1.11.7 — Security Pass (Cost Columns + Company Scope)</code> · QA</p>
<h3>Depends on</h3><p>AST-1.11.1, AST-1.10.4</p>
<h3>Related tables / schema</h3>
<p>All Asset APIs.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Wrong company → 404/403.</li>
<li>Cost hidden without finance.view.</li>
</ul>
<h3>Task scope</h3><p>Test suite + checklist. Fix blockers found.</p>
<h3>Definition of done</h3>
<ul>
<li>Automated and/or UAT evidence attached; failures fixed or explicitly blocked.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 90 AS ord, 'Concurrency Regression Suite' AS title, 'test-asset-concurrency-regression' AS branch_name, 'QA' AS type,  '<h3>Summary</h3><p>As a tech lead, I want Phase 3 concurrency tests still green after later phases.</p>
<h3>Task serial</h3><p><code>AST-1.11.8 — Concurrency Regression Suite</code> · QA</p>
<h3>Depends on</h3><p>AST-1.3.9, AST-1.4.10, AST-1.6.8</p>
<h3>Related tables / schema</h3>
<p>ledger/balances/assignments already migrated.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Parallel receipt, duplicate inbox, double assign, double adjust.</li>
</ul>
<h3>Task scope</h3><p>CI suite card.</p>
<h3>Definition of done</h3>
<ul>
<li>Automated and/or UAT evidence attached; failures fixed or explicitly blocked.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 91 AS ord, 'Phase 11 STOP — Report List Acceptance' AS title, 'test-asset-phase11-stop' AS branch_name, 'QA' AS type,  '<h3>Summary</h3><p>As a product owner, I accept the V1 report list before further performance rewrites.</p>
<h3>Task serial</h3><p><code>AST-1.11.9 — Phase 11 STOP — Report List Acceptance</code> · QA</p>
<h3>Depends on</h3><p>AST-1.11.5, AST-1.11.7, AST-1.11.8</p>
<h3>Related tables / schema</h3>
<p>Reports only.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>No NBV report.</li>
</ul>
<h3>STOP gate</h3><p>Report list accepted.</p>
<h3>Task scope</h3><p>Sign STOP on report list.</p>
<h3>Definition of done</h3>
<ul>
<li>Automated and/or UAT evidence attached; failures fixed or explicitly blocked.</li>
<li>STOP gate signed: Report list accepted.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 92 AS ord, 'Feature Flags / Module Enable Order' AS title, 'docs-asset-enable-order' AS branch_name, 'Spike' AS type,  '<h3>Summary</h3><p>As a release owner, I want a safe enable order for Asset in production.</p>
<h3>Task serial</h3><p><code>AST-1.12.0 — Feature Flags / Module Enable Order</code> · Spike</p>
<h3>Depends on</h3><p>AST-1.0.4</p>
<h3>Related tables / schema</h3>
<p>modules_statuses + flags. Schema already migrated before enable.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Bridge freeze same release as assignment.</li>
<li>Import after masters + receipt service live.</li>
<li>AST-SCHEMA-MIG must be applied before feature use.</li>
</ul>
<h3>Task scope</h3><p>Runbook in docs/asset-management.</p>
<h3>Definition of done</h3>
<ul>
<li>Decision/doc published and linked from docs/asset-management/.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 93 AS ord, 'Asset Module Documentation' AS title, 'docs-asset-module-guides' AS branch_name, 'Docs' AS type,  '<h3>Summary</h3><p>As a developer/user, I want module and API docs for Asset.</p>
<h3>Task serial</h3><p><code>AST-1.12.1 — Asset Module Documentation</code> · Docs</p>
<h3>Depends on</h3><p>AST-1.11.9</p>
<h3>Related tables / schema</h3>
<p>N/A.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Link plan, WBS, schema, task cards, SCHEMA-MIG.</li>
<li>Do not invent features not built.</li>
</ul>
<h3>Task scope</h3><p>User guide outline + API notes. Update docs/README.</p>
<h3>Definition of done</h3>
<ul>
<li>Docs merged under docs/asset-management/ and linked from docs/README.md.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 94 AS ord, 'UAT per Phase' AS title, 'qa-asset-uat-tracker' AS branch_name, 'QA' AS type,  '<h3>Summary</h3><p>As QA, I want a UAT tracker covering each phase STOP demo.</p>
<h3>Task serial</h3><p><code>AST-1.12.2 — UAT per Phase</code> · QA</p>
<h3>Depends on</h3><p>AST-1.1.9 through AST-1.11.9 (rolling)</p>
<h3>Related tables / schema</h3>
<p>N/A.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>UAT evidence attached to STOP cards.</li>
</ul>
<h3>Task scope</h3><p>Checklist + execution across environments.</p>
<h3>Definition of done</h3>
<ul>
<li>Automated and/or UAT evidence attached; failures fixed or explicitly blocked.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 95 AS ord, 'Production Data Migration (Bridge + Opening Import)' AS title, 'ops-asset-production-migration' AS branch_name, 'Spike' AS type,  '<h3>Summary</h3><p>As a release owner, I want production bridge and opening import executed with rollback plan.</p>
<h3>Task serial</h3><p><code>AST-1.12.3 — Production Data Migration (Bridge + Opening Import)</code> · Spike</p>
<h3>Depends on</h3><p>AST-1.4.10, AST-1.8.8, AST-1.12.0</p>
<h3>Related tables / schema</h3>
<p>Uses bridge command + import confirm. Schema already from AST-SCHEMA-MIG.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Dry-run first.</li>
<li>Freeze legacy writer in same window.</li>
<li>Do not re-run schema CREATE.</li>
</ul>
<h3>Task scope</h3><p>Ops execution using AST-1.4.2 and AST-1.8.* runbooks.</p>
<h3>Definition of done</h3>
<ul>
<li>Decision/doc published and linked from docs/asset-management/.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 96 AS ord, 'Physical Label Printing & Tagging Drive' AS title, 'ops-asset-tagging-drive' AS branch_name, 'Spike' AS type,  '<h3>Summary</h3><p>As operations, I want a physical tagging drive after labels print.</p>
<h3>Task serial</h3><p><code>AST-1.12.4 — Physical Label Printing &amp; Tagging Drive</code> · Spike</p>
<h3>Depends on</h3><p>AST-1.2.6, AST-1.12.3</p>
<h3>Related tables / schema</h3>
<p>Uses tags (already migrated).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Only active tags on stickers.</li>
</ul>
<h3>Task scope</h3><p>Ops checklist; not a code feature.</p>
<h3>Definition of done</h3>
<ul>
<li>Decision/doc published and linked from docs/asset-management/.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 97 AS ord, 'First Physical Verification Cycle' AS title, 'ops-asset-first-verification' AS branch_name, 'Spike' AS type,  '<h3>Summary</h3><p>As operations, I want the first real verification cycle after tagging.</p>
<h3>Task serial</h3><p><code>AST-1.12.5 — First Physical Verification Cycle</code> · Spike</p>
<h3>Depends on</h3><p>AST-1.12.4, AST-1.6.8</p>
<h3>Related tables / schema</h3>
<p>verification sessions (already migrated).</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Variances → draft adjustments → approved posts.</li>
</ul>
<h3>Task scope</h3><p>Ops execution of Phase 5/6 flows on live data.</p>
<h3>Definition of done</h3>
<ul>
<li>Decision/doc published and linked from docs/asset-management/.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
  UNION ALL
  SELECT 98 AS ord, 'User Training (Roles)' AS title, 'docs-asset-user-training' AS branch_name, 'Docs' AS type,  '<h3>Summary</h3><p>As an org, I want training for manager, custodian, auditor, and employee roles.</p>
<h3>Task serial</h3><p><code>AST-1.12.6 — User Training (Roles)</code> · Docs</p>
<h3>Depends on</h3><p>AST-1.12.1</p>
<h3>Related tables / schema</h3>
<p>N/A.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Match shipped permissions.</li>
</ul>
<h3>Task scope</h3><p>Short training outlines / sessions.</p>
<h3>Definition of done</h3>
<ul>
<li>Docs merged under docs/asset-management/ and linked from docs/README.md.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'medium' AS priority
  UNION ALL
  SELECT 99 AS ord, 'Future Roadmap Tracker (Out of V1)' AS title, 'docs-asset-future-roadmap' AS branch_name, 'Spike' AS type,  '<h3>Summary</h3><p>As a product owner, I want out-of-V1 items listed so they are not scheduled into V1 phases.</p>
<h3>Task serial</h3><p><code>AST-1.13 — Future Roadmap Tracker (Out of V1)</code> · Spike</p>
<h3>Depends on</h3><p>AST-1.0.1</p>
<h3>Related tables / schema</h3>
<p>None for V1.</p>
<p>DDL reference: <code>docs/asset-management/ASSET_MANAGEMENT_DATABASE_SCHEMA.md</code></p>
<h3>Business rules</h3>
<ul>
<li>Do not implement components, asset request, loan, gate pass, meters, lost/stolen case, reorder, notifications, lot/batch, e-sign, GRN caller, work orders, finance journals, vendor master move.</li>
</ul>
<h3>Notes</h3><p>OUT OF V1</p>
<h3>Task scope</h3><p>Keep as backlog epic only. No implementation under V1.</p>
<h3>Definition of done</h3>
<ul>
<li>Decision/doc published and linked from docs/asset-management/.</li>
<li>No out-of-scope V1 roadmap items (WBS 1.13) implemented.</li>
</ul>
<h3>Architecture constraints</h3>
<ul>
<li>Follow <code>AI/RULES/CODING-STANDARD.md</code> and Asset module standards.</li>
<li>Do **not** create a second table named <code>assets</code>.</li>
<li>Do **not** write Employee <code>assets</code> / <code>employee_assets</code> in Phases 1–3.</li>
<li>No new approval engine — use platform ApprovalGateway + executors.</li>
<li>Verification must not post stock; posting is AST-1.6.4 only.</li>
<li>Domain table migrations are owned only by <code>AST-SCHEMA-MIG</code> (except measured indexes / Employee bridge ALTER).</li>
</ul>' AS description, 'high' AS priority
) AS v
ORDER BY v.ord;

-- Total rows: 99
-- Sum estimate_hours: 297.00 (99 × 3.00)
