@synap-core/workspace-templates 0.11.0 → 0.23.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/README.md +483 -0
- package/automations/bookmark-enrichment.automation.json +321 -0
- package/automations/github-pr-events.automation.json +505 -0
- package/automations/mail-feed.automation.json +86 -0
- package/automations/ship-a-change-checks-green.automation.json +106 -0
- package/automations/ship-a-change-checks-red.automation.json +106 -0
- package/automations/ship-a-change-deployed.automation.json +56 -0
- package/automations/ship-a-change-pr-merged.automation.json +110 -0
- package/automations/ship-a-change-pr-opened.automation.json +104 -0
- package/automations/url-bookmark-capture.automation.json +132 -0
- package/capabilities/agency-skills.capability.json +157 -0
- package/capabilities/apify.capability.json +265 -0
- package/capabilities/apollo.capability.json +120 -0
- package/capabilities/arch-backend.capability.json +97 -0
- package/capabilities/arch-client-intelligence.capability.json +401 -0
- package/capabilities/backblaze-b2.capability.json +205 -0
- package/capabilities/cal-com.capability.json +266 -0
- package/capabilities/canva.capability.json +274 -0
- package/capabilities/claude-code-routines.capability.json +172 -0
- package/capabilities/claude-managed-agents.capability.json +215 -0
- package/capabilities/client-comms-report.capability.json +246 -0
- package/capabilities/content-idea-to-production.capability.json +29 -0
- package/capabilities/datagouv.capability.json +315 -0
- package/capabilities/discord-bot.capability.json +157 -0
- package/capabilities/dropbox.capability.json +281 -0
- package/capabilities/exa.capability.json +109 -0
- package/capabilities/fal-ai.capability.json +83 -0
- package/capabilities/fal-media-lab.capability.json +158 -0
- package/capabilities/fireflies.capability.json +191 -0
- package/capabilities/freellmapi.capability.json +114 -0
- package/capabilities/generic-apikey.capability.json +92 -0
- package/capabilities/github-merge.capability.json +99 -0
- package/capabilities/github-read.capability.json +325 -0
- package/capabilities/governance-tighten-recommender.capability.json +81 -0
- package/capabilities/jev.capability.json +226 -0
- package/capabilities/lead-conversion-enrollment.capability.json +246 -0
- package/capabilities/mail-feed.capability.json +277 -0
- package/capabilities/mailgun.capability.json +52 -0
- package/capabilities/nango-google.capability.json +639 -0
- package/capabilities/notion.capability.json +417 -0
- package/capabilities/omniroute.capability.json +137 -0
- package/capabilities/posthog-analytics.capability.json +258 -0
- package/capabilities/postiz.capability.json +467 -0
- package/capabilities/proactive-digest.capability.json +190 -0
- package/capabilities/proton.capability.json +288 -0
- package/capabilities/replicate-rvm.capability.json +97 -0
- package/capabilities/research-methods.capability.json +57 -0
- package/capabilities/shopify.capability.json +395 -0
- package/capabilities/slack.capability.json +369 -0
- package/capabilities/stripe.capability.json +420 -0
- package/capabilities/telegram-bridge.capability.json +56 -0
- package/capabilities/treg.capability.json +102 -0
- package/capabilities/unipile-linkedin.capability.json +471 -0
- package/capabilities/vercel.capability.json +424 -0
- package/dist/define-CPS0n8BV.d.ts +1331 -0
- package/dist/index.d.ts +189 -900
- package/dist/index.js +24654 -21639
- package/dist/index.js.map +1 -1
- package/dist/wire.d.ts +222 -0
- package/dist/wire.js +77 -0
- package/dist/wire.js.map +1 -0
- package/package.json +41 -27
- package/packs/bookmark-views-pack.json +33 -0
- package/packs/crm-pack.json +76 -0
- package/packs/customer-profile.json +28 -0
- package/packs/deep-research.playbook.json +30 -0
- package/packs/event-views-pack.json +33 -0
- package/packs/habit-profile.json +27 -0
- package/packs/hr-pack.json +54 -0
- package/packs/invoice-profile.json +28 -0
- package/packs/knowledge-base-pack.json +56 -0
- package/packs/meeting-profile.json +29 -0
- package/packs/product-profile.json +30 -0
- package/packs/project-management-pack.json +49 -0
- package/packs/recipe-profile.json +29 -0
- package/packs/task-views-pack.json +39 -0
- package/retired.yaml +136 -0
- package/skills/app-factory-build-slice/SKILL.md +70 -0
- package/skills/app-factory-build-slice.catalog.json +17 -0
- package/skills/app-factory-design-canvas/SKILL.md +96 -0
- package/skills/app-factory-design-canvas.catalog.json +17 -0
- package/skills/app-factory-design-review/SKILL.md +99 -0
- package/skills/app-factory-design-review.catalog.json +18 -0
- package/skills/app-factory-research/SKILL.md +123 -0
- package/skills/app-factory-research.catalog.json +17 -0
- package/skills/bookmark-enrichment/SKILL.md +40 -0
- package/skills/carousel-format/carousel-format.skill.json +18 -0
- package/skills/collage-broll/collage-broll.skill.json +20 -0
- package/skills/content-taste/content-taste.skill.json +18 -0
- package/skills/creative-director/creative-director.skill.json +18 -0
- package/skills/design-critique/SKILL.md +135 -0
- package/skills/design-critique.catalog.json +12 -0
- package/skills/designing-with-real-components/SKILL.md +140 -0
- package/skills/designing-with-real-components.catalog.json +12 -0
- package/skills/edit-loop/edit-loop.skill.json +25 -0
- package/skills/facecam-edit/facecam-edit.skill.json +24 -0
- package/skills/mapping-the-server/SKILL.md +54 -0
- package/skills/math-explainer-manimgx/math-explainer-manimgx.skill.json +20 -0
- package/skills/motion-quality-gates/motion-quality-gates.skill.json +20 -0
- package/skills/open-design-edit/open-design-edit.skill.json +24 -0
- package/skills/reading-client-progress/SKILL.md +65 -0
- package/skills/routing-to-channels/SKILL.md +54 -0
- package/skills/stellar-scf-grants-advisor/ASSOCIATE-CHEATSHEET.md +133 -0
- package/skills/stellar-scf-grants-advisor/ASSOCIATE-ONBOARDING-GUIDE.md +761 -0
- package/skills/stellar-scf-grants-advisor/CLIENT-FAQ.md +181 -0
- package/skills/stellar-scf-grants-advisor/PARTNER-HANDOVER.md +130 -0
- package/skills/stellar-scf-grants-advisor/SKILL.md +102 -0
- package/skills/stellar-scf-grants-advisor/examples/README.md +43 -0
- package/skills/stellar-scf-grants-advisor/examples/chat-summary-templates.md +158 -0
- package/skills/stellar-scf-grants-advisor/examples/corpus-comparable-rows.md +136 -0
- package/skills/stellar-scf-grants-advisor/examples/q10-team-rewrites.md +109 -0
- package/skills/stellar-scf-grants-advisor/examples/q2-description-rewrites.md +88 -0
- package/skills/stellar-scf-grants-advisor/examples/q6-integration-rewrites.md +107 -0
- package/skills/stellar-scf-grants-advisor/examples/tranche-structures.md +176 -0
- package/skills/stellar-scf-grants-advisor/reference/01-methodology.md +96 -0
- package/skills/stellar-scf-grants-advisor/reference/02-scoring-framework.md +199 -0
- package/skills/stellar-scf-grants-advisor/reference/03-rejection-patterns.md +241 -0
- package/skills/stellar-scf-grants-advisor/reference/04-winner-patterns.md +120 -0
- package/skills/stellar-scf-grants-advisor/reference/05-comeback-patterns.md +92 -0
- package/skills/stellar-scf-grants-advisor/reference/06-budget-benchmarks.md +125 -0
- package/skills/stellar-scf-grants-advisor/reference/07-integration-list.md +147 -0
- package/skills/stellar-scf-grants-advisor/reference/08-abstract-fields.md +258 -0
- package/skills/stellar-scf-grants-advisor/reference/09-build-fields.md +259 -0
- package/skills/stellar-scf-grants-advisor/reference/10-corpus-winners.md +135 -0
- package/skills/stellar-scf-grants-advisor/reference/11-corpus-rejects.md +267 -0
- package/skills/stellar-scf-grants-advisor/reference/12-client-communication.md +131 -0
- package/skills/stellar-scf-grants-advisor/reference/13-excel-output-spec.md +199 -0
- package/skills/stellar-scf-grants-advisor/reference/14-worked-examples.md +160 -0
- package/skills/stellar-scf-grants-advisor/templates/abstract-review-builder.py +253 -0
- package/skills/stellar-scf-grants-advisor/templates/build-review-builder.py +213 -0
- package/skills/video-direction/video-direction.skill.json +20 -0
- package/skills/video-style-vocabulary/video-style-vocabulary.skill.json +20 -0
- package/skills/video-toolbox/video-toolbox.skill.json +20 -0
- package/src/__fixtures__/lifecycle-presets.flat-before.json +205 -0
- package/src/agency-os.yaml +122 -0
- package/src/agent-os-skill-slugs.test.ts +65 -0
- package/src/apify-social-reader.test.ts +317 -0
- package/src/base.template.test.ts +25 -19
- package/src/base.yaml +95 -39
- package/src/blockchain-ecosystem.yaml +1 -0
- package/src/brand-library.yaml +525 -14
- package/src/builder-dev-fold.template.test.ts +113 -0
- package/src/builder.yaml +798 -92
- package/src/business-model-catalog-description.test.ts +47 -0
- package/src/business-model-grp.template.test.ts +214 -0
- package/src/business-model.yaml +598 -0
- package/src/catalog-safety.test.ts +198 -0
- package/src/catalog.template-items.test.ts +75 -0
- package/src/catalog.ts +85 -2
- package/src/civic-france.yaml +102 -0
- package/src/concept-guard.test.ts +28 -8
- package/src/concept-guard.ts +2 -2
- package/src/content-creation.template.test.ts +52 -0
- package/src/content-creation.yaml +192 -0
- package/src/content-os.edit-loop.template.test.ts +210 -0
- package/src/content-os.publish-due-posts.template.test.ts +261 -0
- package/src/content-os.template.test.ts +322 -0
- package/src/content-os.video-takes.template.test.ts +338 -0
- package/src/content-os.work-a-take.template.test.ts +125 -0
- package/src/content-os.yaml +1830 -39
- package/src/content-studio-retired.template.test.ts +82 -0
- package/src/corpus-flow-validity.test.ts +4 -5
- package/src/crm-absorbs-outreach.template.test.ts +117 -0
- package/src/crm-build-plan.template.test.ts +128 -0
- package/src/crm-lists.template.test.ts +96 -0
- package/src/crm-messages-cadence.template.test.ts +164 -0
- package/src/crm-one-send-door.template.test.ts +65 -0
- package/src/crm.yaml +1456 -181
- package/src/decisions-wave.template.test.ts +186 -0
- package/src/define.ts +130 -17
- package/src/design-to-implementation.template.test.ts +94 -0
- package/src/dist-freshness.test.ts +97 -0
- package/src/domain-template-type.test.ts +75 -0
- package/src/ecosystem.yaml +27 -66
- package/src/enterprise-os.yaml +10 -134
- package/src/facecam-edit.audio-studio.test.ts +188 -0
- package/src/fal-generate-image.test.ts +200 -0
- package/src/fal-media-lab-pod-files.test.ts +180 -0
- package/src/finance.yaml +254 -1
- package/src/foundation.yaml +130 -28
- package/src/frame-host-modules.d.mts +6 -0
- package/src/frame-host-modules.mjs +58 -0
- package/src/generate.mjs +9 -3
- package/src/github-merge.test.ts +210 -0
- package/src/grants.yaml +57 -17
- package/src/hr.yaml +39 -6
- package/src/index.ts +36 -1
- package/src/intent.test.ts +161 -0
- package/src/internal-runbook.yaml +19 -1
- package/src/jev.test.ts +356 -0
- package/src/legal.yaml +33 -1
- package/src/life-os.yaml +65 -240
- package/src/lifecycle-coverage.test.ts +124 -0
- package/src/lifecycle-declarations.test.ts +252 -0
- package/src/lifecycle-presets.test.ts +468 -0
- package/src/lifecycle-presets.ts +494 -0
- package/src/lifecycle-stuck.test.ts +46 -0
- package/src/lifecycle-waits.parity.test.ts +319 -0
- package/src/marketing.yaml +108 -4
- package/src/meetings-knowledge.yaml +18 -0
- package/src/networking.yaml +23 -2
- package/src/operations.yaml +304 -4
- package/src/pipeline-views.template.test.ts +88 -0
- package/src/playbook-goal-placeholders.test.ts +57 -0
- package/src/postiz-contract.test.ts +134 -0
- package/src/presentation-declarations.test.ts +174 -0
- package/src/process-contract.validate.test.ts +352 -0
- package/src/project-management.yaml +39 -740
- package/src/publish-body.d.mts +29 -0
- package/src/publish-body.mjs +74 -0
- package/src/publish-body.test.ts +74 -0
- package/src/publish-official-lib.test.ts +176 -0
- package/src/replicate-rvm.test.ts +504 -0
- package/src/research-base.yaml +119 -20
- package/src/research-decision.yaml +60 -3
- package/src/reserved-profile-slugs.test.ts +83 -0
- package/src/retired-goal-kinds.test.ts +58 -0
- package/src/role-reference-and-step-domain.test.ts +192 -0
- package/src/seed-obligation.test.ts +176 -0
- package/src/send-message-maps.test.ts +227 -0
- package/src/shared-role-ssot.test.ts +42 -1
- package/src/ship-a-change.template.test.ts +177 -0
- package/src/skills.test.ts +170 -0
- package/src/social.yaml +85 -27
- package/src/space-packages.freshness.test.ts +97 -0
- package/src/space-packages.generated.ts +40 -0
- package/src/space-packages.test.ts +125 -0
- package/src/space-packages.ts +73 -0
- package/src/start.test.ts +188 -0
- package/src/task-intents.test.ts +293 -0
- package/src/templates.ts +21639 -21522
- package/src/types.ts +443 -60
- package/src/unipile-publish-post.test.ts +162 -0
- package/src/validate-flow.drift.test.ts +2 -3
- package/src/validate-flow.ts +32 -2
- package/src/validate-onboarding.test.ts +59 -0
- package/src/validate.test.ts +156 -3
- package/src/validate.ts +1384 -7
- package/src/wire-core.ts +231 -0
- package/src/wire.test.ts +159 -0
- package/src/wire.ts +107 -0
- package/src/__fixtures__/report-automation-flow.json +0 -393
- package/src/agent-fleet.yaml +0 -1645
- package/src/business-developer.template.test.ts +0 -351
- package/src/business-developer.yaml +0 -860
- package/src/content-studio.yaml +0 -361
- package/src/dev-dashboard.yaml +0 -990
- package/src/outreach-comms.yaml +0 -486
- package/src/the-arch.yaml +0 -201
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_meta": {
|
|
3
|
+
"slug": "habit-profile",
|
|
4
|
+
"icon": "repeat",
|
|
5
|
+
"color": "#10B981",
|
|
6
|
+
"tags": ["habit", "tracking", "wellness"],
|
|
7
|
+
"requiredTier": null,
|
|
8
|
+
"isPublic": true
|
|
9
|
+
},
|
|
10
|
+
"profiles": [
|
|
11
|
+
{
|
|
12
|
+
"slug": "habit",
|
|
13
|
+
"displayName": "Habit",
|
|
14
|
+
"icon": "repeat",
|
|
15
|
+
"color": "#10B981",
|
|
16
|
+
"description": "Habit tracker with frequency and streaks",
|
|
17
|
+
"scope": "workspace",
|
|
18
|
+
"properties": [
|
|
19
|
+
{ "slug": "name", "valueType": "string", "required": true, "label": "Habit Name" },
|
|
20
|
+
{ "slug": "frequency", "valueType": "string", "label": "Frequency", "inputType": "select", "enumValues": ["daily", "weekly", "monthly"] },
|
|
21
|
+
{ "slug": "streak", "valueType": "number", "label": "Current Streak", "constraints": { "min": 0 } },
|
|
22
|
+
{ "slug": "category", "valueType": "string", "label": "Category" },
|
|
23
|
+
{ "slug": "notes", "valueType": "string", "label": "Notes", "inputType": "textarea" }
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_meta": {
|
|
3
|
+
"slug": "hr-pack",
|
|
4
|
+
"icon": "users",
|
|
5
|
+
"color": "#F59E0B",
|
|
6
|
+
"tags": ["hr", "team", "employees", "departments"],
|
|
7
|
+
"requiredTier": null,
|
|
8
|
+
"isPublic": true
|
|
9
|
+
},
|
|
10
|
+
"profiles": [
|
|
11
|
+
{
|
|
12
|
+
"slug": "team-member",
|
|
13
|
+
"displayName": "Team Member",
|
|
14
|
+
"icon": "user",
|
|
15
|
+
"color": "#F59E0B",
|
|
16
|
+
"description": "Team members and employees",
|
|
17
|
+
"scope": "workspace",
|
|
18
|
+
"parentProfileSlug": "person",
|
|
19
|
+
"properties": [
|
|
20
|
+
{ "slug": "role", "valueType": "string", "required": true, "label": "Role / Title" },
|
|
21
|
+
{ "slug": "department", "valueType": "string", "label": "Department" },
|
|
22
|
+
{ "slug": "start-date", "valueType": "date", "label": "Start Date" },
|
|
23
|
+
{ "slug": "location", "valueType": "string", "label": "Location" },
|
|
24
|
+
{ "slug": "skills", "valueType": "array", "label": "Skills" },
|
|
25
|
+
{ "slug": "status", "valueType": "string", "label": "Status", "inputType": "select", "enumValues": ["active", "on-leave", "offboarded"] }
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"slug": "department",
|
|
30
|
+
"displayName": "Department",
|
|
31
|
+
"icon": "building-2",
|
|
32
|
+
"color": "#6366F1",
|
|
33
|
+
"description": "Organizational departments and teams",
|
|
34
|
+
"scope": "workspace",
|
|
35
|
+
"properties": [
|
|
36
|
+
{ "slug": "head", "valueType": "string", "label": "Department Head" },
|
|
37
|
+
{ "slug": "headcount", "valueType": "number", "label": "Headcount", "constraints": { "min": 0 } },
|
|
38
|
+
{ "slug": "budget", "valueType": "number", "label": "Annual Budget", "constraints": { "min": 0 } },
|
|
39
|
+
{ "slug": "description", "valueType": "string", "label": "Description", "inputType": "textarea" }
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
"views": [
|
|
44
|
+
{
|
|
45
|
+
"name": "Team",
|
|
46
|
+
"type": "table",
|
|
47
|
+
"scopeProfileSlug": "team-member",
|
|
48
|
+
"config": {}
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
"entityLinks": [
|
|
52
|
+
{ "sourceProfileSlug": "team-member", "targetProfileSlug": "department", "type": "belongs_to", "label": "In department" }
|
|
53
|
+
]
|
|
54
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_meta": {
|
|
3
|
+
"slug": "invoice-profile",
|
|
4
|
+
"icon": "receipt",
|
|
5
|
+
"color": "#10B981",
|
|
6
|
+
"tags": ["invoice", "billing", "finance"],
|
|
7
|
+
"requiredTier": null,
|
|
8
|
+
"isPublic": true
|
|
9
|
+
},
|
|
10
|
+
"profiles": [
|
|
11
|
+
{
|
|
12
|
+
"slug": "invoice",
|
|
13
|
+
"displayName": "Invoice",
|
|
14
|
+
"icon": "receipt",
|
|
15
|
+
"color": "#10B981",
|
|
16
|
+
"description": "Invoice with line items and payment tracking",
|
|
17
|
+
"scope": "workspace",
|
|
18
|
+
"properties": [
|
|
19
|
+
{ "slug": "invoice-number", "valueType": "string", "required": true, "label": "Invoice Number" },
|
|
20
|
+
{ "slug": "amount", "valueType": "number", "required": true, "label": "Amount", "constraints": { "min": 0 } },
|
|
21
|
+
{ "slug": "currency", "valueType": "string", "label": "Currency", "placeholder": "USD" },
|
|
22
|
+
{ "slug": "status", "valueType": "string", "label": "Status", "inputType": "select", "enumValues": ["draft", "sent", "paid", "overdue", "cancelled"] },
|
|
23
|
+
{ "slug": "due-date", "valueType": "date", "label": "Due Date" },
|
|
24
|
+
{ "slug": "issued-date", "valueType": "date", "label": "Issued Date" }
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_meta": {
|
|
3
|
+
"slug": "knowledge-base-pack",
|
|
4
|
+
"icon": "book-open",
|
|
5
|
+
"color": "#06B6D4",
|
|
6
|
+
"tags": ["knowledge", "articles", "documentation", "resources"],
|
|
7
|
+
"requiredTier": null,
|
|
8
|
+
"isPublic": true
|
|
9
|
+
},
|
|
10
|
+
"profiles": [
|
|
11
|
+
{
|
|
12
|
+
"slug": "article",
|
|
13
|
+
"displayName": "Article",
|
|
14
|
+
"icon": "newspaper",
|
|
15
|
+
"color": "#8B5CF6",
|
|
16
|
+
"description": "Knowledge base articles and documentation",
|
|
17
|
+
"scope": "workspace",
|
|
18
|
+
"parentProfileSlug": "bookmark",
|
|
19
|
+
"properties": [
|
|
20
|
+
{ "slug": "author", "valueType": "string", "label": "Author" },
|
|
21
|
+
{ "slug": "published-at", "valueType": "date", "label": "Published" },
|
|
22
|
+
{ "slug": "category", "valueType": "string", "label": "Category" },
|
|
23
|
+
{ "slug": "tags", "valueType": "array", "label": "Tags" },
|
|
24
|
+
{ "slug": "read-time", "valueType": "number", "label": "Read Time (min)", "constraints": { "min": 0 } }
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"slug": "resource",
|
|
29
|
+
"displayName": "Resource",
|
|
30
|
+
"icon": "link",
|
|
31
|
+
"color": "#10B981",
|
|
32
|
+
"description": "External links, tools, and references",
|
|
33
|
+
"scope": "workspace",
|
|
34
|
+
"properties": [
|
|
35
|
+
{ "slug": "url", "valueType": "string", "required": true, "label": "URL", "inputType": "url" },
|
|
36
|
+
{ "slug": "category", "valueType": "string", "label": "Category" },
|
|
37
|
+
{ "slug": "rating", "valueType": "number", "label": "Rating", "constraints": { "min": 0, "max": 5 } },
|
|
38
|
+
{ "slug": "notes", "valueType": "string", "label": "Notes", "inputType": "textarea" }
|
|
39
|
+
]
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
"views": [
|
|
43
|
+
{
|
|
44
|
+
"name": "Articles",
|
|
45
|
+
"type": "grid",
|
|
46
|
+
"scopeProfileSlug": "article",
|
|
47
|
+
"config": {}
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"name": "Resources",
|
|
51
|
+
"type": "list",
|
|
52
|
+
"scopeProfileSlug": "resource",
|
|
53
|
+
"config": {}
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_meta": {
|
|
3
|
+
"slug": "meeting-profile",
|
|
4
|
+
"icon": "video",
|
|
5
|
+
"color": "#8B5CF6",
|
|
6
|
+
"tags": ["meeting", "calendar", "scheduling"],
|
|
7
|
+
"requiredTier": null,
|
|
8
|
+
"isPublic": true
|
|
9
|
+
},
|
|
10
|
+
"profiles": [
|
|
11
|
+
{
|
|
12
|
+
"slug": "meeting",
|
|
13
|
+
"displayName": "Meeting",
|
|
14
|
+
"icon": "video",
|
|
15
|
+
"color": "#8B5CF6",
|
|
16
|
+
"description": "Meeting with attendees, agenda, and notes",
|
|
17
|
+
"scope": "workspace",
|
|
18
|
+
"properties": [
|
|
19
|
+
{ "slug": "title", "valueType": "string", "required": true, "label": "Title" },
|
|
20
|
+
{ "slug": "start-date", "valueType": "date", "required": true, "label": "Start Time" },
|
|
21
|
+
{ "slug": "end-date", "valueType": "date", "label": "End Time" },
|
|
22
|
+
{ "slug": "location", "valueType": "string", "label": "Location / Link" },
|
|
23
|
+
{ "slug": "attendees", "valueType": "array", "label": "Attendees" },
|
|
24
|
+
{ "slug": "agenda", "valueType": "string", "label": "Agenda", "inputType": "textarea" },
|
|
25
|
+
{ "slug": "notes", "valueType": "string", "label": "Meeting Notes", "inputType": "textarea" }
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_meta": {
|
|
3
|
+
"slug": "product-profile",
|
|
4
|
+
"icon": "package",
|
|
5
|
+
"color": "#6366F1",
|
|
6
|
+
"tags": ["product", "inventory", "ecommerce"],
|
|
7
|
+
"requiredTier": null,
|
|
8
|
+
"isPublic": true
|
|
9
|
+
},
|
|
10
|
+
"profiles": [
|
|
11
|
+
{
|
|
12
|
+
"slug": "product",
|
|
13
|
+
"displayName": "Product",
|
|
14
|
+
"icon": "package",
|
|
15
|
+
"color": "#6366F1",
|
|
16
|
+
"description": "Product with pricing, SKU, and inventory",
|
|
17
|
+
"scope": "workspace",
|
|
18
|
+
"properties": [
|
|
19
|
+
{ "slug": "name", "valueType": "string", "required": true, "label": "Product Name" },
|
|
20
|
+
{ "slug": "sku", "valueType": "string", "label": "SKU" },
|
|
21
|
+
{ "slug": "price", "valueType": "number", "label": "Price", "constraints": { "min": 0 } },
|
|
22
|
+
{ "slug": "currency", "valueType": "string", "label": "Currency", "placeholder": "USD" },
|
|
23
|
+
{ "slug": "category", "valueType": "string", "label": "Category" },
|
|
24
|
+
{ "slug": "status", "valueType": "string", "label": "Status", "inputType": "select", "enumValues": ["draft", "active", "discontinued"] },
|
|
25
|
+
{ "slug": "description", "valueType": "string", "label": "Description", "inputType": "textarea" },
|
|
26
|
+
{ "slug": "image", "valueType": "string", "label": "Image URL" }
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_meta": {
|
|
3
|
+
"slug": "project-management-pack",
|
|
4
|
+
"icon": "kanban-square",
|
|
5
|
+
"color": "#8B5CF6",
|
|
6
|
+
"tags": ["projects", "tasks", "milestones", "team"],
|
|
7
|
+
"requiredTier": null,
|
|
8
|
+
"isPublic": true
|
|
9
|
+
},
|
|
10
|
+
"profiles": [
|
|
11
|
+
{
|
|
12
|
+
"slug": "task",
|
|
13
|
+
"displayName": "Task",
|
|
14
|
+
"icon": "check-square",
|
|
15
|
+
"color": "#3B82F6",
|
|
16
|
+
"description": "Work items and action items",
|
|
17
|
+
"scope": "workspace",
|
|
18
|
+
"properties": [
|
|
19
|
+
{ "slug": "status", "valueType": "string", "required": true, "label": "Status", "inputType": "select", "enumValues": ["todo", "in-progress", "review", "done", "cancelled"] },
|
|
20
|
+
{ "slug": "priority", "valueType": "string", "label": "Priority", "inputType": "select", "enumValues": ["low", "medium", "high", "urgent"] },
|
|
21
|
+
{ "slug": "due-date", "valueType": "date", "label": "Due Date" },
|
|
22
|
+
{ "slug": "assignee", "valueType": "string", "label": "Assignee" },
|
|
23
|
+
{ "slug": "estimate", "valueType": "number", "label": "Estimate (hours)", "constraints": { "min": 0 } },
|
|
24
|
+
{ "slug": "tags", "valueType": "array", "label": "Labels" }
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"slug": "milestone",
|
|
29
|
+
"displayName": "Milestone",
|
|
30
|
+
"icon": "flag",
|
|
31
|
+
"color": "#F59E0B",
|
|
32
|
+
"description": "Key deliverables and checkpoints",
|
|
33
|
+
"scope": "workspace",
|
|
34
|
+
"properties": [
|
|
35
|
+
{ "slug": "due-date", "valueType": "date", "required": true, "label": "Target Date" },
|
|
36
|
+
{ "slug": "status", "valueType": "string", "label": "Status", "inputType": "select", "enumValues": ["upcoming", "in-progress", "completed", "missed"] },
|
|
37
|
+
{ "slug": "description", "valueType": "string", "label": "Description", "inputType": "textarea" }
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
"views": [
|
|
42
|
+
{
|
|
43
|
+
"name": "Task Board",
|
|
44
|
+
"type": "kanban",
|
|
45
|
+
"scopeProfileSlug": "task",
|
|
46
|
+
"config": { "groupByField": "status" }
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_meta": {
|
|
3
|
+
"slug": "recipe-profile",
|
|
4
|
+
"icon": "chef-hat",
|
|
5
|
+
"color": "#F59E0B",
|
|
6
|
+
"tags": ["recipe", "cooking", "food"],
|
|
7
|
+
"requiredTier": null,
|
|
8
|
+
"isPublic": true
|
|
9
|
+
},
|
|
10
|
+
"profiles": [
|
|
11
|
+
{
|
|
12
|
+
"slug": "recipe",
|
|
13
|
+
"displayName": "Recipe",
|
|
14
|
+
"icon": "chef-hat",
|
|
15
|
+
"color": "#F59E0B",
|
|
16
|
+
"description": "Recipe with ingredients, steps, and nutrition",
|
|
17
|
+
"scope": "workspace",
|
|
18
|
+
"properties": [
|
|
19
|
+
{ "slug": "title", "valueType": "string", "required": true, "label": "Recipe Name" },
|
|
20
|
+
{ "slug": "cuisine", "valueType": "string", "label": "Cuisine" },
|
|
21
|
+
{ "slug": "prep-time", "valueType": "number", "label": "Prep Time (min)", "constraints": { "min": 0 } },
|
|
22
|
+
{ "slug": "cook-time", "valueType": "number", "label": "Cook Time (min)", "constraints": { "min": 0 } },
|
|
23
|
+
{ "slug": "servings", "valueType": "number", "label": "Servings", "constraints": { "min": 1 } },
|
|
24
|
+
{ "slug": "ingredients", "valueType": "array", "label": "Ingredients" },
|
|
25
|
+
{ "slug": "tags", "valueType": "array", "label": "Tags" }
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_meta": {
|
|
3
|
+
"slug": "task-views-pack",
|
|
4
|
+
"displayName": "Task Views",
|
|
5
|
+
"icon": "layout-grid",
|
|
6
|
+
"color": "#3B82F6",
|
|
7
|
+
"tags": ["tasks", "kanban", "views", "productivity"],
|
|
8
|
+
"requiredTier": null,
|
|
9
|
+
"isPublic": true
|
|
10
|
+
},
|
|
11
|
+
"description": "Four ready-made task views: a Kanban board by status, a priority matrix, a due-date calendar and a table of all tasks.",
|
|
12
|
+
"profiles": [],
|
|
13
|
+
"views": [
|
|
14
|
+
{
|
|
15
|
+
"name": "Task Board",
|
|
16
|
+
"type": "kanban",
|
|
17
|
+
"scopeProfileSlug": "task",
|
|
18
|
+
"config": { "groupByField": "status" }
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "Priority Matrix",
|
|
22
|
+
"type": "matrix",
|
|
23
|
+
"scopeProfileSlug": "task",
|
|
24
|
+
"config": { "xField": "priority", "yField": "status" }
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "Task Calendar",
|
|
28
|
+
"type": "calendar",
|
|
29
|
+
"scopeProfileSlug": "task",
|
|
30
|
+
"config": { "dateField": "dueDate" }
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "All Tasks",
|
|
34
|
+
"type": "table",
|
|
35
|
+
"scopeProfileSlug": "task",
|
|
36
|
+
"config": {}
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
}
|
package/retired.yaml
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Retired templates: the tombstone registry (schema: schema/retired.ts).
|
|
2
|
+
#
|
|
3
|
+
# A template that leaves the catalog stays KNOWN here. `synap catalog publish`
|
|
4
|
+
# sends each entry to the control plane (POST /api/packages/retire) after the
|
|
5
|
+
# live publishes, so a pod can tell "retired, replaced by X" from "never heard
|
|
6
|
+
# of it" and offer the person a safe move to X. Removing an entry does NOT
|
|
7
|
+
# un-retire the row on the CP.
|
|
8
|
+
#
|
|
9
|
+
# slug the retired slug
|
|
10
|
+
# kind workspace (default) · capability · skill · pack · automation
|
|
11
|
+
# replacedBy a LIVE catalog slug of the same kind, or absent when nothing replaces it
|
|
12
|
+
# reason one plain sentence a person reads
|
|
13
|
+
# since the date it left the catalog (YYYY-MM-DD)
|
|
14
|
+
#
|
|
15
|
+
# Validation (`synap catalog validate`): replacedBy is live and not retired; no
|
|
16
|
+
# slug is both live and retired in the same category; reasons are not empty.
|
|
17
|
+
# The evidence behind each entry is in pod file 00c1b2fe-ef98-41fa-86cf-801dfab12cd1 ("Template lifecycle: decisions wave + lane catalog").
|
|
18
|
+
|
|
19
|
+
apiVersion: synap/v1
|
|
20
|
+
retired:
|
|
21
|
+
# c64ec2fe: "ecosystem (absorbs radar+content-os per ratified merge)". Every
|
|
22
|
+
# radar kind (competitor, market-segment, trend, inspiration) is declared by ecosystem.
|
|
23
|
+
- slug: radar
|
|
24
|
+
kind: workspace
|
|
25
|
+
replacedBy: ecosystem
|
|
26
|
+
reason: Radar was merged into Ecosystem, which tracks competitors, market segments, trends and inspiration in one place.
|
|
27
|
+
since: "2026-07-16"
|
|
28
|
+
|
|
29
|
+
# 2026-07-22 (b12efb1b). Second Brain (life-os) declares every kind Personal
|
|
30
|
+
# held (note, bookmark, article; projects are the pod's own).
|
|
31
|
+
- slug: personal
|
|
32
|
+
kind: workspace
|
|
33
|
+
replacedBy: life-os
|
|
34
|
+
reason: Personal was replaced by Second Brain, which keeps your notes, bookmarks and articles together.
|
|
35
|
+
since: "2026-07-22"
|
|
36
|
+
|
|
37
|
+
# R7 2026-09-27 (src/builder-dev-fold.template.test.ts): the four views worth
|
|
38
|
+
# keeping were rebuilt over Builder's own kinds (slug builder-workspace, shown as "Dev"). credential, vendor, repository,
|
|
39
|
+
# service and environment were NOT ported.
|
|
40
|
+
- slug: dev-dashboard
|
|
41
|
+
kind: workspace
|
|
42
|
+
replacedBy: builder-workspace
|
|
43
|
+
reason: Dev Dashboard was folded into the Dev space, where its service health, deploy and cost views now live.
|
|
44
|
+
since: "2026-09-27"
|
|
45
|
+
|
|
46
|
+
# R7 2026-09-27: retired as a template, its `agent` kind deliberately not
|
|
47
|
+
# ported anywhere. Not a system space (only pod-admin carries a system_slug).
|
|
48
|
+
- slug: agent-fleet
|
|
49
|
+
kind: workspace
|
|
50
|
+
reason: Agent Fleet is no longer offered; your agents belong to the pod itself, not to a space.
|
|
51
|
+
since: "2026-09-27"
|
|
52
|
+
|
|
53
|
+
# eaf49166: it declared no profiles, only tools, skills and vault. It lives on
|
|
54
|
+
# as the capability `posthog-analytics` (capabilities/), a different category.
|
|
55
|
+
- slug: posthog-analytics
|
|
56
|
+
kind: workspace
|
|
57
|
+
reason: PostHog Analytics is now a capability you connect, not a space.
|
|
58
|
+
since: "2026-10-06"
|
|
59
|
+
|
|
60
|
+
# relay-app's private template (relay-app/src/lib/workspace-templates/relay.ts).
|
|
61
|
+
# Never in the catalog, but pods hold it. person and company move to CRM;
|
|
62
|
+
# event and task are pod-wide; campaign and contact have no home in CRM.
|
|
63
|
+
- slug: relay
|
|
64
|
+
kind: workspace
|
|
65
|
+
replacedBy: crm
|
|
66
|
+
reason: Relay was replaced by CRM, which keeps the people and companies you track.
|
|
67
|
+
since: "2026-10-11"
|
|
68
|
+
|
|
69
|
+
# relay-app's private template (relay-app/src/lib/workspace-templates/pkm.ts).
|
|
70
|
+
# life-os.yaml says it was consolidated from the CP pkm-template; it declares
|
|
71
|
+
# note, bookmark and highlight.
|
|
72
|
+
- slug: pkm
|
|
73
|
+
kind: workspace
|
|
74
|
+
replacedBy: life-os
|
|
75
|
+
reason: Knowledge was replaced by Second Brain, which keeps your notes, bookmarks and highlights.
|
|
76
|
+
since: "2026-10-11"
|
|
77
|
+
|
|
78
|
+
# Founder decision 2026-10-12 (pod file 00c1b2fe-ef98-41fa-86cf-801dfab12cd1, decisions wave item 1).
|
|
79
|
+
# Its lead/client fields, the campaign kind and "Qualify a lead" folded into
|
|
80
|
+
# crm.yaml; "Advance a commercial proposal" was dropped for CRM's "Win a
|
|
81
|
+
# deal"; the Synap-fee + commission model moved to the private arch-sales.yaml,
|
|
82
|
+
# itself retired the same day (below).
|
|
83
|
+
- slug: business-developer
|
|
84
|
+
kind: workspace
|
|
85
|
+
replacedBy: crm
|
|
86
|
+
reason: Business Developer was folded into CRM, which now qualifies your leads and runs your campaigns.
|
|
87
|
+
since: "2026-10-12"
|
|
88
|
+
|
|
89
|
+
# Founder decision 2026-10-12: The Arch (project + pod) is no longer in use.
|
|
90
|
+
# Both were private. Their sources are kept, never loaded, in retired-sources/.
|
|
91
|
+
# Existing pods keep their spaces and data; nothing offers them again.
|
|
92
|
+
- slug: arch-sales
|
|
93
|
+
kind: workspace
|
|
94
|
+
reason: Arch Sales was The Arch's own business-developer commission model, and that project is no longer in use.
|
|
95
|
+
since: "2026-10-12"
|
|
96
|
+
|
|
97
|
+
- slug: the-arch
|
|
98
|
+
kind: workspace
|
|
99
|
+
reason: The Arch was a private suite for a project that is no longer in use.
|
|
100
|
+
since: "2026-10-12"
|
|
101
|
+
|
|
102
|
+
# 2026-10-15, "Any link → data": every pod reads a
|
|
103
|
+
# public link itself (the builtin web read verb in Synap Core), so this pack
|
|
104
|
+
# and its capture_public_url twin are no longer offered. Nothing replaces it:
|
|
105
|
+
# nothing needs installing.
|
|
106
|
+
- slug: web.read
|
|
107
|
+
kind: capability
|
|
108
|
+
reason: Reading a public link is built into every pod.
|
|
109
|
+
since: "2026-10-15"
|
|
110
|
+
|
|
111
|
+
# Founder decision 2026-10-23: one space per domain. For a founder-led company
|
|
112
|
+
# outreach is part of the commercial job, so the CRM absorbs it: the
|
|
113
|
+
# `outreach-touch` kind (same slug and lifecycle keys), `sent_to` / `part_of`,
|
|
114
|
+
# the two views, "Personalized Outreach" and the LinkedIn ingest live in
|
|
115
|
+
# crm.yaml. `outreach-campaign` folded into CRM's `campaign` (campaign-type
|
|
116
|
+
# outreach); "Send an outreach message" became "Read the reply to an outreach
|
|
117
|
+
# message" (the agent drafts, a person sends). No pod had it installed.
|
|
118
|
+
- slug: outreach-comms
|
|
119
|
+
kind: workspace
|
|
120
|
+
replacedBy: crm
|
|
121
|
+
reason: Outreach & Comms was folded into CRM, which now keeps your outreach campaigns and the messages drafted for you to send.
|
|
122
|
+
since: "2026-10-23"
|
|
123
|
+
|
|
124
|
+
# Static edit loop W5 (build plan ab3e0a5a §4, founder D0-D1, 2 Nov 2026).
|
|
125
|
+
# Superseded since 2026-10-06: Content OS re-declared its three video kinds
|
|
126
|
+
# (content-composition, content-asset, render-job) verbatim, their views and
|
|
127
|
+
# pipeline links; brand-library folded its production-recipe into
|
|
128
|
+
# brand-template. The edit loop (edit-loop skill, video-toolbox routing)
|
|
129
|
+
# replaced its render pipeline. The founder's pod holds no Content Studio
|
|
130
|
+
# space (2026-11-03); a pod that does keeps it as it is (the resolver
|
|
131
|
+
# refuses a new install and leaves an installed space alone).
|
|
132
|
+
- slug: content-studio
|
|
133
|
+
kind: workspace
|
|
134
|
+
replacedBy: content-os
|
|
135
|
+
reason: Content Studio was folded into Content OS, which now keeps your videos, carousels and other visual posts with the rest of your content.
|
|
136
|
+
since: "2026-11-03"
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: app-factory-build-slice
|
|
3
|
+
description: Build one slice of a new app from its approved design boards — scope by board files, data read server-side only through the person's sign-in, governed writes, the Website Factory gates, an independent re-run of every gate by the orchestrator, and a stop for the person's first look after slice 1. Use in the Build stage of "Build an app (App Factory)", or when handing an approved design to a coding agent.
|
|
4
|
+
metadata:
|
|
5
|
+
synap_native: true
|
|
6
|
+
auto_load: false
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# App Factory: build a slice
|
|
10
|
+
|
|
11
|
+
A slice is a set of approved boards built pixel for pixel, gate-green, in a pull request. It never starts before the
|
|
12
|
+
person approved the design, and never starts while a gap it depends on is open without a labelled bridge. Content
|
|
13
|
+
Studio's slice S1 (Home + idea bank, read-only, real data) is the reference.
|
|
14
|
+
|
|
15
|
+
## 1. Write the slice brief (in the app repo, e.g. `BUILD-S1.md`)
|
|
16
|
+
|
|
17
|
+
The builder reads it fully, then `AGENTS.md`, `.claude/skills/build-site/SKILL.md`, the plan document (sections it
|
|
18
|
+
names) and the boards. The brief says:
|
|
19
|
+
|
|
20
|
+
- **Scope, by boards.** Each route with the board files it must match (desktop 1280, phone 390, every state board).
|
|
21
|
+
Shell items outside the slice link to ONE "coming next" page drawn with the kit's `StatePanel`, never a dead link.
|
|
22
|
+
- **Rules computed on the server**, written once (e.g. Home's one line: open interview with unanswered questions →
|
|
23
|
+
owed asks → pending proposals → the most overdue item). The counts that must agree across pages come from one
|
|
24
|
+
function.
|
|
25
|
+
- **Not in this slice**, explicitly (writes, sign-in, the pages of later slices).
|
|
26
|
+
- **Data.** The read set per page (route, `workspaceId` always passed, what it returns), the request budget per page
|
|
27
|
+
against the key's rate limit, cache per request only (no shared cache across people). A failed read renders the
|
|
28
|
+
error state with retry, never an empty list.
|
|
29
|
+
- **Sign-in, never a key.** The app is a pod-app site (`create-site --path pod-app`): the person signs in to their pod
|
|
30
|
+
and the server reads through `@synap-core/sdk/connect` (`createPodAppAuth`); follow the kit's AGENTS.md. Never an app
|
|
31
|
+
key; the session secret stays server-only, never in client code, never `NEXT_PUBLIC_*`, never logged or committed.
|
|
32
|
+
Not connected → the kit's "not connected" state. What a pod app can see and do (spaces, roles, pod-wide records,
|
|
33
|
+
writes): `node_modules/@synap-core/sdk/AGENTS.md`, section "What a pod app can see and do". It wins over anything
|
|
34
|
+
here. If something the app needs is not supported yet, that is a recorded gap with an owner — never edit
|
|
35
|
+
`synap-check.mjs` to pass.
|
|
36
|
+
- **Writes are governed.** A write from a pod app is a proposal in a granted space (`proposed` is success: link the
|
|
37
|
+
review, label it in the UI "Proposed · in your pod", never retry it); a person connection applies directly.
|
|
38
|
+
- **Look.** `design-kit/tokens.css` decisions copied into `app/brand.css` (shadcn token names), fonts self-hosted
|
|
39
|
+
(`next/font/local` or `@fontsource*`, never Google at build time), sizes = shadcn base-nova plus only the sizes the
|
|
40
|
+
design decisions added (as cva variants). Private app: `app/robots.ts` disallows all, pages carry `noindex`, and any
|
|
41
|
+
cookie (e.g. the sidebar's `sidebar_state`) is named on the privacy page.
|
|
42
|
+
|
|
43
|
+
## 2. Gates (the builder runs them, quotes them, fixes until green)
|
|
44
|
+
|
|
45
|
+
- `pnpm verify` green (typecheck, lint, arc / extensions / synap / registry checks, build, smoke).
|
|
46
|
+
- `pnpm shots` and READ the PNGs and `.shots/REPORT.md` at 375 / 768 / 1280 (and dark, if designed): zero serious or
|
|
47
|
+
critical axe issues; compare each page with its board and list every remaining difference.
|
|
48
|
+
- Credential grep: the key's variable name appears only in server files
|
|
49
|
+
(`grep -rn "<KEY_VAR>" app components lib`).
|
|
50
|
+
- Mutation grep (read-only slices): no write call anywhere
|
|
51
|
+
(`grep -rnE 'method: ?"(POST|PATCH|PUT|DELETE)"|\.create\(|\.update\(|\.transition\(' app components lib` is empty).
|
|
52
|
+
- Small commits on a branch `s<N>-<slug>`, pushed, a pull request to main. Never push to main, never deploy
|
|
53
|
+
production; a preview deploy only when `VERCEL_TOKEN` is set (if not, say so and skip).
|
|
54
|
+
|
|
55
|
+
## 3. Independent verification (the orchestrator, not the builder)
|
|
56
|
+
|
|
57
|
+
Never accept "done" from the builder's report. On the devbox (heavy gates never on the Mac; take the gate lock):
|
|
58
|
+
check out the PR head, run `pnpm verify` and the two greps yourself, read the screenshots, and quote the outputs.
|
|
59
|
+
Look for green-by-accident: a verify that passed only through a temporary proxy or a cached font, a flag that does not
|
|
60
|
+
exist or is not the pod-app path (`create-site --path pod-app`), ids in the brief that drifted from the pod. Record each trap you find as a lesson.
|
|
61
|
+
|
|
62
|
+
## 4. Report and stop
|
|
63
|
+
|
|
64
|
+
Post in the slice's session room: what was built (routes, boards matched), the quoted gates, screenshot findings by
|
|
65
|
+
severity (VERIFIED), what only the person can judge (NEEDS-DOGFOOD), and the gaps still open with owners. After
|
|
66
|
+
**slice 1, STOP**: the person's first look on the preview (or the screenshots) decides the next slice. Later slices
|
|
67
|
+
continue in order unless the person stops them; each ends with the same report.
|
|
68
|
+
|
|
69
|
+
Done when: the PR is open, every gate is quoted by the orchestrator's own run, the differences from the boards are
|
|
70
|
+
listed, and (after slice 1) the person has been asked for their first look.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"apiVersion": "synap/v1",
|
|
3
|
+
"kind": "skill",
|
|
4
|
+
"meta": {
|
|
5
|
+
"slug": "app-factory-build-slice",
|
|
6
|
+
"name": "App Factory: build a slice",
|
|
7
|
+
"description": "Build one slice of an app from its approved boards: server-side reads through the person's sign-in, governed writes, the Website Factory gates, an independent re-run of every gate, and a stop for the person's first look after slice 1.",
|
|
8
|
+
"tags": [
|
|
9
|
+
"skill",
|
|
10
|
+
"app-factory",
|
|
11
|
+
"build",
|
|
12
|
+
"builder"
|
|
13
|
+
],
|
|
14
|
+
"isPublic": true
|
|
15
|
+
},
|
|
16
|
+
"dependencies": []
|
|
17
|
+
}
|