softr-vibe-coding 1.4.0 → 1.5.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/CHANGELOG.md CHANGED
@@ -4,6 +4,9 @@ All notable changes to this skill are documented here. Versions follow [Semantic
4
4
 
5
5
  Entries from 1.3.1 onward are generated automatically from git commit subjects between version bumps (see `.github/workflows/publish.yml`). Entries before 1.3.1 were backfilled by hand from the existing commit history.
6
6
 
7
+ ## [1.5.0] - 2026-05-21
8
+ - Document write-side Action-disabled failure when a q.select alias references a renamed/missing Airtable column — extend datasources/airtable.md "Maintainability gotcha" with read-vs-write asymmetry (reads silently degrade, writes silently disable the entire Action), add the bisection diagnostic procedure for the "No actions used in this block yet" symptom, and add an anti-patterns Mutations-table row citing the verified 2026-05-21 Photos→Before Photos case; bump to 1.5.0
9
+
7
10
  ## [1.4.0] - 2026-05-21
8
11
  - Document Softr Database MCP server — add references/softr-database-mcp.md (sibling to references/airtable-automations.md) covering connection, OAuth + PAT auth, Claude Code install, three permission scopes, 20 tools, why-it-matters for Vibe Coding, and the Softr-DB-only scope limitation; leave a short pointer in datasources/softr-database.md; promote MCP to option 1 for Softr DB field-ID discovery in datasources/fields.md; update SKILL.md Reference Guides table; add README TL;DR bullet, "What's Included" tree entry, and overview.md Key Concepts note; bump to 1.4.0
9
12
 
@@ -31,7 +31,16 @@ Column names are case-sensitive and must match the Airtable header exactly.
31
31
 
32
32
  ### Maintainability gotcha
33
33
 
34
- Renaming a column in Airtable breaks the block **silently**. The alias just stops resolving -- no error, no warning, the field becomes `undefined`. Three mitigations, in order of effort:
34
+ Renaming a column in Airtable breaks the block **silently**. The failure mode depends on whether the alias is used for reads or writes:
35
+
36
+ - **Read side** (`useRecords` / `useRecord` / `useLinkedRecords`): the alias stops resolving — no error, the field becomes `undefined`. Other fields in the same `q.select()` still load fine. Partial behaviour.
37
+ - **Write side** (`useRecordCreate` / `useRecordUpdate` `q.select`): the parser silently rejects the **entire** Action. Studio's Actions tab shows "No actions used in this block yet", `createRecord.enabled` / `updateRecord.enabled` stays `false`, and `.mutate()` calls fail with "not yet ready" / "create action is not yet ready". Every field in that `q.select()` is lost, even the valid ones. All-or-nothing.
38
+
39
+ The asymmetry matters because reads silently degrade while writes silently disable. A renamed column on a list view shows blank cells; the same rename on a create helper bricks the whole submit flow with no console error.
40
+
41
+ **Diagnosing a disabled write Action** (the "No actions used" symptom): bisect the `q.select()`. Strip it down to a known-good minimal set (4–6 fields that you're sure exist), confirm the Action shows up in Studio's Actions tab, then add fields back in halves until the Action drops out. The culprit is in the last half added. Once narrowed to a single field, grep that field name against the freshest schema export — almost always a rename, a trailing space, or a case mismatch.
42
+
43
+ **Three mitigations, in order of effort:**
35
44
 
36
45
  1. **Document the field ID alongside the name** in `q.select()` comments. A grep for the field ID then finds every block affected by a rename:
37
46
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "softr-vibe-coding",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "description": "Claude Code skill for generating production-ready Softr Vibe Coding blocks (JSX). Installs into ~/.claude/skills/ and auto-updates on each Claude Code session.",
5
5
  "bin": {
6
6
  "softr-vibe-coding": "./bin/cli.js"
@@ -31,6 +31,7 @@ Run through this catalog before delivering any block. Every row is a violation o
31
31
  | Linked record as plain string | Must be `[{ id: "..." }]` array |
32
32
  | Writing dropdown values as `{ id, label }` objects (the read shape) | Write the option UUID as a plain string -- e.g. `status: "822b8d69-..."`, not `status: { id: "...", label: "..." }` |
33
33
  | Treating Studio's Actions tab as a separately-managed configuration to keep in sync with code | Actions auto-derive from your `useRecordCreate`/`useRecordUpdate`/`useRecordDelete` + `q.select` on every save. The Actions tab is a read-only inspector; there is no manual delete control. To change an Action, change the code |
34
+ | One alias in a write-side `q.select` referencing a renamed / non-existent Airtable column | Softr's Action parser silently rejects the **entire** create/update Action — not just the bad alias. Symptoms: Studio's Actions tab shows "No actions used in this block yet", `createRecord.enabled` / `updateRecord.enabled` stays `false`, `.mutate()` calls dispatch but resolve immediately to "not yet ready". Every OTHER field in the same `q.select()` is also lost, even the ones that map cleanly. Diagnostic: bisect the `q.select` — strip down to a known-good minimal set, confirm the Action appears in Studio, then add fields back in halves until it drops out. The culprit is in the last half added. Once narrowed to a single field, grep its name against the freshest Airtable schema export to catch the rename / trailing-space / case-mismatch. Verified 2026-05-21: a `"Photos"` column on Wigs was renamed to `"Before Photos"`, the helper that wrote `photos: "Photos"` had its entire Action disabled even though 11 other fields in the same `q.select` were fine. See [datasources/airtable.md](../datasources/airtable.md#maintainability-gotcha) |
34
35
 
35
36
  ## Field Values
36
37