Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions .seo/briefs/migrate-agent-dataset-business-key.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# SEO brief: migrate an AI-agent dataset to a business key

- **Date:** 2026-08-04
- **Primary keyword:** business key database
- **Secondary queries:** database primary key migration; AI agent data migration; agent dataset
index migration
- **Type:** how-to / operational decision guide
- **Why selected:** The current backlog's remaining measured candidates are explicitly deferred
for overlap, authority, or product-fit reasons. The coverage map names generated-index migration
patterns as the highest-priority open product-native gap.
- **Measured signal:** DataForSEO reports 10 US searches/month for `business key database`; KD is
unavailable. The exact migration terms were unmeasured. The live `database primary key
migration` SERP contains an AI Overview, primary vendor documentation, Stack Exchange/forum
results, and PAA questions about changing a primary key.
- **Product-led thesis:** A Rowset user who outgrows generated `rowset_id` needs a safe migration
path that preserves agent lookups, retries, relationships, and rollback. Rowset can credibly
support the mapping, destination, verification, and cutover records without claiming in-place
index replacement.

## Information gain

The post introduces a five-phase identity migration contract for agent-managed datasets: map,
mirror, verify, cut over, and retire. It adds agent-specific controls absent from the broad SQL
migration SERP: a durable old-to-new key map, deterministic mirroring, relationship translation,
agent configuration cutover, canary verification, and a read-only rollback window.

## Table stakes and gap

- **Table stakes:** define stable/unique/non-null identity; audit key-shape assumptions; create a
target schema; backfill; validate; cut over; retain rollback.
- **SERP gap:** existing results focus on engine-level DDL or vendor-specific key shape. They do
not explain how long-running AI agents, retries, prompts, relationship values, and tool
configuration depend on row identity.

## Verified claim ledger

| Claim | Source | Tier/date | Status |
|---|---|---|---|
| PostgreSQL primary keys require unique, non-null values. | https://www.postgresql.org/docs/current/ddl-constraints.html | primary; checked 2026-08-04 | verified primary |
| Key migrations must audit application reliance on key ordering and shape. | https://docs.cloud.google.com/spanner/docs/primary-keys-overview | primary; checked 2026-08-04 | verified primary |
| Rowset adds a generated `rowset_id` when `index_column` is omitted. | https://rowset.lvtd.dev/docs/dataset-api and `apps/api/services.py` | primary product; checked 2026-08-04 | verified in live docs and repo |
| Rowset generated index values are managed and cannot be patched. | `apps/api/row_mutations.py` and product tests | primary product; checked 2026-08-04 | verified in repo |
| Rowset generated index columns cannot be renamed, and index columns cannot be dropped. | https://rowset.lvtd.dev/docs/design-schema and schema mutation tests | primary product; checked 2026-08-04 | verified in live docs and repo |
| Dataset creation accepts at most 1,000 initial rows. | https://rowset.lvtd.dev/docs/dataset-api and API service validation | primary product; checked 2026-08-04 | verified in live docs and repo |

## Entity and question map

- business key, generated ID, primary key, Rowset index column
- one-to-one key mapping, uniqueness, non-null identity, normalization
- snapshot boundary, backfill, mirrored writes, read-back, reconciliation
- relationship translation, cutover, canary, rollback, archival
- PAA: How do you change a primary key? What is a database migration? What is a primary key?

## AI SEO side check

- Direct answer and liftable five-step process appear before the first H2.
- Each important factual claim is attributed to a primary or product source.
- Published/updated dates and `BlogPosting` schema are provided by the existing blog surface.
- FAQ answers are self-contained; headings match process and decision queries.

## Product-led SEO side check

- User job: preserve exact row identity while an agent-managed workflow moves to a business key.
- Product surface: Dataset API, MCP, schema instructions, by-index operations, private migration
datasets, and archive/rollback.
- Credible angle: Rowset's generated-index behavior and agent-native dataset contract are
inspectable in its source and docs.
- Business path: internal links connect the guide to setup docs, row operations, schema design,
related identity content, and pricing.
4 changes: 2 additions & 2 deletions .seo/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,10 @@
"content_ledger_dataset_key": "9ae7d0d3-1138-43a0-b3b8-aa05fac12a96",
"research_briefs_dataset_key": "3a004cfa-0a7e-4c3a-a517-caca902f38d6",
"schema_version": 1,
"last_sync_at": "2026-08-03"
"last_sync_at": "2026-08-04"
},
"created_at": "2026-07-04",
"updated_at": "2026-08-03",
"updated_at": "2026-08-04",
"notes": [
"Initialized from latest origin/main after fast-forwarding from c11f1de to 2d9389b.",
"Refreshed from current origin/main b93e5d6 with GSC, Plausible, PostHog, DataForSEO, Exa, Firecrawl, Jina, and live HTTP checks on 2026-07-15.",
Expand Down
4 changes: 3 additions & 1 deletion .seo/content-ledger.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
| 2026-08-01 | AI Data Collection: A Reviewable Agent Workflow | how-to / operational guide | `/blog/ai-data-collection` | AI data collection | 210 | 2 | agent-managed datasets, data entry, source registry, checkpoints, provenance, schema design, MCP, Dataset API, pricing | #391 |
| 2026-08-02 | MCP OAuth vs API Keys: Choose the Right Auth | comparison / decision guide | `/blog/mcp-oauth-vs-api-keys` | MCP OAuth | 390 | 9 | MCP setup, agent access, MCP vs REST, safe sharing, pricing | #392 |
| 2026-08-03 | AI Agent Structured Output: Validate Before You Store | how-to / operational decision guide | `/blog/ai-agent-structured-output` | AI agent structured output | unmeasured | n/a | schema design, data entry, idempotent updates, MCP, Dataset API, pricing | #396 |
| 2026-08-04 | Migrate an AI-Agent Dataset to a Business Key | how-to / operational decision guide | `/blog/migrate-agent-dataset-business-key` | business key database | 10 | n/a | index-column guide, rowset_id vs business keys, schema design, row operations, idempotent updates, MCP, pricing | #397 |

---

Expand Down Expand Up @@ -71,14 +72,15 @@
| 24 | MCP authentication | pillar / implementation guide | MCP authentication | 720 | 21 | navigational | 17 | Defer: measured demand is strong, but KD exceeds the conservative authority band and the SERP is dominated by protocol and platform documentation. Revisit after this narrower OAuth decision guide earns traction. |
| 25 | MCP security best practices | security guide | MCP security best practices | 110 | 27 | commercial | 14 | Defer: KD is above the current authority band and the broad topic would overlap existing safe-sharing, approval, audit, and authentication content. |
| 26 | AI agent structured output | how-to / operational decision guide | AI agent structured output | unmeasured | n/a | implementation / informational | shipped (19) | Selected 2026-08-03 after live SERP research. Product-led angle: a shape -> meaning -> write contract that connects provider schema output to staged, retry-safe Rowset rows without treating valid JSON as proof of correctness. |
| 27 | Migrate an AI-agent dataset to a business key | how-to / operational decision guide | business key database | 10 | n/a | commercial / implementation | shipped (18) | Selected 2026-08-04 from the coverage map's highest-priority open product-native gap. Differentiated with a map -> mirror -> verify -> cut over -> retire identity migration contract. |

---

## Coverage Map

| Cluster / theme | Pieces shipped | Gaps still open |
|---|---|---|
| Agent-managed datasets | `/blog/agent-managed-datasets`, `/blog/choose-index-column-agent-rows`, `/blog/structure-dataset-instructions-ai-agents`, `/blog/rowset-id-vs-business-keys`, `/blog/relationship-modeling-agent-datasets`, `/blog/ai-agent-memory-vs-state`, `/blog/idempotent-ai-agent-updates`, `/blog/share-ai-agent-data-safely`, `/blog/human-in-the-loop-ai-agents`, `/blog/ai-agent-audit-trail`, `/blog/database-for-ai-agents`, `/blog/ai-data-cleaning-agent`, `/blog/ai-agent-crm`, `/blog/ai-agent-task-management`, `/blog/ai-agent-inventory-management`, `/blog/ai-customer-feedback-analysis`, `/blog/ai-ready-data`, `/blog/ai-agent-data-entry`, `/blog/ai-data-collection` | Generated-index migration patterns |
| Agent-managed datasets | `/blog/agent-managed-datasets`, `/blog/choose-index-column-agent-rows`, `/blog/structure-dataset-instructions-ai-agents`, `/blog/rowset-id-vs-business-keys`, `/blog/relationship-modeling-agent-datasets`, `/blog/ai-agent-memory-vs-state`, `/blog/idempotent-ai-agent-updates`, `/blog/share-ai-agent-data-safely`, `/blog/human-in-the-loop-ai-agents`, `/blog/ai-agent-audit-trail`, `/blog/database-for-ai-agents`, `/blog/ai-data-cleaning-agent`, `/blog/ai-agent-crm`, `/blog/ai-agent-task-management`, `/blog/ai-agent-inventory-management`, `/blog/ai-customer-feedback-analysis`, `/blog/ai-ready-data`, `/blog/ai-agent-data-entry`, `/blog/ai-data-collection`, `/blog/migrate-agent-dataset-business-key` | Composite-key and cross-system identity patterns |
| MCP and Dataset API | `/blog/mcp-vs-rest-ai-agents`, `/blog/connect-ai-agent-to-dataset-api`, `/blog/relationship-modeling-agent-datasets`, `/blog/ai-agent-inventory-management`, `/blog/ai-agent-data-entry`, `/blog/mcp-oauth-vs-api-keys`, `/blog/ai-agent-structured-output` | More REST/MCP setup examples with concrete datasets |
| Spreadsheet/database alternatives | `/blog/airtable-alternatives`, `/blog/google-sheets-alternatives`, `/blog/baserow-alternatives`, `/blog/nocodb-alternatives`, `/blog/spreadsheet-database-for-ai-agents`, `/vs/airtable`, `/vs/google-sheets` | Migration examples for specific human-to-agent workflows |

Expand Down
17 changes: 16 additions & 1 deletion .seo/keyword-research.json
Original file line number Diff line number Diff line change
Expand Up @@ -234,9 +234,18 @@
{"keyword": "mcp database server", "source": "dataforseo", "search_volume": 30, "keyword_difficulty": 19, "cpc": null, "intent": "navigational", "as_of": "2026-07-15"},
{"keyword": "mcp vector database", "source": "dataforseo", "search_volume": 20, "keyword_difficulty": 2, "cpc": null, "intent": "informational", "as_of": "2026-07-15"},
{"keyword": "ai agent database", "source": "dataforseo", "search_volume": 20, "keyword_difficulty": 7, "cpc": null, "intent": "commercial", "as_of": "2026-07-15"},
{"keyword": "database for ai agents", "source": "dataforseo", "search_volume": 10, "keyword_difficulty": 7, "cpc": 19.47, "intent": "commercial", "as_of": "2026-07-15"}
{"keyword": "database for ai agents", "source": "dataforseo", "search_volume": 10, "keyword_difficulty": 7, "cpc": 19.47, "intent": "commercial", "as_of": "2026-07-15"},
{"keyword": "business key database", "source": "dataforseo", "search_volume": 10, "keyword_difficulty": null, "cpc": null, "intent": "commercial", "as_of": "2026-08-04"}
],
"opportunities": [
{
"cluster": "business-key migration for agent datasets",
"target_url": "/blog/migrate-agent-dataset-business-key",
"status": "shipped",
"priority": 14,
"signals": {"primary_volume": 10, "primary_kd": null, "primary_cpc": null},
"notes": "Selected 2026-08-04 from the coverage map's highest-priority open product-native gap after remaining measured backlog candidates were deferred. The guide adds a map -> mirror -> verify -> cut over -> retire identity migration contract for agent-managed rows."
},
{
"cluster": "AI agent structured output",
"target_url": "/blog/ai-agent-structured-output",
Expand Down Expand Up @@ -343,6 +352,12 @@
}
],
"serp_snapshots": {
"database primary key migration": {
"source": "dataforseo live organic SERP + primary-source extraction",
"as_of": "2026-08-04",
"top_domains": ["docs.cloud.google.com", "dba.stackexchange.com", "ibm.com", "stackoverflow.com", "learn.microsoft.com"],
"notes": "The SERP contains an AI Overview, vendor documentation, forum answers, and PAA questions about primary-key changes. The Rowset guide differentiates with agent configuration, retry, relationship translation, deterministic mirroring, canary, and rollback controls."
},
"AI agent structured output": {
"source": "live web search + primary-source extraction",
"as_of": "2026-08-03",
Expand Down
6 changes: 6 additions & 0 deletions .seo/link-inventory.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@
| `/blog/ai-data-collection` | https://rowset.lvtd.dev/blog/ai-data-collection | AI Data Collection: A Reviewable Agent Workflow | AI data collection, AI data collection workflow, collection control plane, source registry and capture runs, reviewable agent-collected records |
| `/blog/mcp-oauth-vs-api-keys` | https://rowset.lvtd.dev/blog/mcp-oauth-vs-api-keys | MCP OAuth vs API Keys: Choose the Right Auth | MCP OAuth vs API keys, MCP authorization decision guide, provisioned API key for agents, delegated MCP access, agent authentication delegation test |
| `/blog/ai-agent-structured-output` | https://rowset.lvtd.dev/blog/ai-agent-structured-output | AI Agent Structured Output: Validate Before You Store | AI agent structured output, structured output validation for agents, shape meaning write contract, JSON Schema to durable rows, validated agent output workflow |
| `/blog/migrate-agent-dataset-business-key` | https://rowset.lvtd.dev/blog/migrate-agent-dataset-business-key | Migrate an AI-Agent Dataset to a Business Key | business-key migration for agent datasets, migrate generated row identity, agent dataset index migration, map mirror verify cutover retire, move from rowset_id to a business key |

## Shipped SEO Sprint Pages

Expand Down Expand Up @@ -236,3 +237,8 @@ These route families remain retired and must not be selected as internal-link ta
- shape meaning write contract
- JSON Schema to durable rows
- validated agent output workflow
- business-key migration for agent datasets
- migrate generated row identity
- agent dataset index migration
- map mirror verify cutover retire
- move from `rowset_id` to a business key
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@ deployment or release cut date.
**Fixed** for any bug fixes.
**Security** in case of vulnerabilities.

## 2026-08-04

### Added
- Added a guide for migrating agent-managed datasets from generated row identity to a stable
business key with mapping, mirrored writes, verification, cutover, and rollback.

## 2026-08-03

### Added
Expand Down
4 changes: 4 additions & 0 deletions apps/pages/content/blog/choose-index-column-agent-rows.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,10 @@ Generated indexes are useful for:
- one-off review lists that still need safe updates
- imported rows where the apparent identifier is optional or duplicated

If a stable upstream ID becomes available later, follow the [agent-dataset business-key migration
guide](/blog/migrate-agent-dataset-business-key). It uses a new dataset, an explicit key map,
mirrored changes, and a rollback window instead of changing identity under active agents.

The tradeoff is that `rowset_id` is Rowset-owned identity. It is stable inside
the Rowset dataset, but it may not mean anything to the upstream system unless
you export it and keep it with the source. If the upstream workflow already has
Expand Down
Loading
Loading