TLB Natural Text To Table
Use this skill when the input is not yet a TileLineBase table, but it already contains repeated, recognizable records such as tasks, people, events, inventory items, requirements, or status updates.
Completion standard
The task is complete only when all of these are true:
- The output is valid TileLineBase row content built from repeated
## field: value blocks.
- The first field name is consistent across every row. For hierarchical output, use one shared primary field such as
entry.
- Skill-added field names are written in English. Values extracted from the source keep the source language.
- Parent-child output uses
TLBparent: on child rows only. This helper field is for the Conversion Assistant and should not be treated as a visible business field.
- Default output uses a minimal schema:
entry, optional description, and optional TLBparent.
- Do not introduce extra fields unless the user explicitly asks for them.
- Values come from the source text; weak guesses are avoided.
- Noise, commentary, and one-off prose are either omitted or called out before conversion.
- If the source mixes multiple record shapes that should not share one table, split them or stop and ask.
Required output shape
TileLineBase row data uses one H2 block per row:
## entry: Write launch post
description: Needs final screenshot
Rules:
- The first line of each row must start with
## .
- The first field should be one shared primary label for every row. Prefer a general English field such as
entry unless the user explicitly asks for another stable field name.
- Follow with flat
field: value lines.
- If the source contains parent-child structure, keep the same primary field on both parent and child rows, and add
TLBparent: <parent primary value> on child rows only.
- By default, only use these skill-added field names:
entry, description, TLBparent.
- Do not translate extracted values. Preserve the source language in row titles and field values.
- Keep one field name spelling across all rows.
- Use an empty value only when the field is truly missing and a shared schema matters.
- Do not add free text between rows.
Read references/examples.md only when you need concrete patterns.
Workflow
Identify the row unit.
Treat each repeated item as one row. Good units are one bullet block, one agenda item, one person card, one changelog item, or one repeated paragraph pattern.
If the source is hierarchical, still treat each parent or child item as one row. Do not switch the primary field name between parent and child rows.
Pick the primary field.
Choose the field that best names the row. Usually this is the subject users scan first.
Draft a shared field set.
Keep it very small and stable. Default to entry plus description. If hierarchy exists, add TLBparent for child rows only.
Extract facts conservatively.
Preserve source wording when it carries meaning. Normalize only light formatting such as extra spaces, checkbox markers, and duplicate punctuation.
Preserve the original language of extracted values. Only the structural field names introduced by the skill should be normalized to English.
Fill missing values carefully.
If a value is absent, leave it empty instead of inventing one. If many rows are missing the same field, drop that field unless the user clearly needs it.
Emit clean TLB blocks.
Output only the final Markdown unless the user asked for explanation or review.
Hierarchy contract
When the user wants parent-child rows for the Conversion Assistant:
- Use one shared primary field name across all rows, typically
entry.
- Parent rows do not include
TLBparent.
- Child rows must include
TLBparent: <parent primary value>.
TLBparent must exactly match the parent row's primary value.
- Keep the rest of the payload minimal. Put supporting text into
description unless the user explicitly asks for more structure.
- Current design target is two levels only. Do not emit grandchild chains unless the user explicitly requests a lossy flattening strategy.
- If multiple parents would have the same title and create ambiguity, prefer renaming or clarifying the parent values instead of guessing.
Heuristics
Good candidates
- Repeated bullets with the same sub-items
- Meeting notes where each person or topic has the same attributes
- Release notes with item name, type, owner, date, status
- Reading lists, CRM notes, hiring pipelines, bug summaries
Bad candidates
- One long essay with no repeated units
- Brainstorm fragments with no stable fields
- Mixed content where some sections are tasks, others are decisions, others are raw quotes
For bad candidates, either:
- propose a smaller slice that can be converted, or
- ask the user to choose the row unit
Normalization rules
- Strip list markers like
- [ ], -, *, or numbering when they are only formatting.
- Keep dates in the source form unless the user asked for normalization.
- Keep casing for names and titles.
- Keep the original language of extracted values.
- Turn obvious booleans into plain values like
yes, no, done, todo only when the source is unambiguous.
- If one row contains extra detail that still matters, put it into
description.
Field design guardrails
- Prefer concrete field names over generic names like
field1.
- Do not create separate fields for near-duplicates like
status, state, and progress; pick one.
- Do not overfit one unusual row.
- If the text clearly represents more than one table, split by entity type.
Ambiguity policy
Stop and ask only when one of these would materially change the result:
- More than one plausible row unit exists
- More than one plausible primary field exists
- The source contains multiple incompatible schemas
- Important values require interpretation rather than extraction
Otherwise, make the most conservative reasonable choice and proceed.
Response pattern
When the user asks for conversion, default to:
- one short sentence naming the row unit if needed
- the TLB Markdown block output
If the user says “just convert it”, return only the Markdown.
Source: campfirium/obsidian-tile-line-base — distributed by TomeVault.
1---2name: tlb-natural-text-to-table3description: Convert structured natural-language notes, bullet lists, meeting logs, outlines, and semi-structured Markdown into clean TileLineBase table Markdown. Use when the user asks to turn natural text into TLB, convert prose or bullets into table blocks, restructure notes into TileLineBase rows, or extract repeated records into H2 key-value rows. Use when this capability is needed.4---56# TLB Natural Text To Table78Use this skill when the input is not yet a TileLineBase table, but it already contains repeated, recognizable records such as tasks, people, events, inventory items, requirements, or status updates.910## Completion standard1112The task is complete only when all of these are true:1314- The output is valid TileLineBase row content built from repeated `## field: value` blocks.15- The first field name is consistent across every row. For hierarchical output, use one shared primary field such as `entry`.16- Skill-added field names are written in English. Values extracted from the source keep the source language.17- Parent-child output uses `TLBparent:` on child rows only. This helper field is for the Conversion Assistant and should not be treated as a visible business field.18- Default output uses a minimal schema: `entry`, optional `description`, and optional `TLBparent`.19- Do not introduce extra fields unless the user explicitly asks for them.20- Values come from the source text; weak guesses are avoided.21- Noise, commentary, and one-off prose are either omitted or called out before conversion.22- If the source mixes multiple record shapes that should not share one table, split them or stop and ask.2324## Required output shape2526TileLineBase row data uses one H2 block per row:2728```md29## entry: Write launch post30description: Needs final screenshot31```3233Rules:3435- The first line of each row must start with `## `.36- The first field should be one shared primary label for every row. Prefer a general English field such as `entry` unless the user explicitly asks for another stable field name.37- Follow with flat `field: value` lines.38- If the source contains parent-child structure, keep the same primary field on both parent and child rows, and add `TLBparent: <parent primary value>` on child rows only.39- By default, only use these skill-added field names: `entry`, `description`, `TLBparent`.40- Do not translate extracted values. Preserve the source language in row titles and field values.41- Keep one field name spelling across all rows.42- Use an empty value only when the field is truly missing and a shared schema matters.43- Do not add free text between rows.4445Read [references/examples.md](references/examples.md) only when you need concrete patterns.4647## Workflow48491. Identify the row unit.50 Treat each repeated item as one row. Good units are one bullet block, one agenda item, one person card, one changelog item, or one repeated paragraph pattern.5152 If the source is hierarchical, still treat each parent or child item as one row. Do not switch the primary field name between parent and child rows.53542. Pick the primary field.55 Choose the field that best names the row. Usually this is the subject users scan first.56573. Draft a shared field set.58 Keep it very small and stable. Default to `entry` plus `description`. If hierarchy exists, add `TLBparent` for child rows only.59604. Extract facts conservatively.61 Preserve source wording when it carries meaning. Normalize only light formatting such as extra spaces, checkbox markers, and duplicate punctuation.6263 Preserve the original language of extracted values. Only the structural field names introduced by the skill should be normalized to English.64655. Fill missing values carefully.66 If a value is absent, leave it empty instead of inventing one. If many rows are missing the same field, drop that field unless the user clearly needs it.67686. Emit clean TLB blocks.69 Output only the final Markdown unless the user asked for explanation or review.7071## Hierarchy contract7273When the user wants parent-child rows for the Conversion Assistant:7475- Use one shared primary field name across all rows, typically `entry`.76- Parent rows do not include `TLBparent`.77- Child rows must include `TLBparent: <parent primary value>`.78- `TLBparent` must exactly match the parent row's primary value.79- Keep the rest of the payload minimal. Put supporting text into `description` unless the user explicitly asks for more structure.80- Current design target is two levels only. Do not emit grandchild chains unless the user explicitly requests a lossy flattening strategy.81- If multiple parents would have the same title and create ambiguity, prefer renaming or clarifying the parent values instead of guessing.8283## Heuristics8485### Good candidates8687- Repeated bullets with the same sub-items88- Meeting notes where each person or topic has the same attributes89- Release notes with item name, type, owner, date, status90- Reading lists, CRM notes, hiring pipelines, bug summaries9192### Bad candidates9394- One long essay with no repeated units95- Brainstorm fragments with no stable fields96- Mixed content where some sections are tasks, others are decisions, others are raw quotes9798For bad candidates, either:99100- propose a smaller slice that can be converted, or101- ask the user to choose the row unit102103## Normalization rules104105- Strip list markers like `- [ ]`, `-`, `*`, or numbering when they are only formatting.106- Keep dates in the source form unless the user asked for normalization.107- Keep casing for names and titles.108- Keep the original language of extracted values.109- Turn obvious booleans into plain values like `yes`, `no`, `done`, `todo` only when the source is unambiguous.110- If one row contains extra detail that still matters, put it into `description`.111112## Field design guardrails113114- Prefer concrete field names over generic names like `field1`.115- Do not create separate fields for near-duplicates like `status`, `state`, and `progress`; pick one.116- Do not overfit one unusual row.117- If the text clearly represents more than one table, split by entity type.118119## Ambiguity policy120121Stop and ask only when one of these would materially change the result:122123- More than one plausible row unit exists124- More than one plausible primary field exists125- The source contains multiple incompatible schemas126- Important values require interpretation rather than extraction127128Otherwise, make the most conservative reasonable choice and proceed.129130## Response pattern131132When the user asks for conversion, default to:1331341. one short sentence naming the row unit if needed1352. the TLB Markdown block output136137If the user says “just convert it”, return only the Markdown.138139---140> Source: [campfirium/obsidian-tile-line-base](https://github.com/campfirium/obsidian-tile-line-base) — distributed by [TomeVault](https://tomevault.io).141<!-- tomevault:4.0:skill_md:2026-07-04 -->