mustflow 2.30.0 → 2.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mustflow",
3
- "version": "2.30.0",
3
+ "version": "2.31.0",
4
4
  "description": "Agent workflow documents and CLI for mustflow repository roots.",
5
5
  "type": "module",
6
6
  "license": "MIT-0",
@@ -62,7 +62,7 @@ translations = {}
62
62
  [documents."skills.index"]
63
63
  source = "locales/en/.mustflow/skills/INDEX.md"
64
64
  source_locale = "en"
65
- revision = 95
65
+ revision = 99
66
66
  translations = {}
67
67
 
68
68
  [documents."skill.adapter-boundary"]
@@ -125,6 +125,18 @@ source_locale = "en"
125
125
  revision = 1
126
126
  translations = {}
127
127
 
128
+ [documents."skill.sqlite-code-change"]
129
+ source = "locales/en/.mustflow/skills/sqlite-code-change/SKILL.md"
130
+ source_locale = "en"
131
+ revision = 1
132
+ translations = {}
133
+
134
+ [documents."skill.postgresql-code-change"]
135
+ source = "locales/en/.mustflow/skills/postgresql-code-change/SKILL.md"
136
+ source_locale = "en"
137
+ revision = 1
138
+ translations = {}
139
+
128
140
  [documents."skill.dependency-injection"]
129
141
  source = "locales/en/.mustflow/skills/dependency-injection/SKILL.md"
130
142
  source_locale = "en"
@@ -457,7 +469,7 @@ translations = {}
457
469
  [documents."skill.performance-budget-check"]
458
470
  source = "locales/en/.mustflow/skills/performance-budget-check/SKILL.md"
459
471
  source_locale = "en"
460
- revision = 15
472
+ revision = 19
461
473
  translations = {}
462
474
 
463
475
  [documents."skill.pattern-scout"]
@@ -2,7 +2,7 @@
2
2
  mustflow_doc: skills.index
3
3
  locale: en
4
4
  canonical: true
5
- revision: 95
5
+ revision: 99
6
6
  authority: router
7
7
  lifecycle: mustflow-owned
8
8
  ---
@@ -139,7 +139,7 @@ routes. Event routes stay inactive until their event occurs.
139
139
  | Elysia routes, schemas, plugins, decorators, derives, guards, auth, error handling, OpenAPI output, Eden clients, or Bun server behavior are created or changed | `.mustflow/skills/elysia-code-change/SKILL.md` | Server entry, route modules, schemas, plugins, auth, error handling, OpenAPI or Eden surface, changed files, and command contract entries | Elysia routes, schemas, plugins, generated clients, tests, and docs examples | schema/type drift, context inference loss, auth gap, inconsistent error envelope, or stale OpenAPI/Eden output | `changes_status`, `changes_diff_summary`, `lint`, `build`, `test_related`, `test`, `docs_validate_fast`, `mustflow_check` | Schema, validation, type inference, auth, error, and client contract checked, verification, and remaining Elysia risk |
140
140
  | Source anchors are added, revised, reviewed, or used to mark a module boundary | `.mustflow/skills/source-anchor-authoring/SKILL.md` | Target files, anchor reason, nearby anchors, source-anchor policy, and validation surface | Source anchors and directly related workflow docs or comments | comment bloat, authority drift, false verification claims, or hidden module pressure | `mustflow_check`, `docs_validate_fast` | Anchor placement decision, field choices, module-boundary handoff, and verification |
141
141
  | Changed files need risk classification and verification selection | `.mustflow/skills/diff-risk-review/SKILL.md` | Changed-file list, diff summary, and task goal | Changed surfaces and verification report | under- or over-verification | `changes_status`, `changes_diff_summary`, `test`, `test_related`, `test_audit`, `lint`, `build`, `docs_validate`, `mustflow_check` | Risk level, verification choice, rollback notes |
142
- | CLI execution duration, build time, bundle size, test scheduling logic, process spawning, or CLI performance claims are planned, edited, or reported | `.mustflow/skills/performance-budget-check/SKILL.md` | Performance surface, budget source, measurement method, and baseline metrics | Budget checks, CLI duration, bundle weight, scheduling optimization notes, measurements, and tests | invented budgets, stale measurements, child-process bottlenecks, or unverified speed claims | `changes_status`, `changes_diff_summary`, `build`, `test_related`, `docs_validate_fast`, `test_release`, `mustflow_check` | Performance surface, budget source, measurements, execution duration, bundle size, and remaining risks |
142
+ | Runtime performance, hot paths, user-perceived latency, p95/p99 tail latency, throughput, infrastructure cost, memory, GC pressure, CPU cache locality, allocation churn, bundle size, payload size, media loading, build time, filesystem scanning, process spawning, IPC/RPC/DB/API fan-out, N+1 work, repeated filtering/sorting/parsing/serialization, caching, pagination, queues, virtualization, backpressure, or performance claims are planned, edited, reviewed, or reported | `.mustflow/skills/performance-budget-check/SKILL.md` | Performance surface, hot-path shape, input scale, measurement method, baseline and result when available, correctness boundaries, isolation surface, and command contract entries | Data access, lookup indexes, grouping, projection, batching, scheduling, rendering, cache boundaries, queues, concurrency limits, cancellation, measurements, docs, tests, and directly synchronized templates | invented budgets, stale measurements, hidden O(n²), misleading Big-O or data-structure claims, N+1 queries or RPC, unbounded materialization, repeated serialization, object churn, GC pressure, broad rerender, cache stampede, key explosion, queue backlog, pool exhaustion, stale async result, or speed-over-correctness tradeoff | `changes_status`, `changes_diff_summary`, `build`, `test_related`, `docs_validate_fast`, `test_release`, `mustflow_check` | Hot path, ROI priority, cost multiplier, measurement or complexity evidence, semantic preservation, optimization applied, verification, and remaining performance risk |
143
143
  | New feature, ambiguous or complex design request, pre-implementation design gate, module, folder layout, architecture, scaffold, refactor, routing, data model, frontend/backend/database/infrastructure choice, database engine choice, managed database extension choice, auth identity ownership, public URL contract, data residency policy, runtime patchability, runtime portability, global-ready locale/country/currency/timezone/money model, server-side authorization boundary, file upload or storage strategy, API response contract, content-heavy product, semantic content blocks, filter URL policy, admin operation model, cache strategy, content lifecycle, asset strategy, claim or fact registry, content graph, source collection flow, user-state layer, core/application/delivery/infra boundary, framework-magic boundary, core versus auxiliary path boundary, operational versus analytics boundary, HTTP-to-worker boundary, job or outbox model, backup/restore assumption, vendor or platform exit path, external-service truth ownership, search/queue/log/analytics portability, operational reproducibility, observability identifier flow, deployment-state portability, CI/CD dashboard dependency, ecosystem or maintainer-risk placement, multi-server state boundary, vertical-to-horizontal scaling boundary, AI usage cost boundary, AI gateway hard-limit boundary, pricing-growth boundary, failure-isolation boundary, or external service integration may require hidden structure decisions before coding | `.mustflow/skills/structure-discovery-gate/SKILL.md` | User request, intended capability, design gate classification, restated requirement, success criteria, non-goals, compatibility boundaries, hidden assumptions, named technologies or services, future content/API/rendering/data assumptions, database operating-shape assumptions, managed database feature assumptions, identity and provider-id assumptions, public URL assumptions, data location assumptions, runtime patch and portability assumptions, delivery/application/core/infra assumptions, global data assumptions, authorization assumptions, file-storage assumptions, source/provenance assumptions, lifecycle/asset/claim assumptions, user-state assumptions, admin/cache assumptions, core path and auxiliary path assumptions, async work assumptions, restore assumptions, vendor exit and replacement assumptions, external-service source-of-truth assumptions, search/queue/log/analytics reconstruction assumptions, operating-state reproduction assumptions, observability identifier assumptions, CI/CD reproducibility assumptions, dependency ecosystem and maintainer assumptions, pricing value/cost unit assumptions, failure-policy assumptions, AI gateway or cost assumptions, and relevant local patterns | Questions, assumptions, proposed file boundaries, and the smallest resulting implementation | brittle structure, vendor-name leakage, migration debt, lock-in debt, provider-id leakage, raw storage URL leakage, weak data location proof, unpatchable runtime, runtime-specific core logic, framework business-rule coupling, SaaS-only core state, weak search or queue reconstruction, weak global data model, weak server authorization, process-memory state leak, untracked AI cost, provider-budget-only AI protection, value/cost pricing mismatch, hidden dashboard deployment state, fragile single-maintainer core dependency, hidden operating state, broken traceability, file/storage drift, screen-shaped API coupling, core-path coupling, retry or worker coupling, unbounded failure radius, over-questioning, or speculative abstraction | `changes_status`, `changes_diff_summary`, `docs_validate_fast`, `test_release`, `mustflow_check` | Design gate classification, restated requirement, success criteria, blocking questions, recommended defaults, assumptions, proposed files and responsibilities, upfront versus deferred structure decisions, borrowed service versus owned contract boundary, dependency direction, database, identity, public URL, data residency, runtime patchability and portability, global data, authorization, file-storage, API, vendor exit, external-service truth ownership, search/queue/log/analytics portability, operational reproducibility, CI/CD reproducibility, dependency risk, observability identity flow, pricing value/cost boundary, AI gateway boundary, core/application/delivery/infra boundaries, core and auxiliary boundaries, async work boundary, local pattern, verification, and remaining structure risk |
144
144
 
145
145
  ### Tests and Regression
@@ -181,6 +181,8 @@ routes. Event routes stay inactive until their event occurs.
181
181
  | --- | --- | --- | --- | --- | --- | --- |
182
182
  | Database schema, database engine choice, managed database extension or provider feature, SQLite or PostgreSQL suitability, query, transaction, ORM model, repository/store, index, cache-backed read model, read/write model, content metadata, content blocks, content graph, lifecycle states, versioned records, ledgers, job tables, outbox events, inbox events, idempotency records, processed webhook records, external API call records, provider intent records, manual recovery records, taxonomy, filter URL policies, SEO landing records, claim or fact registries, comparison methodologies, affiliate links, source provenance, verification state, behavior analytics events, core event stores, search document metadata, queue recovery metadata, semantic export/import data, provider id mappings, app-owned identity records, public URL records, data residency records, AI budget or policy records, external-service truth ownership, operational versus analytics data boundaries, cache-as-store decisions, API response projections, public identifiers, data ownership boundaries, admin audit logs, cache invalidation data, user activity state, aggregate cache, hybrid file/database storage, file metadata records, data retention, pagination, concurrency, idempotency, audit log, or persistence boundary is introduced, changed, reviewed, or reported | `.mustflow/skills/database-change-safety/SKILL.md` | Data role, database operating model, managed database dependency model, event role, affected tables or stores, storage split, identity and provider-id mapping model, public URL and file-object model, data location model, AI budget and feature-policy model, block/graph/lifecycle/version/ledger/job/outbox/inbox/webhook/provider-call/taxonomy/filter/claim/source/admin/cache/user-state model, export/import and provider-id mapping model, external-service truth model, search/queue/log/analytics data model, operational versus analytics boundary, API projection boundary, file metadata and object-storage boundary, public id rule, read/write path, transaction boundary, migration or rollback expectations, local DB or ORM patterns, changed files, and command contract entries | Schema, migrations, repositories, stores, queries, transactions, indexes, read models, ledgers, job records, outbox records, inbox records, processed webhook records, external call records, provider intent records, manual recovery records, content metadata, block records, claim records, source records, comparison records, affiliate records, behavior event records, core event records, search source records, projection records, export/import records, provider mapping records, app identity records, public URL records, data residency records, AI budget or feature-policy records, admin audit records, file metadata records, cache records, user-state records, fixtures, tests, docs, and directly synchronized templates | data loss, incomplete export, provider-id lock-in, provider-auth-function lock-in, raw storage URL lock-in, unprovable data location, SaaS-only core fact, stale cache, authorization leak, transaction bug, duplicate side effect, unknown provider outcome, retry drift, missing manual replay record, slow query, N+1 query growth, write-contention blind spot, operational DB reporting overload, file/database drift, provenance drift, search or queue reconstruction gap, aggregate drift, API/DB coupling, cache-invalidation drift, provider-budget-only AI enforcement, or unverified migration claim | `changes_status`, `changes_diff_summary`, `test_related`, `test`, `lint`, `build`, `docs_validate_fast`, `test_release`, `mustflow_check` | Data role, database operating model, source-of-truth split, managed database dependency, app-owned identity, public URL, data residency, AI budget and policy records, schema/query/transaction review, delete lifecycle, versioning, ledger, job/outbox/inbox/webhook/provider-call/manual-recovery model, export/import and provider-id mapping model, external-service truth model, search/queue/log/analytics ownership, read/write model, behavior/audit event boundary, API projection boundary, file metadata boundary, block/graph/lifecycle/taxonomy/filter/claim/source/admin/cache/user-state checks, migration and rollback status, index/performance notes, security/retention checks, tests, verification, and remaining database risk |
183
183
  | Database migration files, schema migration history, ORM schema migrations, generated clients, schema dumps, SQL snapshots, backfills, rolling deploy compatibility, expand-and-contract changes, destructive database changes, migration rollback claims, or production database migration procedures are created, changed, reviewed, or reported | `.mustflow/skills/database-migration-change/SKILL.md` | Source schema, target schema, migration files, migration history, generated clients, schema dumps, SQL snapshots, affected queries, deployment shape, database engine, table size or lock assumptions, backfill plan, rollback type, validation query, and command contract entries | Migration files, ORM schemas, generated clients, schema dumps, SQL snapshots, backfill code, validation checks, seeds, fixtures, compatibility code, docs, tests, and directly synchronized examples | data loss, drop-plus-add rename, old/new app incompatibility, unsafe rolling deploy, unbounded backfill, production lock, generated-client drift, migration-history drift, false rollback claim, ORM autogenerate mistake, or destructive contract mixed with expand phase | `changes_status`, `changes_diff_summary`, `lint`, `build`, `test_related`, `test`, `docs_validate_fast`, `test_release`, `mustflow_check` | Migration phase, old/new schema compatibility, backfill and validation plan, rollback classification, ORM/generated/schema dump surfaces, dependent surfaces, verification, and remaining database-migration risk |
184
+ | SQLite-specific schema, query, transaction, migration, indexing, extension, WAL, local-file persistence, embedded database, mobile database, browser OPFS/WASM SQLite, cache index, or SQLite runtime behavior is created, changed, reviewed, or reported | `.mustflow/skills/sqlite-code-change/SKILL.md` | SQLite role, runtime and binding, file ownership, storage medium, concurrency shape, schema/type rules, query/index evidence, migration and recovery needs, changed files, and command contract entries | SQLite schema, queries, connection setup, transactions, pragmas, indexes, migrations, fixtures, tests, docs, and directly synchronized templates | wrong runtime assumption, file-lock surprise, WAL overclaim, network filesystem risk, disabled foreign keys, weak type constraints, unsafe raw SQL, query-plan overclaim, sidecar-file data loss, failed migration rebuild, or unverified backup/restore | `changes_status`, `changes_diff_summary`, `test_related`, `test`, `lint`, `build`, `docs_validate_fast`, `test_release`, `mustflow_check` | SQLite runtime, storage, WAL/concurrency, schema/type/constraint, query/index, migration, backup/restore, verification, and remaining SQLite risk |
185
+ | PostgreSQL-specific schema, query, transaction, migration, indexing, extension, role, row-level security, connection pooling, replication, backup, restore, managed Postgres, or Postgres runtime behavior is created, changed, reviewed, or reported | `.mustflow/skills/postgresql-code-change/SKILL.md` | PostgreSQL role, version, provider, extension inventory, topology, pooler, schema/type rules, query-plan evidence, transaction/retry rules, migration and recovery needs, changed files, and command contract entries | PostgreSQL schema, queries, migrations, generated SQL, connection setup, pool settings, roles, RLS policies, extensions, tests, docs, and directly synchronized templates | version drift, provider constraint miss, connection storm, lock or rewrite surprise, unsafe online DDL claim, bad pooler assumption, RLS bypass, search-path risk, extension drift, stale replica read, query-plan overclaim, or unverified restore | `changes_status`, `changes_diff_summary`, `test_related`, `test`, `lint`, `build`, `docs_validate_fast`, `test_release`, `mustflow_check` | PostgreSQL version/topology, pooling, lock/transaction, schema/type/RLS/role, query/index/statistics, backup/restore, verification, and remaining PostgreSQL risk |
184
186
  | Dependency versions, lockfiles, package-manager metadata, workspace constraints, runtime engines, peer dependencies, optional dependencies, security advisory fixes, generated dependency output, framework plugins, CI actions, Docker base images, package manager behavior, or toolchain versions are upgraded, downgraded, pinned, widened, regenerated, reviewed, or reported | `.mustflow/skills/dependency-upgrade-review/SKILL.md` | Dependency name, old and new versions or ranges, direct or transitive path, ecosystem and package manager, declaration files, lockfiles, runtime or toolchain files, advisory or release-note evidence, generated outputs, callers, docs, package output, Docker or CI surfaces, and command contract entries | Package declarations, lockfiles, generated outputs, compatibility code, tests, docs, package metadata, Docker or CI files, and directly synchronized examples | lockfile churn, hidden transitive replacement, peer or engine break, module-format drift, native or optional package break, framework or generator output drift, unsafe broad security update, weakened tests, Docker or CI runtime drift, or unreviewed supply-chain change | `changes_status`, `changes_diff_summary`, `lint`, `build`, `test_related`, `test`, `docs_validate_fast`, `test_release`, `mustflow_check` | Upgrade reason, ecosystem surface, direct and transitive graph changes, compatibility classification, runtime/peer/engine/module/feature/platform/generated-output risks, synchronized surfaces, verification, and remaining dependency-upgrade risk |
185
187
  | Dependency, package, runtime, framework, tool, command, plugin, service, platform capability, supported-version policy, security patch path, ecosystem maturity claim, maintainer-risk assumption, runtime portability claim, edge or serverless compatibility claim, critical-path library choice, package script, lifecycle hook, binary download, lockfile, audit result, or supply-chain-sensitive dependency surface is assumed, added, removed, imported, invoked, installed, audited, or documented | `.mustflow/skills/dependency-reality-check/SKILL.md` | Assumed dependency or capability, declaration files, version or feature expectation, role criticality, supported-version or end-of-life evidence, patchability expectation, runtime compatibility boundary, maintainer and ecosystem evidence when available, lockfile entry, package script or lifecycle hook, audit or provenance evidence, and relevant command intents | Package metadata, lockfiles, imports, scripts, command contracts, docs, tests, runtime policy notes, portability notes, and reports | unavailable dependency, hallucinated or lookalike package, fragile single-maintainer core dependency, experimental technology in a survival path, unsupported runtime, unclear security patch path, runtime-specific API leakage into core logic, stale version claim, lifecycle script risk, audit suppression, lockfile drift, or install guidance mismatch | `changes_status`, `changes_diff_summary`, `build`, `test_release`, `mustflow_check` | Dependency checked, ecosystem and maintainer-risk boundary reviewed, supported-version, patchability, and runtime-portability boundary reviewed, supply-chain surface reviewed, declarations synchronized, verification, and remaining dependency risk |
186
188
  | Generated or edited code, configuration, CI workflows, package metadata, install instructions, examples, Docker images, framework setup, runtime declarations, toolchain declarations, or migration-sensitive snippets introduce explicit external version references, action refs, package ranges, runtime versions, framework majors, Docker image tags, or scaffold commands that may be stale | `.mustflow/skills/version-freshness-check/SKILL.md` | Versioned reference, owning files, repository version policy, approved freshness source, compatibility context, migration risk, and command contract entries | Package metadata, lockfiles, CI workflows, Dockerfiles, runtime files, framework config, docs, examples, templates, tests, and version-decision reports | stale default version, false latest claim, accidental major migration, repository policy mismatch, unsupported generated example, floating-tag drift, or unverified security/support claim | `changes_status`, `changes_diff_summary`, `build`, `test_related`, `docs_validate_fast`, `test_release`, `mustflow_check` | Versioned surfaces checked, repository policy and freshness source, selected version track, compatibility classification, approval need, synchronized surfaces, verification, and remaining version-freshness risk |
@@ -2,11 +2,11 @@
2
2
  mustflow_doc: skill.performance-budget-check
3
3
  locale: en
4
4
  canonical: true
5
- revision: 15
5
+ revision: 19
6
6
  lifecycle: mustflow-owned
7
7
  authority: procedure
8
8
  name: performance-budget-check
9
- description: Apply this skill when CLI execution duration, build time, bundle size, test execution scheduler bottlenecks, filesystem scanning latency, process spawning overhead, or dependency size budgets are planned, edited, or reported.
9
+ description: Apply this skill when runtime performance, hot paths, user-perceived latency, p95/p99 tail latency, throughput, infrastructure cost, memory, GC pressure, CPU cache locality, allocation churn, bundle size, payload size, media loading, build time, filesystem scanning, process spawning, IPC/RPC/DB/API fan-out, N+1 work, repeated filtering/sorting/parsing/serialization, caching, pagination, queues, virtualization, backpressure, or performance claims are planned, edited, reviewed, or reported.
10
10
  metadata:
11
11
  mustflow_schema: "1"
12
12
  mustflow_kind: procedure
@@ -22,99 +22,165 @@ metadata:
22
22
  - mustflow_check
23
23
  ---
24
24
 
25
- # Performance Budget Check (CLI Core Condensed)
25
+ # Performance Budget Check
26
26
 
27
27
  <!-- mustflow-section: purpose -->
28
28
  ## Purpose
29
29
 
30
- Keep CLI performance claims and execution speed tied to reproducible, measured thresholds instead of qualitative statements.
30
+ Keep performance work focused on the places where cost multiplies: item count, request count, service fan-out, retry count, bytes transferred, bytes copied, objects allocated, rendered nodes, database round trips, filesystem walks, IPC calls, cache misses, branch misses, lock waits, queue backlog, and connection-pool waits.
31
+
32
+ Prefer removing unnecessary work over making unnecessary work slightly faster. A performance change should preserve semantics, name the hot path, and report whether it is measured, inferred from complexity, or still unverified. Do not treat Big-O labels, "hash map", "indexed query", "cache", "queue", or "autoscaling" as proof that a path is fast enough; constant factors, memory layout, runtime dispatch, allocation, locks, external round trips, and shared resource bottlenecks often dominate.
31
33
 
32
34
  <!-- mustflow-section: use-when -->
33
35
  ## Use When
34
36
 
35
- - The task changes or reports CLI build time, bundle size, test scheduling logic, database cache initialization, or command execution duration.
36
- - A change adds heavy dependencies, recursive file-system scanning, command fan-out, or repeated child process spawning (e.g., test harness overhead).
37
- - A test optimization changes process isolation, in-process CLI execution, shared build outputs, or scheduler grouping.
38
- - A report claims that a CLI path is "faster", "optimized", "efficient", or "lightweight".
37
+ - A task changes or reports latency, p95 or p99 tail latency, throughput, infrastructure cost, memory use, GC pressure, CPU cache locality, allocation churn, build time, bundle size, payload size, media loading, CLI duration, test scheduling, cache initialization, filesystem scanning, process spawning, or command execution duration.
38
+ - Code introduces or reviews repeated external access such as DB queries, repository calls, HTTP/RPC calls, Redis calls, S3/object storage calls, IPC commands, filesystem `stat` or scan calls, or child processes.
39
+ - Code filters, sorts, groups, joins, parses, serializes, clones, formats, normalizes, validates, allocates objects, builds DTOs, opens clients or sessions, renders UI lists, or computes projections inside loops or render paths.
40
+ - A change adds caching, memoization, precomputation, derived stores, selectors, virtualized lists, batching, queues, concurrency limits, cancellation, backpressure, debounce, throttle, workers, background jobs, CDN or HTTP caching assumptions, payload reduction, or media optimization for performance reasons.
41
+ - Code uses async work, goroutines, futures, workers, task queues, streams, regexes, date parsing, string construction, exception handling, or logging in a path whose input or traffic can grow.
42
+ - A report claims a path is faster, optimized, efficient, lightweight, responsive, scalable, low-memory, low-overhead, or safe for large input.
39
43
 
40
44
  <!-- mustflow-section: do-not-use-when -->
41
45
  ## Do Not Use When
42
46
 
43
- - The task only changes wording, translations, or docs with no runtime execution impact.
44
- - The numbers represent local mocks or test-only fixtures with no operational baseline meaning.
47
+ - The task only changes wording, translations, or docs with no runtime, package, measurement, or performance claim.
48
+ - The number is only a local fixture value with no performance or public meaning.
49
+ - The change is purely database-engine-specific performance work; use the matching engine skill first, then this skill only for cross-cutting measurement, hot-path, UI, cache, or I/O boundaries.
50
+ - The proposed optimization changes product semantics, authorization, durability, consistency, or user-visible ordering; use the relevant behavior, data, migration, or security skill first.
45
51
 
46
52
  <!-- mustflow-section: required-inputs -->
47
53
  ## Required Inputs
48
54
 
49
- - **Performance Surface**: Target command path, build step, or test scheduling token model.
50
- - **Measurement Method**: The exact execution tool (e.g., in-process execution vs. process spawning).
51
- - **Baseline**: Current execution duration or bundle size before changes.
52
- - **Measured Result**: Post-change metrics under identical sandbox constraints.
53
- - **Isolation Surface**: Shared state touched by the optimization, such as `process.cwd()`, `process.env`, module cache, build output directories, database files, or child processes.
55
+ - Performance surface: request path, command path, render path, build step, batch job, queue, cache, database path, filesystem path, IPC/RPC boundary, or test scheduler.
56
+ - Hot-path shape: expected call frequency, input size, growth direction, nested loops, external round trips, payload size, rendered node count, allocation rate, data layout, branch predictability, lock or pool contention, queue depth, and whether the path runs during user input or startup.
57
+ - Time breakdown evidence: user-visible moment, wall-time split across browser, network, application CPU, DB, cache, external API, queue, filesystem, IPC, serialization, compression, logging, and render work, plus CPU time versus wait time when available.
58
+ - Measurement method or evidence: configured command intent, profiler output, query count, runtime log, trace span, resource metric, benchmark, complexity analysis, or reason the metric is unavailable.
59
+ - Baseline and post-change result when measurable under comparable constraints, including whether the evidence reflects average, p95, p99, cold start, warm cache, realistic data size, or local-only behavior.
60
+ - Saturation evidence: utilization, backlog or queue depth, pool wait, lock wait, retry or error rate, tenant or data skew, and good-period versus bad-period comparison when available.
61
+ - Optimization goal: user-perceived speed, server cost reduction, tail-latency stability, failure isolation, memory headroom, or developer-loop speed.
62
+ - Correctness boundaries: ordering, duplicates, idempotency, partial failure, cancellation, consistency, cache invalidation, stale data, and rollback behavior.
63
+ - Isolation surface: shared state touched by the optimization, such as `process.cwd()`, `process.env`, module cache, build output directories, database files, caches, stores, workers, timers, or child processes.
64
+ - Relevant command-intent contract entries for build, tests, docs, release checks, and mustflow validation.
54
65
 
55
66
  <!-- mustflow-section: preconditions -->
56
67
  ## Preconditions
57
68
 
58
- - The task matches the Use When criteria and does not match the exclusions.
59
- - Standard test suite intent (`test_related` or `test_fast`) is configured and functional.
69
+ - The task matches the Use When conditions and does not match the Do Not Use When exclusions.
70
+ - Higher-priority instructions and `.mustflow/config/commands.toml` have been checked for the current scope.
71
+ - Required inputs are available, or missing inputs can be reported without guessing.
72
+ - If personal data, authorization, tenant isolation, secrets, logs, retention, or audit data is involved, also use `security-privacy-review`.
73
+ - If database schema, query, index, migration, or transaction behavior changes, also use `database-change-safety`, `database-migration-change`, or the matching database engine skill.
74
+ - If UI rendering, layout, accessibility, or user-facing interaction changes, also use `ui-quality-gate`.
60
75
 
61
76
  <!-- mustflow-section: allowed-edits -->
62
77
  ## Allowed Edits
63
78
 
64
- - Tighten budget limits, add performance test fixtures, optimize scheduling tokens, or use in-process helpers instead of spawning heavy child processes.
65
- - Replace fuzzy adjectives ("fast", "responsive") with exact duration (ms/sec) or file weight (KB/MB).
79
+ - Optimize data access, indexing, grouping, projection, batching, scheduling, rendering, cache boundaries, concurrency limits, cancellation, and measurement code tied to the task.
80
+ - Add or tighten performance-oriented tests, fixtures, budgets, metrics, docs, and reports when repository evidence supports them.
81
+ - Replace fuzzy adjectives with measured values or explicitly label the claim as complexity-only or unverified.
82
+ - Do not add speculative caches, memoization, workers, batching, virtualized UI, or concurrency fan-out when the hot path and invalidation boundary are unknown.
83
+ - Do not trade correctness, durability, authorization, privacy, ordering, partial-failure behavior, or user trust for speed without explicit product acceptance.
66
84
 
67
85
  <!-- mustflow-section: procedure -->
68
86
  ## Procedure
69
87
 
70
- 1. Identify if the performance change affects:
71
- - **Build Time**: bundle duration, generated file size, and rebuild behavior.
72
- - **Test Scheduling**: scheduler token capacity, wave grouping, in-process execution, and subprocess fan-out.
73
- - **CLI Boot Time**: Node process startup, module import cost, and command dispatch latency.
74
- 2. Run the narrowest matching oneshot intent (e.g., `build` or `test_related`) to establish a deterministic local baseline.
75
- 3. Before converting process-spawned tests to in-process execution, inventory global process state:
76
- - current working directory reads or writes;
77
- - environment variable mutation;
78
- - `process.argv`, `process.exitCode`, signal handlers, module cache, timers, and singleton caches;
79
- - shared filesystem outputs such as `dist/`, local indexes, or temporary database paths.
80
- 4. Do not use `process.chdir()` as an in-process test isolation strategy when multiple tests can run in the same Node test runner. Use a context-aware current-directory adapter, serialize the affected tests, or keep those tests in separate processes.
81
- 5. Treat build output directories that are deleted and recreated during build as exclusive resources. Lock the build/test runner before rebuilding or reading that output so an overlapping run cannot remove files from a live test process.
82
- 6. Before measuring, check for an already-running build, profile, or test process for the same repository. Stop, wait, or report the overlap before recording timings.
83
- 7. Eliminate process spawning loops. Where possible, invoke core logic directly in-process instead of using heavy CLI shell executions, but only after the isolation surface is controlled.
84
- 8. Measure and document the metrics exactly:
85
- - Command duration (ms or seconds).
86
- - Bundle size (KB or MB) if `dist/` is affected.
87
- 9. Identify any potential platform-specific latency differences (Windows PowerShell vs. Unix sh).
88
- 10. Verify changes using `mustflow_check` and the narrowest test suite intent.
88
+ 1. Name the hot path and cost multiplier. Ask how many times the line runs after multiplying by requests, items, services, retries, renders, files, rows, shards, or queued jobs.
89
+ - Turn "slow" into a numeric budget before choosing a fix. Name the user-visible moment, such as first content, click response, save completion, scroll/input responsiveness, background delivery, batch completion, or developer command duration. State the current and target p50, p95, p99, throughput, memory, payload, or cost when evidence exists.
90
+ - Decompose elapsed time before touching code. Split request, render, command, or job wall time across browser, network, server routing, authorization, application CPU, DB, cache, external APIs, queue wait, filesystem, IPC, serialization, compression, logging, response download, and render. Distinguish CPU time from wait time; high wall time with low CPU means the path is waiting.
91
+ - Find queueing and saturation, not just high utilization. Check utilization, backlog, queue depth, pool waits, lock waits, retry or error rate, and p95/p99 latency together. Compare good periods to bad periods, affected tenants or data sizes, specific workers or replicas, and cold versus warm cache before declaring the bottleneck.
92
+ 2. Rank the likely return on effort before choosing a technique. In typical web or service paths, first check DB/API round-trip count, slow query plans, repeated reads that could be safely cached, work that does not need to block the response, static or media delivery, response payload shape, and then CPU or allocation micro-optimizations. Escalate algorithmic or runtime work early only when the measured hot path is CPU-heavy, data-processing-heavy, render-loop-heavy, or clearly quadratic.
93
+ 3. Do not stop at asymptotic complexity. For `O(N)`, check sequential versus pointer-chasing access, working-set size, branch predictability, per-item allocation, string or Unicode work, runtime dispatch, logging, locks, and external round trips. For `O(log N)`, check node locality, comparator cost, key size, pointer jumps, and branch behavior. For `O(1)` maps or caches, check hash cost, key equality, load factor, resize or rehash spikes, collision behavior, key mutability, cache miss path, and hot-key contention.
94
+ 4. Classify the performance surface:
95
+ - CPU and algorithm: nested loops, repeated lookup, sorting, parsing, formatting, validation, scoring, diffing, search, regex, JSON work, compression, crypto, image processing, context switching, event-loop blocking, runtime dispatch, or CPU throttling.
96
+ - I/O and external boundaries: DB, filesystem, HTTP/RPC, Redis/cache, object storage, IPC, child processes, provider SDKs, DNS, TLS, retransmits, cross-region calls, or load-balancer hot spots.
97
+ - Memory and allocation: object churn, deep clone, DTO conversion, large object graphs, byte/string copies, serialization, boxing, pointer chasing, cache locality, and GC pressure.
98
+ - UI and delivery: unstable references, broad store invalidation, large lists, layout thrashing, image or icon load, font loading, hydration cost, bundle parse or execute time, payload size, input delay, and main-thread work.
99
+ - Concurrency and resilience: pool exhaustion, long transactions, locks, retry storms, queue growth, backpressure, cancellation, partial failure, and shared-resource bottlenecks that autoscaling cannot remove.
100
+ 5. Look for repeated external access first. Loops around repository calls, ORM lazy fields, DB queries, network calls, Redis gets, object storage calls, filesystem stats, IPC commands, or child processes are usually higher risk than local arithmetic.
101
+ 6. Remove N+1 and fan-out before micro-optimizing. Prefer batch loading, bulk APIs, bounded concurrency, preloading, projection, and one request that returns the data shape the caller actually needs.
102
+ 7. Check DB and ORM reality before adding caches. Confirm query count, selected columns, lazy loading, index fit, sort or pagination shape, row estimates, rows examined versus returned, temp sorts or tables, lock waits, transaction duration, replication lag, WAL or checkpoint pressure, and connection-pool waits. Do not use a cache to hide a query shape that should be fixed first. Treat pool size as a safety valve, not a cure for slow queries, long transactions, hot rows, or N+1 access.
103
+ 8. Look for hidden quadratic work. Repeated membership checks, `find`, `filter`, `some`, `contains`, `indexOf`, grouping, or join-like scans inside another loop usually need a lookup table, `Set`, `Map`, sorted merge, or database-side join.
104
+ 9. Choose data structures by actual cost, not labels. Small collections may be faster as arrays or sorted arrays than maps. Large lookup tables should use compact immutable keys, pre-sized capacity when supported, stable hashing and equality, and a memory layout that does not turn every item into a pointer chase.
105
+ 10. Preserve semantics while changing data structures. State whether order, duplicate handling, first versus last winner, tie-breakers, missing records, and stable IDs still match the old behavior.
106
+ 11. Bound reads and materialization. Avoid unbounded `SELECT *`, `findAll`, full filesystem scans, full JSON loads, full array materialization, whole response bodies, and API responses without pagination, projection, chunking, or streaming when data can grow.
107
+ 12. Reduce payload and media work before tuning rendering internals. Send only needed fields, avoid overfetching, split late or optional data, use HTTP caching or CDN only for cacheable assets or responses, and check image dimensions, formats, lazy loading, and fixed layout dimensions before adding component memoization.
108
+ 13. Check sorting and top-k work. Do not sort entire collections when only a top subset is needed. Precompute sort keys when comparison logic parses dates, normalizes strings, computes scores, or reads paths.
109
+ 14. Check pagination semantics. Offset pagination can become linearly slower and can duplicate or skip items on changing data. Prefer stable keyset or cursor semantics when the product does not require arbitrary page jumps.
110
+ 15. Move repeated pure computation out of loops and renders. Normalize queries once, precompute search blobs or numeric timestamps, reuse regexes and formatters, and avoid repeated schema validation after data crosses a trusted boundary.
111
+ 16. Reuse expensive clients and sessions. Do not create HTTP clients, DB clients, ORM clients, SDK clients, regexes, date formatters, connection pools, or thread pools per request, per item, or per render unless the local API explicitly requires that lifecycle.
112
+ 17. Control allocation. Avoid deep clone, JSON round-trip cloning, broad object spread, byte/string round trips, large intermediate arrays, repeated DTO layers, per-item closure or promise creation, exception construction in normal flow, and formatter creation in hot paths.
113
+ 18. Stream or chunk large data. Files, JSONL, CSV, response bodies, object-storage blobs, and generated artifacts should not be read or decoded all at once when size can grow. Prefer bounded buffers, streaming parsers, and projection before serialization; state parser token or line-size limits when they matter.
114
+ 19. Balance async and parallelism. Avoid both accidental sequential waits over independent I/O and unbounded `Promise.all`, goroutine, future, task, or worker fan-out. Use bounded concurrency, connection limits, timeouts, cancellation, and partial-result semantics.
115
+ 20. Keep cache and memoization honest. Add caches only when the input key, invalidation rule, maximum size, TTL or version, stale behavior, and memory budget are explicit. Check stampede, key cardinality, negative caching, remote-cache hit cost, hot-key contention, authorization variance, cold-start behavior, shard or resize warmup, and cache outage behavior.
116
+ 21. Treat queues as latency shifting, not work removal. Queue only work that does not need to block the user or transaction, and define consumer capacity, backlog limits, retry with jitter, idempotency, ordering, poison-message handling, and what happens when the queue is full.
117
+ - During incidents, separate mitigation from root fix. Rate limits, temporary TTL extension, disabling nonessential work, lowering worker concurrency, replica routing, batch delay, or graceful degradation can protect the system, but still record the query, lock, retry, payload, hot-key, shard, or queue-design root cause.
118
+ 22. Keep derived state disposable. Separate source data, lookup indexes, and UI projections. Projection caches should be rebuildable and should not become a second source of truth.
119
+ 23. Keep references stable when rendering. Avoid recreating arrays, objects, context values, store payloads, or item props for unchanged data. Use stable IDs for list keys and virtualize large lists when rendering cost is the bottleneck.
120
+ 24. Keep expensive work off the UI thread or async executor when it blocks progress. Move large parsing, search indexing, thumbnail generation, diffing, compression, crypto, or file processing to a worker, blocking pool, backend, or job queue only when the boundary cost is lower than keeping it local.
121
+ 25. Batch boundary crossings. IPC, RPC, database, filesystem, and provider calls should cross boundaries in meaningful bulk operations, with per-item results, partial-failure behavior, timeout, cancellation, and bounded concurrency.
122
+ - If sharding, partitioning, or row/cache key design appears in the fix, choose keys by load and query pattern rather than business neatness. Check hot tenants, hot counters, sequential row keys, fan-out scatter, resharding cost, cache hit-rate loss after movement, and whether coordinators stay off the hot data path.
123
+ 26. Add backpressure to producer-consumer paths. Queues, watcher events, progress events, sync events, and refresh jobs need capacity, coalescing, latest-only behavior, rejection, degradation, or bounded consumers when production can outrun consumption.
124
+ 27. Handle cancellation and stale async results. Search, refresh, sync, scans, and UI-driven loads need generation tokens or abort signals so old work cannot overwrite newer state.
125
+ 28. Review filesystem and watcher paths. Prefer incremental metadata, debounce, event coalescing, and reconciliation over repeated whole-tree scans. Treat watcher events as hints, not truth.
126
+ 29. Review pool and lock pressure. Shorten DB transactions, release connections before external work, avoid holding locks around slow I/O, avoid one global lock around a growing map or cache, and measure pool acquisition latency when concurrency grows.
127
+ 30. Check retry, timeout, and external dependency behavior. Retries need maximum attempts, exponential backoff, jitter, idempotency, and circuit-breaking or graceful degradation when an external service is slow or unavailable.
128
+ 31. Check logging and telemetry overhead. Avoid serializing large payloads or building expensive log strings on successful hot paths. Metrics and logs also need bounded cardinality and sampling on high-frequency paths. Do not remove useful observability to make numbers look better; good traces, query counts, cache hit rates, queue backlog, pool waits, tenant or shard labels, and retry/error signals are part of the performance surface.
129
+ 32. Run a language and runtime smell pass when applicable:
130
+ - TypeScript and JavaScript: repeated `includes` or `find`, unbounded `Promise.all`, `forEach(async ...)`, ORM N+1, object spread clones, JSON deep clone, repeated `new Date`, `console.log(JSON.stringify(...))`, per-request clients, large sync JSON or file work, and CPU work on the event loop.
131
+ - Go: goroutine per item, missing `context` or timeout, per-call `http.Client`, `io.ReadAll` on growing input, slice growth without capacity, one mutex around a large map, and synchronous logging or formatting in hot loops.
132
+ - Rust: `.clone()` to silence ownership design, unnecessary `collect`, repeated `Regex::new`, `Arc<Mutex<_>>` as a default, `join_all` over unbounded futures, CPU-bound work on async executors, and missing `with_capacity` for large collections.
133
+ - Python: list membership in loops, sequential `requests` calls without session reuse, unbounded `asyncio.gather`, full `read()` or `json.load()` on growing files, `deepcopy`, repeated `datetime.strptime`, f-string logging at disabled levels, row-wise pandas loops, and CPU work on the event loop.
134
+ 33. Measure when possible. Use the narrowest configured command intent that exercises the path. If measurement is unavailable, report the result as complexity evidence rather than a speed claim. Do not compare local microbenchmarks to production user experience unless data size, cache state, network, concurrency, and tail-latency conditions are comparable.
135
+ 34. Treat deploys, restarts, migrations, rebalances, and cache warmups as performance events. A path that is fast only after warm caches, settled JIT, stable replicas, or completed compaction should report cold-start and recovery risk separately from steady-state speed.
136
+ 35. Keep large performance architecture changes separate. Watcher refresh, bulk IPC commands, projection caches, virtualized lists, worker offload, queue introduction, cache layers, CDN behavior, sharding, and storage redesigns should be independent changes unless the repository evidence proves they must land together.
89
137
 
90
138
  <!-- mustflow-section: postconditions -->
91
139
  ## Postconditions
92
140
 
93
- - All speed or weight claims are backed by measured data or explicitly marked as "unverified local estimate".
94
- - No hidden process-spawning bottlenecks or N+1 file scan loops are introduced.
95
- - In-process performance work documents how global process state and shared build outputs are isolated.
141
+ - The hot path, cost multiplier, and affected input scale are explicit.
142
+ - The optimization goal is explicit: user-perceived speed, server cost, p95 or p99 stability, failure isolation, memory headroom, or developer-loop speed.
143
+ - The wall-time breakdown, CPU-versus-wait classification, saturation signal, and resource bottleneck class are explicit when evidence exists.
144
+ - Speed, memory, bundle, payload, query-count, render, CPU locality, allocation, lock, pool, queue, or I/O claims are backed by measurement or labeled as complexity-only.
145
+ - N+1 work, hidden quadratic scans, unbounded materialization, repeated serialization, repeated allocation, client/session churn, broad rendering, and unbounded or accidentally sequential async work are removed or reported.
146
+ - Caches, queues, batching, concurrency, workers, streams, CDN or HTTP caching, media optimization, and projections have invalidation, ordering, duplicate, partial-failure, cancellation, backpressure, capacity, stale-data, and memory behavior defined where relevant.
147
+ - Correctness, security, durability, privacy, and user-visible semantics remain intact or are explicitly reported as tradeoffs.
96
148
 
97
149
  <!-- mustflow-section: verification -->
98
150
  ## Verification
99
151
 
100
- Use configured oneshot command intents:
101
- - `build` (to check bundle weight/correctness)
102
- - `test_related` or `test_fast` (to verify execution speed)
152
+ Use configured oneshot command intents when available:
153
+
154
+ - `changes_status`
155
+ - `changes_diff_summary`
156
+ - `build`
157
+ - `test_related`
158
+ - `docs_validate_fast`
159
+ - `test_release`
103
160
  - `mustflow_check`
104
161
 
162
+ Use the narrowest configured test, build, docs, release, or mustflow intent that proves the changed performance surface. Do not infer raw benchmark, profiler, browser, database, package-manager, server, or watcher commands.
163
+
105
164
  <!-- mustflow-section: failure-handling -->
106
165
  ## Failure Handling
107
166
 
108
- - If local execution hardware makes metrics non-deterministic, state the sandbox CPU/environment variables explicitly.
109
- - If timings are distorted by an orphaned or overlapping process, stop and classify the measurement as invalid before taking a new baseline.
110
- - If correctness conflicts with performance, prioritize correctness, revert the optimization, and report the trade-off.
167
+ - If metrics vary by local hardware or concurrent process load, state the measurement boundary and avoid broad claims.
168
+ - If timings are distorted by an orphaned, overlapping, or stale build/test process, classify the measurement as invalid before taking a new baseline.
169
+ - If the hot path, input scale, or invalidation rule is unknown, prefer a small semantics-preserving cleanup or report the missing evidence instead of adding cache or concurrency complexity.
170
+ - If correctness conflicts with performance, prioritize correctness and report the tradeoff.
171
+ - If configured verification is missing, report the missing command intent instead of inventing a raw command.
111
172
 
112
173
  <!-- mustflow-section: output-format -->
113
174
  ## Output Format
114
175
 
115
- - Performance Surface: [e.g., CLI test-harness in-process runner]
116
- - Measurement Method: [e.g., bun run test:related]
117
- - Baseline Metrics: [e.g., 18.2s execution with process spawning]
118
- - Post-change Metrics: [e.g., 3.8s execution via in-process helper]
119
- - Sync Details: synchronized CLI helpers and test configuration
120
- - Remaining Risks: platform-specific process execution drift under heavy IO
176
+ - Performance surface and hot path
177
+ - Cost multiplier and input scale
178
+ - Time breakdown and resource bottleneck class
179
+ - Optimization goal and ROI priority
180
+ - Performance evidence: measured, complexity-only, or unverified
181
+ - Semantics preserved: order, duplicates, IDs, consistency, partial failure, cancellation, and stale result handling
182
+ - Optimization applied or recommended
183
+ - Cache, queue, batching, concurrency, projection, UI, payload, media, memory, runtime, lock, pool, stream, retry, timeout, deployment, sharding, and I/O notes where relevant
184
+ - Command intents run
185
+ - Skipped measurements and reasons
186
+ - Remaining performance risk
@@ -0,0 +1,157 @@
1
+ ---
2
+ mustflow_doc: skill.postgresql-code-change
3
+ locale: en
4
+ canonical: true
5
+ revision: 1
6
+ lifecycle: mustflow-owned
7
+ authority: procedure
8
+ name: postgresql-code-change
9
+ description: Apply this skill when PostgreSQL-specific schema, query, transaction, migration, indexing, extension, role, row-level security, connection pooling, replication, backup, restore, managed Postgres, or Postgres runtime behavior is created, changed, reviewed, or reported.
10
+ metadata:
11
+ mustflow_schema: "1"
12
+ mustflow_kind: procedure
13
+ pack_id: mustflow.core
14
+ skill_id: mustflow.core.postgresql-code-change
15
+ command_intents:
16
+ - changes_status
17
+ - changes_diff_summary
18
+ - test_related
19
+ - test
20
+ - lint
21
+ - build
22
+ - docs_validate_fast
23
+ - test_release
24
+ - mustflow_check
25
+ ---
26
+
27
+ # PostgreSQL Code Change
28
+
29
+ <!-- mustflow-section: purpose -->
30
+ ## Purpose
31
+
32
+ Keep PostgreSQL changes explicit about server version, operational topology, connection pressure, lock behavior, planner evidence, transaction semantics, role boundaries, extension ownership, and restore reality.
33
+
34
+ PostgreSQL is not just "SQL with more features." Most production damage comes from unbounded locks, accidental table rewrites, connection storms, search-path surprises, extension drift, false rollback claims, or treating managed-service defaults as application design.
35
+
36
+ <!-- mustflow-section: use-when -->
37
+ ## Use When
38
+
39
+ - PostgreSQL schema, queries, indexes, constraints, migrations, generated SQL, transactions, roles, RLS policies, extensions, functions, triggers, views, materialized views, partitions, replication, backups, or restore behavior are introduced, changed, reviewed, or reported.
40
+ - Code uses PostgreSQL through an ORM, query builder, migration tool, driver, connection pool, serverless adapter, PgBouncer, managed Postgres provider, read replica, or extension-backed feature.
41
+ - A task mentions locking, isolation, advisory locks, row locks, deadlocks, serialization retries, `search_path`, RLS, `timestamptz`, JSONB, GIN, GiST, BRIN, full-text search, generated columns, partial indexes, expression indexes, concurrent indexes, partitions, logical replication, PITR, or extension versions.
42
+ - Documentation or final reports claim a PostgreSQL change is online, safe, fast, indexed, scalable, version-compatible, migration-safe, role-safe, or recoverable.
43
+
44
+ <!-- mustflow-section: do-not-use-when -->
45
+ ## Do Not Use When
46
+
47
+ - The task is database-backed but not PostgreSQL-specific; use `database-change-safety`.
48
+ - The task only changes database migrations without PostgreSQL-specific lock, validation, rewrite, generated-output, online-index, or rollout behavior; use `database-migration-change` first.
49
+ - The task only selects or upgrades a Postgres client, ORM, or extension package; use `dependency-reality-check`, `dependency-upgrade-review`, or `version-freshness-check`.
50
+ - The task only changes non-Postgres SQL examples with no project behavior claim.
51
+
52
+ <!-- mustflow-section: required-inputs -->
53
+ ## Required Inputs
54
+
55
+ - PostgreSQL role: primary source of truth, reporting replica, read model, queue store, analytics store, temporary scratch database, or managed-service dependency.
56
+ - Server identity: major and minor version, managed provider constraints, extension inventory and versions, schemas in use, driver, ORM, pooler, and deployment environment.
57
+ - Topology: app instances, worker count, connection pool size, PgBouncer or provider pool mode, read replicas, failover model, backup/PITR expectation, and whether migrations run during rolling deploys.
58
+ - Schema and data rules: constraints, foreign keys, indexes, identity generation, UUID policy, enum or lookup-table choice, JSONB boundaries, timestamp semantics, money or decimal policy, tenant isolation, RLS, and privilege model.
59
+ - Query evidence: affected query paths, representative parameters, row counts or cardinality assumptions when known, plan evidence when available, index usage, sort or join pressure, statistics needs, and read/write frequency.
60
+ - Transaction and retry rules: isolation level, lock expectations, timeout policy, idempotency, external side effects, retryable database failures, and deadlock or serialization handling.
61
+ - Migration and recovery needs: lock or rewrite risk, validation phase, backfill strategy, deploy compatibility, rollback classification, invalid-index cleanup, backup and restore evidence, and dependent services.
62
+ - Relevant command-intent contract entries for tests, builds, docs, release checks, and mustflow validation.
63
+
64
+ <!-- mustflow-section: preconditions -->
65
+ ## Preconditions
66
+
67
+ - The task matches the Use When conditions and does not match the Do Not Use When exclusions.
68
+ - Higher-priority instructions and `.mustflow/config/commands.toml` have been checked for the current scope.
69
+ - If PostgreSQL stores product or customer data, also use `database-change-safety`.
70
+ - If schema or data changes must move from an old shape to a new shape, also use `database-migration-change`.
71
+ - If roles, RLS, tenant isolation, personal data, credentials, audit logs, or retention are involved, also use `security-privacy-review`.
72
+ - If version-specific PostgreSQL features, extensions, managed-provider behavior, or dependency support are asserted, also use `version-freshness-check` or `dependency-reality-check`.
73
+ - If performance, query-time, index, partitioning, or scaling claims are made, also use `performance-budget-check`.
74
+
75
+ <!-- mustflow-section: allowed-edits -->
76
+ ## Allowed Edits
77
+
78
+ - Update PostgreSQL schema, queries, migrations, generated SQL, connection setup, pool settings, roles, RLS policies, extension declarations, tests, docs, and directly synchronized template surfaces tied to the task.
79
+ - Add explicit version, provider, lock, pool, transaction, role, extension, restore, and verification notes when behavior depends on deployment shape.
80
+ - Do not treat this skill as permission to run raw PostgreSQL tools, migration commands, package scripts, admin SQL, live database operations, or provider console actions outside configured command intents.
81
+ - Do not weaken tenant isolation, role separation, durability, backup, or migration safety to make a local test pass.
82
+
83
+ <!-- mustflow-section: procedure -->
84
+ ## Procedure
85
+
86
+ 1. Classify the PostgreSQL role and topology. Name whether the database is primary truth, reporting replica, job store, analytics store, managed provider surface, or temporary store.
87
+ 2. Identify the actual version and provider constraints. Check server major/minor version, official PostgreSQL release notes for version-dependent behavior, extension versions, managed-service limitations, driver behavior, ORM behavior, and pooler mode before relying on new features.
88
+ 3. Check connection pressure. Count app instances, workers, background jobs, migrations, admin tasks, and pooler behavior. Prevent connection storms by bounding pool sizes and avoiding one pool per hot request path or serverless invocation when the platform cannot sustain it.
89
+ 4. Check transaction boundaries. Keep transactions short, avoid user interaction or external I/O while holding locks, and define isolation, timeout, retry, and idempotency behavior for conflicts, deadlocks, and serialization failures.
90
+ 5. Check lock behavior before changing schema. Decide whether an operation blocks reads, writes, both, or only metadata. For live tables, separate expand, backfill, validate, switch, and contract phases when needed.
91
+ 6. Check online index and constraint patterns. Use staged validation or concurrent index patterns when the database and migration tool support them, and respect transaction-boundary restrictions. Plan cleanup for invalid indexes or failed validations.
92
+ 7. Check table rewrites and scans. Type changes, defaults, generated columns, constraints, backfills, and index builds can rewrite or scan large tables. Do not claim production safety without table-size, lock, timeout, and rollout evidence.
93
+ 8. Check schema ownership. Prefer constraints, foreign keys, unique indexes, exclusion constraints, and check constraints for facts the database must enforce. Add child-side foreign-key indexes when query and lock behavior need them.
94
+ 9. Check identity and identifiers. Distinguish identity columns, sequences, UUIDs, natural keys, public ids, provider ids, and idempotency keys. Version-gated UUID generation, sequence ownership, and public-id exposure need explicit decisions.
95
+ 10. Check type semantics. Use `timestamptz` for instants, separate local schedule values from instants, use numeric types intentionally for money and measurements, avoid `money` unless the product accepts its locale and formatting behavior, and avoid JSONB as a dumping ground for query-critical facts.
96
+ 11. Check enum and domain modeling. Database enums are easy to add to but awkward to remove or rename. Use lookup tables or check constraints when lifecycle, localization, tenant customization, or compatibility needs are likely.
97
+ 12. Check JSONB, arrays, full-text, vector, geospatial, and extension-backed features. Confirm extension availability, schema ownership, index type, operator class, query shape, backup/restore inclusion, and exit path before relying on provider-specific convenience.
98
+ 13. Check query plans with real shape. Prefer representative parameters and data distribution. Separate estimates from actual work, inspect filter versus index conditions when plan evidence exists, and add extended statistics when correlated columns mislead the planner.
99
+ 14. Match indexes to workload. Review equality, range, sort, join, partial predicate, expression, multicolumn ordering, GIN/GiST/BRIN tradeoffs, uniqueness, and write amplification. Do not add indexes just because a column is frequently mentioned.
100
+ 15. Check partitioning only with a lifecycle reason. Partitioning helps when pruning, retention, load, or maintenance boundaries match the partition key. It can make queries, uniqueness, foreign keys, and operations worse when added as generic scale theater.
101
+ 16. Check autovacuum and bloat surfaces. Hot updates, dead tuples, long transactions, queue tables, and repeated deletes can hurt plans and storage. If the change increases churn, name vacuum, retention, and batching assumptions.
102
+ 17. Check roles and privileges. Runtime roles should not be owners or superusers. Separate owner, migrator, runtime, read-only, and maintenance roles when the project supports it. Avoid application SQL that depends on a privileged console role.
103
+ 18. Check `search_path` and schema qualification. Do not let untrusted or mutable search paths choose functions, tables, extensions, or security-sensitive objects. Schema-qualify sensitive database objects where local practice requires it.
104
+ 19. Check RLS and tenant isolation. If RLS protects tenant or user data, verify policy coverage for read, write, update, delete, service roles, migrations, maintenance jobs, and bypass paths. Do not treat application filters as equivalent to RLS.
105
+ 20. Check generated SQL and ORM behavior. Review actual generated queries, default transaction wrapping, migration DDL, null handling, relation loading, batching, prepared statement behavior, and pool use. Do not assume the ORM generated the online-safe PostgreSQL pattern.
106
+ 21. Check backup and restore. A useful restore includes roles, owners, privileges, extensions, schemas, sequences, RLS policies, data, jobs, and application smoke behavior. Do not treat app-level exports or ad hoc selects as a PostgreSQL backup.
107
+ 22. Check replication and read replicas. Reads from replicas may be stale. Failover can break session state, advisory locks, prepared statements, and connection pools. Name freshness and failover assumptions when reads or jobs use replicas.
108
+ 23. Select verification from the command contract. Use configured test, build, docs, release, and mustflow intents only; report missing PostgreSQL-specific verification instead of inventing raw database commands.
109
+
110
+ <!-- mustflow-section: postconditions -->
111
+ ## Postconditions
112
+
113
+ - PostgreSQL version, provider, extension, pooler, topology, and role boundaries are explicit.
114
+ - Schema constraints, identity, type, timestamp, JSONB, enum, extension, RLS, and privilege decisions match product rules.
115
+ - Lock, rewrite, validation, online-index, backfill, transaction, retry, and timeout behavior is proven or reported as risk.
116
+ - Query plan, index, statistics, partitioning, autovacuum, bloat, and replica-freshness claims are tied to evidence or marked unverified.
117
+ - Backup, restore, roles, privileges, extension, sequence, and failover assumptions are explicit.
118
+ - Verification uses configured command intents only.
119
+
120
+ <!-- mustflow-section: verification -->
121
+ ## Verification
122
+
123
+ Use configured oneshot command intents when available:
124
+
125
+ - `changes_status`
126
+ - `changes_diff_summary`
127
+ - `test_related`
128
+ - `test`
129
+ - `lint`
130
+ - `build`
131
+ - `docs_validate_fast`
132
+ - `test_release`
133
+ - `mustflow_check`
134
+
135
+ Prefer the narrowest configured test or build intent that exercises the changed PostgreSQL path. Do not infer raw PostgreSQL shell, package-manager, migration, benchmark, backup, or provider-console commands.
136
+
137
+ <!-- mustflow-section: failure-handling -->
138
+ ## Failure Handling
139
+
140
+ - If server version, provider constraints, extension versions, or pooler mode cannot be identified, do not claim feature support or production equivalence.
141
+ - If lock behavior, table size, backfill volume, timeout, or online DDL behavior is unknown, mark the migration or schema change as production-risky.
142
+ - If roles, RLS, `search_path`, or tenant isolation cannot be proven, fail closed or report the security boundary gap.
143
+ - If query-plan evidence is unavailable, avoid claiming an index or rewrite is faster.
144
+ - If backup and restore evidence is missing, do not claim recovery readiness.
145
+ - If configured verification is missing, report the missing command intent instead of running raw database or provider commands.
146
+
147
+ <!-- mustflow-section: output-format -->
148
+ ## Output Format
149
+
150
+ - PostgreSQL role, version, provider, extension, and topology inspected
151
+ - Pooling, transaction, lock, retry, timeout, and migration classification
152
+ - Schema, identity, type, timestamp, JSONB, enum, constraint, RLS, role, and privilege decisions
153
+ - Query plan, index, statistics, partitioning, autovacuum, bloat, and replica notes
154
+ - Backup, restore, failover, and managed-provider status
155
+ - Command intents run
156
+ - Skipped PostgreSQL checks and reasons
157
+ - Remaining PostgreSQL risk
@@ -288,6 +288,18 @@ route_type = "primary"
288
288
  priority = 82
289
289
  applies_to_reasons = ["code_change", "data_change", "migration_change", "public_api_change", "test_change", "docs_change", "security_change"]
290
290
 
291
+ [routes."sqlite-code-change"]
292
+ category = "data_external"
293
+ route_type = "primary"
294
+ priority = 86
295
+ applies_to_reasons = ["code_change", "data_change", "migration_change", "behavior_change", "test_change", "docs_change", "security_change", "performance_change"]
296
+
297
+ [routes."postgresql-code-change"]
298
+ category = "data_external"
299
+ route_type = "primary"
300
+ priority = 86
301
+ applies_to_reasons = ["code_change", "data_change", "migration_change", "behavior_change", "public_api_change", "test_change", "docs_change", "security_change", "performance_change"]
302
+
291
303
  [routes."dependency-upgrade-review"]
292
304
  category = "data_external"
293
305
  route_type = "primary"
@@ -352,7 +364,7 @@ applies_to_reasons = ["formatting_change"]
352
364
  category = "general_code"
353
365
  route_type = "adjunct"
354
366
  priority = 70
355
- applies_to_reasons = ["performance_change"]
367
+ applies_to_reasons = ["performance_change", "code_change", "data_change", "ui_change", "behavior_change"]
356
368
 
357
369
  [routes."vertical-slice-tdd"]
358
370
  category = "tests"
@@ -0,0 +1,155 @@
1
+ ---
2
+ mustflow_doc: skill.sqlite-code-change
3
+ locale: en
4
+ canonical: true
5
+ revision: 1
6
+ lifecycle: mustflow-owned
7
+ authority: procedure
8
+ name: sqlite-code-change
9
+ description: Apply this skill when SQLite-specific schema, query, transaction, migration, indexing, extension, WAL, local-file persistence, embedded database, mobile database, browser OPFS/WASM SQLite, cache index, or SQLite runtime behavior is created, changed, reviewed, or reported.
10
+ metadata:
11
+ mustflow_schema: "1"
12
+ mustflow_kind: procedure
13
+ pack_id: mustflow.core
14
+ skill_id: mustflow.core.sqlite-code-change
15
+ command_intents:
16
+ - changes_status
17
+ - changes_diff_summary
18
+ - test_related
19
+ - test
20
+ - lint
21
+ - build
22
+ - docs_validate_fast
23
+ - test_release
24
+ - mustflow_check
25
+ ---
26
+
27
+ # SQLite Code Change
28
+
29
+ <!-- mustflow-section: purpose -->
30
+ ## Purpose
31
+
32
+ Keep SQLite changes honest about the real runtime, file ownership, concurrency shape, type semantics, query plan, durability, and recovery path.
33
+
34
+ SQLite is not "small PostgreSQL." It is an embedded library plus a database file. Most mistakes come from pretending it has a server, a remote connection pool, unlimited concurrent writers, or identical feature support in every binding.
35
+
36
+ <!-- mustflow-section: use-when -->
37
+ ## Use When
38
+
39
+ - SQLite schema, migrations, queries, indexes, transactions, connection setup, pragmas, journal mode, backup, restore, cache index, or local database files are introduced, changed, reviewed, or reported.
40
+ - A project uses SQLite through an ORM, native binding, bundled library, system library, mobile SDK, Electron or desktop app, WebAssembly build, OPFS-backed browser storage, or Cloudflare/D1-like SQLite surface.
41
+ - A task mentions WAL, foreign keys, `STRICT`, JSON, JSONB, FTS, RTree, generated columns, expression indexes, partial indexes, upsert, busy handling, checkpoints, vacuuming, attached databases, or live database backups.
42
+ - Code treats SQLite as source of truth, rebuildable cache, offline-first store, local search index, test database, edge database, or synchronization replica.
43
+ - Documentation or final reports claim a SQLite change is durable, concurrent, portable, fast, indexed, version-compatible, migration-safe, or recoverable.
44
+
45
+ <!-- mustflow-section: do-not-use-when -->
46
+ ## Do Not Use When
47
+
48
+ - The task is database-backed but not SQLite-specific; use `database-change-safety`.
49
+ - The task only changes database migrations without engine-specific SQLite behavior; use `database-migration-change` first and this skill only for SQLite-specific lock, rewrite, file, pragma, or runtime details.
50
+ - SQLite appears only as an implementation detail of mustflow's own local index and the change is about command authority or generated search metadata rather than SQLite behavior.
51
+ - The task is only dependency version research for a SQLite binding; use `dependency-reality-check` or `version-freshness-check`.
52
+
53
+ <!-- mustflow-section: required-inputs -->
54
+ ## Required Inputs
55
+
56
+ - SQLite role: source of truth, local-only cache, read model, sync replica, test fixture, analytics scratch store, or packaged seed database.
57
+ - Runtime identity: SQLite library version, binding or driver, bundled versus system library, compile options when observable, and whether the runtime is native, mobile, WASM, OPFS, edge-hosted, or managed.
58
+ - File ownership: database path, storage medium, backup surface, whether the file is local disk, ephemeral storage, synced folder, network filesystem, container volume, mobile sandbox, or browser origin storage.
59
+ - Concurrency shape: process count, thread model, expected write bursts, single-writer acceptance, busy timeout or retry policy, transaction length, checkpoint owner, and whether readers must keep working during writes.
60
+ - Schema and data rules: foreign key enforcement, affinity expectations, `STRICT` use, `CHECK` constraints, uniqueness, rowid policy, timestamp policy, generated columns, JSON validity, collation, and null semantics.
61
+ - Query and index evidence: affected query paths, expected filters, joins, sorts, counts, pagination, full-text search needs, `EXPLAIN QUERY PLAN` observations when available, and write-cost tradeoffs.
62
+ - Migration and recovery needs: `user_version` or migration ledger, rebuild versus in-place migration, live-data backup method, integrity checks, rollback expectation, and sidecar file handling.
63
+ - Relevant command-intent contract entries for tests, builds, docs, release checks, and mustflow validation.
64
+
65
+ <!-- mustflow-section: preconditions -->
66
+ ## Preconditions
67
+
68
+ - The task matches the Use When conditions and does not match the Do Not Use When exclusions.
69
+ - Higher-priority instructions and `.mustflow/config/commands.toml` have been checked for the current scope.
70
+ - If SQLite stores product or customer data, also use `database-change-safety`.
71
+ - If SQLite schema or data must move from an old shape to a new shape, also use `database-migration-change`.
72
+ - If runtime versions, bundled binaries, packages, or extension availability are asserted, also use `version-freshness-check` or `dependency-reality-check`.
73
+ - If personal data, secrets, audit logs, retention, tenant isolation, or local-device privacy are involved, also use `security-privacy-review`.
74
+
75
+ <!-- mustflow-section: allowed-edits -->
76
+ ## Allowed Edits
77
+
78
+ - Update SQLite schema, query, connection setup, transaction handling, pragmas, indexes, migrations, fixtures, tests, docs, and directly synchronized template surfaces tied to the task.
79
+ - Add explicit runtime, file, concurrency, migration, backup, and verification notes when SQLite behavior depends on deployment shape.
80
+ - Do not treat a SQLite skill as permission to run raw SQLite tools, migration commands, package scripts, or live database operations outside configured command intents.
81
+ - Do not delete, rewrite, copy, or vacuum live database files unless the user explicitly asked and the repository has a configured, safe command intent or documented manual boundary.
82
+ - Do not use SQLite-specific behavior to silently weaken authorization, tenant scope, durability, privacy, or migration expectations.
83
+
84
+ <!-- mustflow-section: procedure -->
85
+ ## Procedure
86
+
87
+ 1. Classify the SQLite role. Decide whether the database is authoritative, disposable, a local replica, or a generated index. If clearing the file loses product meaning, treat it as durable data.
88
+ 2. Identify the actual runtime before relying on features. Check the binding, bundled or system SQLite library, compile options when observable, and official SQLite release history for any version-dependent feature. Do not assume the newest SQLite documentation matches the deployed runtime.
89
+ 3. Check deployment file reality. A local SQLite file behaves differently on laptop disk, mobile sandbox, container volume, synced folder, network filesystem, browser OPFS, and ephemeral serverless storage. Report unsupported or unproven storage shapes.
90
+ 4. Decide concurrency honestly. SQLite permits many readers and one writer. WAL improves reader/writer coexistence; it does not turn SQLite into a multi-writer server. Keep write transactions short, avoid external I/O inside transactions, and define busy handling or retry behavior.
91
+ 5. Check connection lifecycle. Prefer a small, explicit connection strategy that matches the binding. Avoid accidental many-writer pools, global hidden connections, or per-request open/close churn when the local pattern already owns connection reuse.
92
+ 6. Check durability pragmas. Treat journal mode, synchronous behavior, temp store, locking mode, cache size, mmap, checkpointing, and vacuum settings as deployment choices. Do not disable journaling or durability for source-of-truth data unless the loss model is explicit and accepted.
93
+ 7. Check foreign keys and constraints. SQLite foreign key enforcement can depend on connection setup. Verify it is enabled where needed, and encode important invariants with constraints instead of relying only on application checks.
94
+ 8. Check type semantics. SQLite affinity is permissive unless the schema uses stricter constructs. Use `STRICT`, `CHECK`, generated columns, and canonical serialization where the product needs predictable booleans, timestamps, decimal values, JSON validity, enums, or identifiers.
95
+ 9. Check row identity. Decide rowid, integer primary key, autoincrement, UUID, natural key, or composite identity intentionally. Do not assume autoincrement semantics match other databases.
96
+ 10. Check SQL construction. Bind values through the local driver or ORM. Build identifiers only from allowlisted names. Do not concatenate user input into raw SQL, FTS queries, pragma names, attached database names, or file paths.
97
+ 11. Check upsert and conflict behavior. Make uniqueness constraints match the intended conflict target, and define whether a conflict should insert, update, ignore, or fail. Check triggers and change counters when application behavior depends on affected-row counts.
98
+ 12. Check JSON and extension features. JSON, JSONB, FTS, RTree, generated columns, expression indexes, partial indexes, session/change-set features, and vector or custom extensions require runtime support and real query need. Gate them by deployed runtime, binding exposure, and migration fallback.
99
+ 13. Check full-text search separately from ordinary indexes. FTS tables need their own content ownership, tokenizer behavior, rebuild path, delete/update handling, and query escaping. Do not treat FTS output as product truth unless the architecture says so.
100
+ 14. Match indexes to the actual workload. Review filters, joins, sorts, pagination, uniqueness, and write cost. Use query-plan evidence when available, but do not snapshot `EXPLAIN QUERY PLAN` text as a public API.
101
+ 15. Bound reads and writes. Avoid unbounded scans, unbounded result sets, N+1 loops, high-cardinality counts on hot paths, and row-by-row writes when batching is safer.
102
+ 16. Check migrations with SQLite limits in mind. Some schema changes require table rebuilds. Preserve data, indexes, triggers, foreign keys, generated columns, collations, and constraints during rebuilds. Keep the migration ledger or `user_version` synchronized.
103
+ 17. Check live backup and restore. Use an official backup-style approach or a proven application backup path. Do not copy only the main database file while WAL or shared-memory sidecar files may contain live state. Do not delete sidecar files as "cleanup."
104
+ 18. Check integrity and recovery. For durable data, define integrity checks, crash recovery assumptions, restore rehearsal status, and what happens after partial writes, disk-full errors, lock timeouts, interrupted migrations, and failed checkpoints.
105
+ 19. Check portability. SQLite SQL, pragmas, collations, extensions, and date/time behavior do not automatically port to PostgreSQL or other engines. If portability is a goal, name the accepted SQLite-specific decisions.
106
+ 20. Select verification from the command contract. Use configured test, build, docs, release, and mustflow intents only; report missing SQLite-specific verification instead of inventing raw database commands.
107
+
108
+ <!-- mustflow-section: postconditions -->
109
+ ## Postconditions
110
+
111
+ - SQLite runtime, binding, file owner, deployment storage, and feature gates are explicit.
112
+ - Source-of-truth, cache, replica, or generated-index role is named.
113
+ - Transaction length, busy handling, write concurrency, WAL/checkpoint ownership, and durability settings are intentional.
114
+ - Schema constraints, affinity, foreign keys, identity, JSON, FTS, indexes, and migration behavior match product rules.
115
+ - Backup, restore, sidecar-file, integrity, and portability risks are proven or reported as unverified.
116
+ - Verification uses configured command intents only.
117
+
118
+ <!-- mustflow-section: verification -->
119
+ ## Verification
120
+
121
+ Use configured oneshot command intents when available:
122
+
123
+ - `changes_status`
124
+ - `changes_diff_summary`
125
+ - `test_related`
126
+ - `test`
127
+ - `lint`
128
+ - `build`
129
+ - `docs_validate_fast`
130
+ - `test_release`
131
+ - `mustflow_check`
132
+
133
+ Prefer the narrowest configured test or build intent that exercises the changed SQLite path. Do not infer raw SQLite shell, package-manager, migration, benchmark, or backup commands.
134
+
135
+ <!-- mustflow-section: failure-handling -->
136
+ ## Failure Handling
137
+
138
+ - If the actual SQLite runtime or binding cannot be identified, do not claim version-specific feature support.
139
+ - If storage is ephemeral, networked, synced, or shared across machines, do not claim ordinary SQLite durability or locking safety without project-specific proof.
140
+ - If concurrent writes, long transactions, WAL checkpointing, or busy handling are unknown, report the concurrency risk instead of assuming defaults are fine.
141
+ - If foreign keys, constraints, or `STRICT` behavior cannot be confirmed, avoid claiming data integrity.
142
+ - If backup, restore, migration idempotency, or sidecar-file handling cannot be proven, mark recovery as unverified.
143
+ - If configured verification is missing, report the missing command intent instead of running raw database commands.
144
+
145
+ <!-- mustflow-section: output-format -->
146
+ ## Output Format
147
+
148
+ - SQLite role and runtime inspected
149
+ - File ownership, storage, WAL, and concurrency classification
150
+ - Schema, type, constraint, identity, JSON, FTS, and index decisions
151
+ - Transaction, busy handling, durability, checkpoint, and migration notes
152
+ - Backup, restore, integrity, portability, and sidecar-file status
153
+ - Command intents run
154
+ - Skipped SQLite checks and reasons
155
+ - Remaining SQLite risk
@@ -1,6 +1,6 @@
1
1
  id = "default"
2
2
  name = "default"
3
- version = "2.30.0"
3
+ version = "2.31.0"
4
4
  description = "Minimal workflow for LLM agents to read, edit, and verify their work in a repository."
5
5
  common_root = "common"
6
6
  locales_root = "locales"
@@ -55,6 +55,8 @@ creates = [
55
55
  ".mustflow/skills/date-number-audit/SKILL.md",
56
56
  ".mustflow/skills/database-change-safety/SKILL.md",
57
57
  ".mustflow/skills/database-migration-change/SKILL.md",
58
+ ".mustflow/skills/sqlite-code-change/SKILL.md",
59
+ ".mustflow/skills/postgresql-code-change/SKILL.md",
58
60
  ".mustflow/skills/dependency-injection/SKILL.md",
59
61
  ".mustflow/skills/dependency-reality-check/SKILL.md",
60
62
  ".mustflow/skills/dependency-upgrade-review/SKILL.md",
@@ -173,6 +175,8 @@ minimal = [
173
175
  "date-number-audit",
174
176
  "database-change-safety",
175
177
  "database-migration-change",
178
+ "sqlite-code-change",
179
+ "postgresql-code-change",
176
180
  "dependency-reality-check",
177
181
  "dependency-upgrade-review",
178
182
  "version-freshness-check",
@@ -239,6 +243,8 @@ patterns = [
239
243
  "date-number-audit",
240
244
  "database-change-safety",
241
245
  "database-migration-change",
246
+ "sqlite-code-change",
247
+ "postgresql-code-change",
242
248
  "dependency-injection",
243
249
  "dependency-reality-check",
244
250
  "dependency-upgrade-review",
@@ -316,6 +322,8 @@ oss = [
316
322
  "date-number-audit",
317
323
  "database-change-safety",
318
324
  "database-migration-change",
325
+ "sqlite-code-change",
326
+ "postgresql-code-change",
319
327
  "dependency-injection",
320
328
  "dependency-reality-check",
321
329
  "dependency-upgrade-review",
@@ -405,6 +413,8 @@ team = [
405
413
  "date-number-audit",
406
414
  "database-change-safety",
407
415
  "database-migration-change",
416
+ "sqlite-code-change",
417
+ "postgresql-code-change",
408
418
  "dependency-injection",
409
419
  "dependency-reality-check",
410
420
  "dependency-upgrade-review",
@@ -480,6 +490,8 @@ product = [
480
490
  "date-number-audit",
481
491
  "database-change-safety",
482
492
  "database-migration-change",
493
+ "sqlite-code-change",
494
+ "postgresql-code-change",
483
495
  "dependency-injection",
484
496
  "dependency-reality-check",
485
497
  "dependency-upgrade-review",
@@ -563,6 +575,8 @@ library = [
563
575
  "date-number-audit",
564
576
  "database-change-safety",
565
577
  "database-migration-change",
578
+ "sqlite-code-change",
579
+ "postgresql-code-change",
566
580
  "dependency-injection",
567
581
  "dependency-reality-check",
568
582
  "dependency-upgrade-review",