← FountainCONTENT HISTORY

Update to Fountain

Snapshot Oct 10, 2026 · 12:05 UTC · version 1.22.0

Collection source: downloaded plugin package.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Build the reports the user reads - compose components into a preset, then email or print it.",
  "included_files": [
    {
      "relative_path": "HOUSEKEEPING.md",
      "size_in_bytes": 9383
    },
    {
      "relative_path": "assets/components/approve-note.md",
      "size_in_bytes": 1269
    },
    {
      "relative_path": "assets/components/clip-performance.md",
      "size_in_bytes": 2290
    },
    {
      "relative_path": "assets/components/clip-summary.md",
      "size_in_bytes": 1214
    },
    {
      "relative_path": "assets/components/dashboard-link.md",
      "size_in_bytes": 217
    },
    {
      "relative_path": "assets/components/headings-tour.md",
      "size_in_bytes": 614
    },
    {
      "relative_path": "assets/components/headline.md",
      "size_in_bytes": 416
    },
    {
      "relative_path": "assets/components/learnings.md",
      "size_in_bytes": 383
    },
    {
      "relative_path": "assets/components/setting-row.md",
      "size_in_bytes": 517
    },
    {
      "relative_path": "assets/components/stats-table.md",
      "size_in_bytes": 1755
    },
    {
      "relative_path": "assets/components/warnings.md",
      "size_in_bytes": 343
    },
    {
      "relative_path": "assets/presets/performance.md",
      "size_in_bytes": 196
    },
    {
      "relative_path": "assets/presets/review-posts-simple.md",
      "size_in_bytes": 712
    },
    {
      "relative_path": "assets/presets/review-posts.md",
      "size_in_bytes": 792
    },
    {
      "relative_path": "assets/presets/settings.md",
      "size_in_bytes": 179
    }
  ],
  "name": "fountain-reports",
  "skill_md_contents": "---\nname: fountain-reports\ndescription: Build the reports the user reads - compose components into a preset, then email or print it.\n---\n\n## Overview\n\nThis skill owns how a report looks, so no caller invents its own format.\nA report is a preset, which is an ordered list of components.\nEach component is a markdown template that the data fills.\nThe caller names the preset and gives the data.\nThis skill composes the report.\nIt delivers the report the way the Reporting section asks: email, printed, combined with a later report,\nor not at all.\nThe user customizes a preset once, in the preferences, and every later report follows that customization.\n\n## Input\n\n- The preset name.\n- The data that the preset's components need, from the caller.\n- Optional: the surface, when the user is present and asks to read the report here.\n- Report customizations from the Reporting section of the preferences, when the show has any.\n\n## Output\n\n- The report, delivered as the Reporting section asks.\n  Email is the default.\n\n## Housekeeping\n\nYou MUST read HOUSEKEEPING.md if you haven't already.\n\n## Requirements\n\n- Fountain API.\n- Skill **fountain-onboarding**.\n\n## Process\n\n1. Read the report customizations from the Reporting section of the preferences.\n   A customization can drop a component, reorder them, change a subject line, or change the delivery.\n2. Read the preset from `assets/presets`, and apply the customization.\n3. Fill each component template from `assets/components` with the caller's data.\n   Drop a component whose data the caller did not give, and say so after the send.\n   This rule never drops a component that needs no data, because that component is never missing data.\n   Only a customization can drop it.\n4. Deliver the report as the Reporting section asks: email via the Project API, printed in the chat,\n   combined into a report sent later in the same run, or not at all.\n   Email is the default, and goes to the addresses under Reporting.\n   Run skill **fountain-onboarding** when the section holds no addresses.\n   When the caller asks for both, send the report and also print it in the chat.\n   When the user asked only to read it here, print it instead of sending it.\n   A printed report has the same words as the sent report.\n   So the reader never has to open the mail to learn what the chat left out.\n   Say plainly when a report was composed but not sent.\n   A send that returns success is not proof of delivery, so say which of the two you saw.\n\n## Additional notes\n\nThe presets:\n\n- `performance` - the numbers for a window: headline, channels overview, yesterday's clips, learnings,\n  warnings.\n- `review-posts-simple` - the posts that wait for a decision, and nothing else.\n  The reader reads the words in the dashboard, where the reader approves or deletes.\n  So the mail says which posts exist, and sends the reader to the dashboard.\n  The approve note says whether approving renders a clip or sends it.\n  A second preset does not do this job.\n- `review-posts` - the whole day in one mail: the posts that wait for a decision, then the numbers.\n  The user asks for it in place of the two presets above.\n  The Reporting section records which of these forms the show wants.\n- `settings` - the current settings, each with its origin, and the tour of the headings.\n  Sent when the user asks what their settings are.\n\nA preset is named for the state that it reports.\nIt is never named for the occasion, or for the skill that sends it.\nSo any skill that starts a chain can reuse it unchanged.\n\nThe printed surface is for the review in the chat.\nThere the user reads the same report that the email holds, so the two never disagree.\nA caller that prints and sends gives the reader one report in two places, and never two reports.\n\nCombining joins reports, and not machines.\nA report can wait only for a report that is sent later in the same run.\nThis is because nothing holds a pending report between machines.\n\nA component is small and single-purpose.\nA new kind of email is a new preset made from the same components.\nA missing block is a new component, and never markdown that a caller writes by hand.\nThis is because two callers that write the same block by hand soon write it in two different ways.\n\nNumbers come from the caller and go into the template unchanged.\nThis skill formats the numbers.\nIt MUST NOT recompute, round away, or soften what the caller measured.\n\nSend markdown, and never HTML.\nThe Project API renders the markdown itself.\nIt strips every attribute from the result, so styling that this skill sets does not reach the reader.\nThe Project API styles the tables, and keeps the column alignment that the markdown sets.\nSo markdown holds everything that a report needs.\n"
}

SHA-256 of public snapshot: 82ac5397243499367c0df3d36816ab752c75e68adfda3fbbfa01bda38b9a7f95