@profile-as-code/cli 0.2.0 → 0.3.5

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.
@@ -0,0 +1,150 @@
1
+ ---
2
+ name: hotmart-profile
3
+ description: >
4
+ Transforma los hechos del SSOT (profile-data/content/*.yaml) en el cuerpo de
5
+ perfil de la página de creador de Hotmart — texto PLANO listo para pegar, no
6
+ markdown ni dump. Hotmart es la tienda de productos digitales + membresías
7
+ (Members Area / recurring billing) para los mercados hispano/luso — familia
8
+ creator-monetization (research/SOTA-2026.md). El agente ejecutante produce N
9
+ variantes; el humano elige; la elegida se registra como variante activa
10
+ (content/active.yaml) y el paste se marca en el ledger (D18) con
11
+ `pasco status --mark`.
12
+ model: juicio (frontier) — el ángulo de storefront (vender productos, no pedir
13
+ donaciones) no es delegable a modelos pequeños
14
+ applies_to: hotmart
15
+ projection: agent-agnostic (AionUi, OpenHands, Claude Code, Cursor, pi…)
16
+ version: 0.1.0
17
+ status: draft
18
+ sources: skills/hotmart/research/SOTA-2026.md
19
+ ---
20
+
21
+ # Hotmart perfil de creador — skill de comunicación
22
+
23
+ ## Misión
24
+
25
+ Convertir los HECHOS del workspace (SSOT) en el **cuerpo de perfil** de la
26
+ página de creador de Hotmart: qué vendés, qué construis y UNA acción
27
+ (explorar los productos). Hotmart es plataforma **paste** (D9 — sin API
28
+ documentada para el cuerpo del perfil, SOTA-2026 §6 [?]): el artefacto que
29
+ produce `pasco build hotmart` ES lo que se pega. Este skill es la capa de
30
+ **juicio y narrativa** (D4/D5); el renderer determinista garantiza el mapa 1:1
31
+ con la fila de `bios`.
32
+
33
+ ⚠️ **Superficie de pegado no verificada [?]**: ni el campo exacto del cuerpo
34
+ de perfil ni la URL del "Hotmart Space" (dirección web personalizada) están
35
+ documentados públicamente hoy (SOTA-2026 §5/§6). Verificá ambos en el
36
+ dashboard ANTES del primer paste — y reconciliá este skill con lo verificado.
37
+
38
+ ## Regla de oro
39
+
40
+ > Los HECHOS son sagrados (byte-idénticos al SSOT); solo la HISTORIA varía.
41
+
42
+ - Nombres, fechas, DOIs, números, URLs: **idénticos** a `content/*.yaml`.
43
+ - Texto **plano** para el cuerpo de perfil: sin markdown, sin HTML — no hay
44
+ documentación de formato enriquecido para ese campo (SOTA-2026 §6 [?]);
45
+ asumí texto plano hasta verificar lo contrario.
46
+ - URLs SOLO de `identity.links` (regla drift). El host de la plataforma es
47
+ `hotmart.com` (sin guion) — pero la URL de Space tiene forma no verificada
48
+ [?]: no inventes URLs de perfil; dejá que el link canónico lo fije
49
+ `identity.links` después de verificar el Space real.
50
+ - Claims cuantitativos SOLO de `projects[].evidence` o `keywords.geo.claims`.
51
+ - **Sin promesas de resultados**: los ToU prohíben prometer ganancias o
52
+ resultados (ToU §1.4 [OFICIAL S2]) — el copy vende el trabajo y la
53
+ evidencia, nunca "ingresa X hacé esto".
54
+
55
+ ## Fuente de datos
56
+
57
+ Lee el workspace (ruta del `.pascorc` o `--workspace`):
58
+
59
+ ```
60
+ content/identity.yaml → nombre, email de contacto (hecho, v1.5), links canónicos
61
+ content/positioning.yaml → statement + ángulos por audiencia + anclas GEO
62
+ content/projects.yaml → qué construís (status + evidence verificable)
63
+ content/skills.yaml → stack con pesos por plataforma
64
+ content/bios.yaml → textos base por plataforma (punto de partida)
65
+ content/keywords.yaml → SEO + GEO (associations/claims)
66
+ ```
67
+
68
+ ## Estrategia comunicativa (3 preguntas — storefront ≠ tip jar)
69
+
70
+ 1. **¿Quién lee?** Compradores que llegaron de tus otros canales decididos a
71
+ comprar (o comparar); LLMs que citan perfiles.
72
+ 2. **¿Qué quiero que hagan?** UNA acción: explorar y comprar un producto
73
+ concreto. Hotmart es tienda — el frame es "esto resuelve X", no "apoyá mi
74
+ trabajo" (ese frame es de `kofi`/`patreon`).
75
+ 3. **¿Cuál es mi señal más fuerte?** El producto con evidencia: qué
76
+ construis AHORA y qué resultado verificable tiene cada producto.
77
+
78
+ Liderá con #3 filtrado por #1. El producto se descubre en el marketplace y en
79
+ tus otros canales; el cuerpo de perfil es el cierre de confianza, no el
80
+ descubrimiento. [MI]
81
+
82
+ ## Estructura del cuerpo (prosa plana, ≤ 3 párrafos)
83
+
84
+ 1. **Hook (2–3 líneas)**: quién sos y qué resuelve tu catálogo — del
85
+ `statement` reescrito en prosa; teje las anclas GEO sin stuffing.
86
+ 2. **El producto y su evidencia (2–4 líneas)**: UNA evidencia verificable de
87
+ `evidence[]`. "Este producto hace X" en concreto, con el dato del SSOT.
88
+ 3. **CTA único**: explorar los productos (el catálogo ES el CTA). Email de
89
+ contacto como hecho (de `identity.email`) si aplica — texto plano.
90
+
91
+ Lo demás NO va en el cuerpo: links de producto viven en
92
+ `projects[].links`/`identity.links` (regla drift — y la URL de producto
93
+ verificada es `hotmart.com/<lang>/marketplace/products/<slug>/<ID>`,
94
+ SOTA-2026 §5); la estructura de la página de creador (banner, avatar, links
95
+ sociales si existen) se verifica en el dashboard en el primer paste y se
96
+ documenta acá con fuente.
97
+
98
+ ## Límites (resumen con fuente — SOTA-2026 §3)
99
+
100
+ - Cuerpo de perfil: **sin límite documentado** [?] — no hay artículo del Help
101
+ Center que documente el campo. Soft-cap en checks.yaml (curación, no hard
102
+ rule).
103
+ - Fees (transparencia para fijar precio — fuera del renderer): fijo por
104
+ transacción BRL 2.49 / USD 1.00 / EUR 1.00 + servicio 9.9% (20% en
105
+ micro-transacciones ≤ BRL 10 / USD 15 / EUR 15) [OFICIAL S3 §5.2–§5.4].
106
+ - Sin cuota mensual/anual [OFICIAL S1].
107
+ - Payout a Ecuador: **[?]** — el rail de Hotpay hacia bancos ecuatorianos no
108
+ está documentado (SOTA-2026 §4); el ítem de verificación vive en la
109
+ instancia venture. NO vendas/prometas nada dependiente de payout hasta
110
+ resolverlo.
111
+
112
+ ## Variantes (flujo refine)
113
+
114
+ - Producí **N variantes** (`--variants N`, default 3) con ángulos distintos:
115
+ 1. **Stewardship** (default): lidera con el trabajo vivo + qué compra el
116
+ lector.
117
+ 2. **Práctica**: lidera con el resultado del producto (antes/después,
118
+ problema→solución) para compradores pragmáticos.
119
+ 3. **Soberanía**: lidera con la tesis (IA soberana / economía agéntica),
120
+ el catálogo como infraestructura independiente.
121
+ - Cada variante: `variantId` = `hotmart-<lang>-<n>` (ej. `hotmart-es-1`).
122
+ - El humano elige; se registra con `pasco refine hotmart --choose <id>` →
123
+ escribe `content/active.yaml`; el paste posterior se marca con
124
+ `pasco status --mark <ledgerKey> hotmart` (D18).
125
+
126
+ ## Verificación (checks)
127
+
128
+ - `pasco validate` exit 0 (schema + drift 0 + geo).
129
+ - Facts byte-idénticos: cruzá cada hecho del cuerpo contra el YAML.
130
+ - Plain text: cero markdown `[..](..)`, cero HTML.
131
+ - Links: 0 links inline en el cuerpo (viven en `identity.links`); el host
132
+ canónico es `hotmart.com`.
133
+ - Idioma: la bio del `--lang` solicitado existe (compile NO hace fallback por
134
+ fila — artefacto vacío significa gap visible, no silencio).
135
+ - URL viva: la página resuelve en browser (el SPA 404-a rutas adivinadas —
136
+ verificá el Space real desde el dashboard, SOTA-2026 §5).
137
+
138
+ ## GEO (consistencia = citabilidad)
139
+
140
+ - Los hechos deben coincidir byte a byte con CV/LinkedIn/GitHub (fechas,
141
+ roles, papers) — el comprador que cruza canales debe encontrar UNA persona.
142
+ - Sin directorio público de perfiles documentado [?] — la citabilidad viene
143
+ de que otros canales referencien la tienda; manté los anclas semánticos del
144
+ SSOT.
145
+ - Host único: `hotmart.com` — jamás emitir URLs de perfil cuya forma no esté
146
+ verificada (SOTA-2026 §5 [?]); el link canónico entra a `identity.links`
147
+ cuando el Space real esté verificado.
148
+ - **i18n**: Hotmart localiza el marketplace por `<lang>` (`/en/`, `/pt-br/`,
149
+ `/es/` — SOTA-2026 §5) — priorizá `es` para audiencia EC/ES, `en` como
150
+ requerido por D8/§11.
@@ -0,0 +1,43 @@
1
+ # checks.yaml — criterios machine-readable para `pasco check hotmart`
2
+ # (unión con content/checks.yaml del workspace; misma rule catalog que el schema).
3
+ #
4
+ # Fuente de los valores: research/SOTA-2026.md (todas las fuentes fechadas
5
+ # 2026-10-05). Hotmart NO documenta límite para el cuerpo de perfil [?] — no
6
+ # hay artículo del Help Center que describa el campo (SOTA-2026 §6); el
7
+ # max-chars es soft-cap curacional, no hard rule.
8
+
9
+ - id: h-bio-soft
10
+ platform: hotmart
11
+ rule: max-chars
12
+ value: 500
13
+ note: "Soft-cap curacional del cuerpo de perfil — Hotmart no documenta el campo ni un límite [?]; curation, no hard rule (SOTA-2026 §6)."
14
+
15
+ - id: h-facts-identity
16
+ platform: hotmart
17
+ rule: fact-present
18
+ value: true
19
+ note: "Hechos del cuerpo byte-idénticos al SSOT (D4); el cuerpo es el cierre de confianza del storefront (SOTA-2026 §1)."
20
+
21
+ - id: h-links-identity
22
+ platform: hotmart
23
+ rule: link-in-identity
24
+ value: true
25
+ note: "Los links (tienda verificada, productos hotmart.com/<lang>/marketplace/...) viven en identity.links; la URL del Space queda fuera hasta verificarse (SOTA-2026 §5 [?])."
26
+
27
+ - id: h-geo-consistent
28
+ platform: hotmart
29
+ rule: geo-consistent
30
+ value: true
31
+ note: "Hechos consistentes con CV/LinkedIn/GitHub = citabilidad; compradores y LLMs cruzan canales (SOTA-2026 §7)."
32
+
33
+ - id: h-live
34
+ platform: hotmart
35
+ rule: url-live
36
+ value: true
37
+ note: "Página resuelve en browser — el SPA 404-a rutas adivinadas; verificá el Space real desde el dashboard (SOTA-2026 §5)."
38
+
39
+ - id: h-lang
40
+ platform: hotmart
41
+ rule: lang-present
42
+ value: en
43
+ note: "EN requerido (D8/§11); compile no hace fallback por fila de bios — artefacto vacío = gap visible. ES priorizado para audiencia EC/ES (marketplace /es/)."
@@ -0,0 +1,53 @@
1
+ # Playbook — deploy Hotmart (paste, D9)
2
+
3
+ Superficie: página de creador de Hotmart (storefront + Members Area) — **sin
4
+ API documentada para el cuerpo del perfil** (SOTA-2026 §6 [?]). El deploy es
5
+ manual; el ledger lo registra `pasco status --mark`.
6
+
7
+ ⚠️ **Primer paste = verificación de superficie**: el campo exacto del cuerpo
8
+ de perfil y la URL del Hotmart Space están sin verificar [?] (SOTA-2026
9
+ §5/§6). En el primer paste documentá (en este archivo, con fuente + fecha)
10
+ dónde se pega y qué URL pública resulta — eso convierte el [?] en dato.
11
+
12
+ ## Pre-paste
13
+
14
+ 1. `pasco validate` — exit 0 (schema + drift + geo).
15
+ 2. `pasco build hotmart --lang <lang>` — escribe `profiles/hotmart/README.md`;
16
+ ese archivo ES el texto a pegar (plano, 1 fila de bios — long > medium >
17
+ short).
18
+ 3. Verificá el link canónico: `identity.links` debe contener la URL pública
19
+ de tu tienda cuando esté verificada (host `hotmart.com`). Mientras la URL
20
+ de Space esté sin verificar [?], NO la inventes — dejá el link fuera y
21
+ agrégalo con la URL real copiada del dashboard (regla drift).
22
+ 4. **Gate de negocio (EC)**: el payout a banco ecuatoriano está `[?]`
23
+ (SOTA-2026 §4) — el ítem de verificación vive en la instancia venture
24
+ (issue #137). Un paste de perfil no depende del payout; una venta, sí.
25
+
26
+ ## Paste (dashboard)
27
+
28
+ Orden sugerido (a verificar en el primer paste — SOTA-2026 §5/§6):
29
+
30
+ 1. Ingresá a `app.hotmart.com` con la cuenta de creador.
31
+ 2. Localizá la configuración de página/tienda del creador (el producto
32
+ "Hotmart Space" del pricing — dirección web personalizada [?]) y pegá el
33
+ contenido de `profiles/hotmart/README.md` tal cual en el campo de
34
+ descripción/perfil (texto plano).
35
+ 3. Verificá cómo queda el render: si el campo aplica formato enriquecido,
36
+ documentalo acá (con fuente) — el renderer asume texto plano.
37
+ 4. Los links de producto NO van en el cuerpo: pertenecen a
38
+ `identity.links`/`projects[].links` del SSOT y a los campos de producto
39
+ del dashboard.
40
+
41
+ ## Post-paste (verificación + ledger)
42
+
43
+ 1. Verificá la página pública en **browser**: cuerpo visible, sin markdown
44
+ leaks, sin caracteres de escape raros.
45
+ 2. Marcá el ledger: `pasco status --mark bios:hotmart.long@en hotmart`
46
+ (ledgerKey = la fila de bios exacta que se pegó).
47
+ 3. `pasco status hotmart` — in-sync. `pasco diff` vacío para esa unidad.
48
+
49
+ ## No hacerlo a mano en el workspace
50
+
51
+ - El paste solo se registra vía `--mark`; editar `content/deployments.yaml`
52
+ a mano rompe el contrato D18 (solo `pasco` escribe el ledger).
53
+ - No pegues variantes no elegidas (solo la fila activa de bios es deployable).
@@ -0,0 +1,142 @@
1
+ # SOTA Hotmart — versioned research (2026-10-05)
2
+
3
+ Research date: 2026-10-05 (UTC). Same date for every source (each URL fetched
4
+ 2026-10-05 by this session, unless noted). Tags: `[OFICIAL]` = Hotmart's own
5
+ docs/pages/legal texts (primary) · `[WEB]` = primary URL fetched (incl. via
6
+ reader mirror) · `[BENCHMARK]` = real-profile observation · `[?]` = not
7
+ calibratable / not documented.
8
+
9
+ Method / caveats: the four public legal/pricing pages were fetched plain
10
+ (hotmart.com serves them server-rendered). The Help Center
11
+ (help.hotmart.com) is a JS-rendered SPA — pages were verified through a
12
+ headless reader mirror (`r.jina.ai/<url>`, marked `[WEB]`); its search API
13
+ resolved with the `?query=` parameter (EN + pt-BR). `developers.hotmart.com`
14
+ docs render a JS shell on the root and 403 (CloudFront) on deep paths — the
15
+ API catalog could not be enumerated today. The canonical home for the shared
16
+ EC-payout verification item is the venture instance
17
+ (`venture-instance-pasco/docs/research/`) — issue #137.
18
+
19
+ ## 1. What Hotmart is — platform identity
20
+
21
+ - Digital-products storefront + memberships + affiliate program; serves the
22
+ Spanish/Portuguese-speaking markets (root page locales: `/pt-br`, `/es`,
23
+ `/co`, `/mx`, `/la`). Offices on the footer: Belo Horizonte, Madrid,
24
+ Ámsterdam, Bogotá, Ciudad de México, Nueva York. [OFICIAL S1, S9]
25
+ - Hotmart's OWN market framing (marketing self-description, root page fetched
26
+ 2026-10-05): "Join the world's largest platform for digital products"
27
+ (hero), and FAQ #02: "Hotmart is a global, all-in-one platform, Latin
28
+ America's leader for selling digital and physical products online, with a
29
+ strong focus on e-learning"; self-reported counters +200K creators, over
30
+ $10B in sales, +25M buyers. [OFICIAL S9 — VENDOR MARKETING, not an
31
+ independent measure: quote it as the vendor's claim or leave it out; an
32
+ independently-measured "largest for ES/PT markets" claim is `[?]` (no
33
+ ranking source found 2026-10-05) and was deliberately NOT carried into the
34
+ schema/SPEC/CHANGELOG contract text. Issue #137 framed it as fact without a
35
+ source — corrected here per the repo's evidence rule.]
36
+ - Memberships: the Payment Policy's recurring billing "may also be called a
37
+ 'subscription'"; Members Area is a first-class product surface (pricing nav:
38
+ "Members area"). [OFICIAL S1, S3 §9.1]
39
+ - Pricing model: "No monthly or annual fees. No limits to selling around the
40
+ world. Just pay a transaction fee on each sale you make." [OFICIAL S1]
41
+ - Fee-figure discrepancy lead: FAQ #06 states "9.9% + R$1 per approved sale"
42
+ for revenue up to five figures, with "tiered — the more you earn, the less
43
+ you pay" fees, while Payment Policy §5.2 Table 1 lists a BRL 2.49 fixed fee.
44
+ The FAQ's own "fees page" link likely carries the tier table; §5.2 is the
45
+ binding legal text. Recorded as a lead — re-source before any quoted fee
46
+ claim for BRL offers. [OFICIAL S9 vs S3 §5.2] [?]
47
+
48
+ ## 2. Eligibility (the #133 gate — EC-relevant facts)
49
+
50
+ - ToU §A: "These terms govern the access or use of the resources contained on
51
+ the Platform for all Users, anywhere in the world. Certain features might
52
+ not be available in all territories and to all Users." [OFICIAL S2]
53
+ - ToU §H: the only territorial exclusions are sanctions-based — OFAC (US
54
+ Office of Foreign Assets Control), the UK Sanctions List, the UN Security
55
+ Council Sanctions List. Ecuador is not on those lists. [OFICIAL S2]
56
+ [INF: eligibility as written covers an Ecuador-resident creator; the payout
57
+ rail (§4 below) is the open datum, not eligibility.]
58
+ - ToU §2.8 (Banking Information): after the first sale the creator must
59
+ provide banking information "indicating the bank account in their name";
60
+ registering accounts "located outside the Creator…'s country of residence
61
+ is also prohibited". [OFICIAL S2]
62
+ - Contracting entity varies by residence/currency: Hotmart BR (BRL between
63
+ Brazil-resident users), Hotmart USA (USD/US), Hotmart BV (NL) for
64
+ everything else — an EC creator contracts with Hotmart BV. [OFICIAL S2 §C]
65
+ - ToU §1.4 ("No Promise of Performance, Gain, or Results from the Use of the
66
+ Platform"): Hotmart does not promise results, and neither may creators or
67
+ affiliates — "no Creator, Co-producer or Affiliate can promise any
68
+ performance, gain, or an unobtainable result of any nature". This is the
69
+ clause behind the skill's copy rule (SKILL.md §Regla de oro — no
70
+ results-promising prose). [OFICIAL S2 §1.4]
71
+
72
+ ## 3. Fees (Payment Policy, version updated 2026-09-21 — fetched 2026-10-05)
73
+
74
+ The two creator fees are charged cumulatively, only when a product sells. [OFICIAL S3 §5.1]
75
+
76
+ | Fee | Value | Scope | Source |
77
+ |---|---|---|---|
78
+ | Fixed Fee per Transaction | BRL 2.49 / USD 1.00 / EUR 1.00 | by the BUYER's payment currency (Table 1) | [OFICIAL S3 §5.2] |
79
+ | Service Fee | 20% of the product price up to BRL 10.00; **9.9%** from BRL 10.01 | §5.3 states the threshold in BRL; §5.4 generalizes: offers ≤ USD 15 / EUR 15 are micro-transactions — fixed fee USD 0.10 / EUR 0.10 + 9.9% | [OFICIAL S3 §5.3–§5.4] |
80
+ | SeQura (ES installment method) | 1% of the sales price | only for Spanish buyers, SeQura-registered creators | [OFICIAL S3 §8.3] |
81
+ | Withdrawal minimum (BRL) | BRL 2.00 + a BRL 1.99 withdrawal fee | BRL offers — FAQ #08; §12 (the binding text) was truncated in today's fetch, so treat this as the FAQ figure | [OFICIAL S9 FAQ #08] |
82
+ | Withdrawal deadlines | BRL sales: 30 calendar days after the sale (PIX/Boleto/Hotmart balance: ~2 calendar days); other currencies: 15 calendar days (warranty period) | FAQ #08; §12 truncated | [OFICIAL S9 FAQ #08] |
83
+
84
+ Caveat: §5.3's threshold is BRL-denominated even for other offer currencies;
85
+ §5.4's micro-transaction table is the USD/EUR generalization. A future
86
+ surface-fee claim should quote §5.4 for USD/EUR offers, §5.3 for BRL.
87
+ [OFICIAL S3] [MI: reading]
88
+
89
+ ## 4. Payout rail — the deciding datum is still `[?]`
90
+
91
+ - What is known: after the first sale, the creator registers a bank account
92
+ in their own name in their country of residence (ToU §2.8 — third-party and
93
+ out-of-residence accounts are prohibited). Hotpay processes payments
94
+ "anywhere in the world" (Payment Policy §A) with currency conversion rules
95
+ (§4); withdrawal minimums/deadlines are in the FAQ (§3 table, S9 FAQ #08) —
96
+ §12 (the binding text) was truncated in today's fetch. [OFICIAL S2, S3, S9]
97
+ - What is NOT documented anywhere fetched: whether Hotpay's bank rails settle
98
+ to **Ecuadorian** banks. The legal texts do not enumerate supported payout
99
+ countries; the Help Center withdrawal article was not reachable today
100
+ (JS-rendered SPA; EN + pt-BR searches returned no Space/withdrawal
101
+ article). **Same role as the PayPal-EC datum for `kofi`/`payhip` in #133 —
102
+ carried as `[?]` with the verification item in the venture instance.** [?]
103
+
104
+ ## 5. URL surfaces (verified shapes — and the open Space shape)
105
+
106
+ | Surface | Shape | Status |
107
+ |---|---|---|
108
+ | Marketplace product page (EN) | `hotmart.com/en/marketplace/products/<slug>/<ID>` | verified live 2026-10-05 [OFICIAL S7] |
109
+ | Marketplace product page (PT/ES) | `hotmart.com/pt-br/marketplace/produtos/<slug>/<ID>` · `hotmart.com/es/marketplace/productos/<slug>/<ID>` | verified live 2026-10-05 [OFICIAL S7] |
110
+ | Hotmart Space ("personalized web address" of the creator's storefront page — pricing page S1) | **shape `[?]`** — probes of `/space`, `/profile`, `/espaco` 404'd the JS-rendered SPA (issue #137, 2026-10-05); Help Center has no "Hotmart Space" article indexed (EN + pt-BR, reader mirror) [WEB S5]; `space.hotmart.com` DNS-resolves and redirects to the apex (not a profile shape) [WEB S6] | `[?]` — the skill's follow-up owns sourcing it |
111
+ | Hotmart Pages (landing-page builder — DIFFERENT product) | `<brand>.hotmart.host/<subdir>` or custom domain | verified via Help Center article [OFICIAL S5] — not the profile surface, excluded from drift on purpose |
112
+
113
+ Drift implication (engine side, this repo): `hotmart.com` is the platform
114
+ host (PLATFORM_HOSTS + HANDLE_HOSTS) — host-consistency only. No
115
+ PLATFORM_SUBDOMAIN_HOSTS entry: no verified profile subdomain shape.
116
+ [MI, 2026-10-05]
117
+
118
+ ## 6. Deploy surface — the paste target is `[?]`
119
+
120
+ - Hotmart's public APIs (developers.hotmart.com) cover sales/products
121
+ management per issue #137's verification; the docs were not enumerable
122
+ today (root JS-shell, deep paths 403 CloudFront) → treat the "no management
123
+ API for the profile body" claim as `[?]` until the skill follow-up
124
+ verifies. [WEB S8] + issue #137
125
+ - No public documentation of a profile About/body field was found (the Help
126
+ Center has no such article indexed today). The renderer therefore emits the
127
+ paste source and the playbook defers the exact paste-target field to the
128
+ skill follow-up. [?]
129
+
130
+ ## 7. Source list
131
+
132
+ | # | Source | Fetched |
133
+ |---|---|---|
134
+ | S1 | `https://hotmart.com/en/pricing` | 2026-10-05 |
135
+ | S2 | `https://hotmart.com/en/legal/terms-of-use` (version updated 2026-09-21) | 2026-10-05 |
136
+ | S3 | `https://hotmart.com/en/legal/payments-policy` (version updated 2026-09-21) | 2026-10-05 |
137
+ | S4 | `https://hotmart.com/en/legal` (Terms and Policies index) | 2026-10-05 |
138
+ | S5 | `https://help.hotmart.com/en` (+ searches EN/pt-BR, reader mirror `r.jina.ai`) | 2026-10-05 |
139
+ | S6 | `https://space.hotmart.com/` (DNS/redirect probe) | 2026-10-05 |
140
+ | S7 | `https://hotmart.com/en/marketplace` + product pages | 2026-10-05 |
141
+ | S8 | `https://developers.hotmart.com/docs/en/` (root JS-shell; `api-basics` 403) | 2026-10-05 |
142
+ | S9 | `https://hotmart.com/en` (root: hero + FAQ #02/#06/#08 — vendor market framing, fee-tier and withdrawal figures) | 2026-10-05 |
@@ -0,0 +1,127 @@
1
+ ---
2
+ name: kofi-profile
3
+ description: >
4
+ Transforma los hechos del SSOT (profile-data/content/*.yaml) en el texto
5
+ About de la página de creador de Ko-fi — texto PLANO listo para pegar, no
6
+ markdown ni dump. Patrón: funding-page de creador (research/SOTA-2026.md).
7
+ El agente ejecutante produce N variantes; el humano elige; la elegida se
8
+ registra como variante activa (content/active.yaml) y el paste se marca en
9
+ el ledger (D18) con `pasco status --mark`.
10
+ model: juicio (frontier) — los ángulos de soporte/cita no son delegables a modelos pequeños
11
+ applies_to: kofi
12
+ projection: agent-agnostic (AionUi, OpenHands, Claude Code, Cursor, pi…)
13
+ version: 0.1.0
14
+ status: draft
15
+ sources: skills/kofi/research/SOTA-2026.md
16
+ ---
17
+
18
+ # Ko-fi About — skill de comunicación
19
+
20
+ ## Misión
21
+
22
+ Convertir los HECHOS del workspace (SSOT) en el texto **About** de la página
23
+ Ko-fi: qué hacés, qué financia cada aporte, y UNA acción (apoyar). Ko-fi es
24
+ plataforma **paste** (D9 — sin API de deploy, S18): el artefacto que produce
25
+ `pasco build kofi` ES lo que se pega. Este skill es la capa de **juicio y
26
+ narrativa** (D4/D5); el renderer determinista garantiza el mapa 1:1 con la
27
+ fila de `bios`.
28
+
29
+ ## Regla de oro
30
+
31
+ > Los HECHOS son sagrados (byte-idénticos al SSOT); solo la HISTORIA varía.
32
+
33
+ - Nombres, fechas, DOIs, números, URLs: **idénticos** a `content/*.yaml`.
34
+ - Texto **plano** para el About: sin markdown, sin HTML, sin links inline —
35
+ el card About se renders como texto plano y los links viven en el feature
36
+ **Social links** (hasta 15, `https://` completo) (SOTA-2026 §2, [WEB S12]).
37
+ - URLs SOLO de `identity.links` (regla drift). No inventes links.
38
+ - Claims cuantitativos SOLO de `projects[].evidence` o `keywords.geo.claims`.
39
+
40
+ ## Fuente de datos
41
+
42
+ Lee el workspace (ruta del `.pascorc` o `--workspace`):
43
+
44
+ ```
45
+ content/identity.yaml → nombre, email de contacto (hecho, v1.5), links canónicos
46
+ content/positioning.yaml → statement + ángulos por audiencia + anclas GEO
47
+ content/projects.yaml → qué construís (status + evidence verificable)
48
+ content/skills.yaml → stack con pesos por plataforma
49
+ content/bios.yaml → textos base por plataforma (punto de partida)
50
+ content/keywords.yaml → SEO + GEO (associations/claims)
51
+ ```
52
+
53
+ ## Estrategia comunicativa (3 preguntas — SOTA-2026 §7)
54
+
55
+ 1. **¿Quién lee?** Lectores que ya te descubrieron por otro canal y evalúan
56
+ apoyar; personas que compartieron el link (preview social).
57
+ 2. **¿Qué quiero que hagan?** UNA acción: apoyar (one-off o membresía) — con
58
+ confianza de que el dinero financia trabajo concreto.
59
+ 3. **¿Cuál es mi señal más fuerte?** El trabajo activo con evidencia: qué
60
+ construis AHORA y qué aporta cada contribución (stewardship → sostenibilidad).
61
+
62
+ Liderá con #3 filtrado por #1. La página carga a mitad de la hero ([OFICIAL
63
+ S5]): las primeras 2–3 líneas del About son el "above the fold" del About.
64
+
65
+ ## Estructura del About (prosa plana, ≤ 3 párrafos)
66
+
67
+ 1. **Hook (2–3 líneas)**: quién sos y qué construís ahora — del `statement`
68
+ reescrito en prosa; teje las anclas GEO sin stuffing.
69
+ 2. **Qué financia cada aporte (2–4 líneas)**: el trabajo vivo con UNA
70
+ evidencia verificable (de `evidence[]`). "Cada aporte financia X" en
71
+ concreto, no en genérico.
72
+ 3. **CTA único**: apoyar (la página ES el CTA). Email de contacto como hecho
73
+ (de `identity.email`) si aplica — texto plano, la plataforma no lo hace
74
+ clickable dentro del bio [WEB S12]; el canalClickable es Social links.
75
+
76
+ Lo demás NO va en el About: hasta 15 links al feature **Social links**
77
+ ([OFICIAL S3]); nombre display en Settings → Profile; status ≤40 chars como
78
+ one-liner visible (campo separado, **limitado a 40** [OFICIAL S1]); preview
79
+ social separado del About ([OFICIAL S4]).
80
+
81
+ ## Límites (resumen con fuente — SOTA-2026 §1)
82
+
83
+ - About/bio: **sin límite documentado** por Ko-fi [?] — soft-cap en checks.yaml
84
+ (curation, no hard rule). El card trunca tras unas líneas con "Show more"
85
+ [BENCHMARK S12]: lo esencial va primero.
86
+ - Status: **≤ 40 chars** [OFICIAL S1] (fuera del renderer; manual).
87
+ - Membership terms (no bio): 10,000 chars [OFICIAL S16].
88
+
89
+ ## Variantes (flujo refine)
90
+
91
+ - Producí **N variantes** (`--variants N`, default 3) con ángulos distintos:
92
+ 1. **Stewardship** (default): lidera con el trabajo vivo + qué financia.
93
+ 2. **Soberanía**: lidera con la tesis (IA soberana / economía agéntica),
94
+ el aporte como infraestructura independiente.
95
+ 3. **Transparencia**: lidera con el mapa de uso del dinero (qué cubre
96
+ cada peso) para donantes pragmáticos.
97
+ - Cada variante: `variantId` = `kofi-<lang>-<n>` (ej. `kofi-es-1`).
98
+ - El humano elige; se registra con `pasco refine kofi --choose <id>` → escribe
99
+ `content/active.yaml`; el paste posterior se marca con
100
+ `pasco status --mark <ledgerKey> kofi` (D18).
101
+
102
+ ## Verificación (checks)
103
+
104
+ - `pasco validate` exit 0 (schema + drift 0 + geo).
105
+ - Facts byte-idénticos: cruzá cada hecho del About contra el YAML.
106
+ - Plain text: cero markdown `[..](..)`, cero HTML.
107
+ - Links: 0 links inline en el About (van al Social-links feature); el link
108
+ canónico `ko-fi.com/<handle>` vive en `identity.links` (regla drift).
109
+ - Idioma: la bio del `--lang` solicitado existe (compile NO hace fallback por
110
+ fila — artefacto vacío significa gap visible, no silencio).
111
+ - URL viva: la página resuelve en browser (Cloudflare 403 para fetchers
112
+ planos — usar browser para la verificación live, SOTA-2026 §5).
113
+
114
+ ## GEO (consistencia = citabilidad)
115
+
116
+ - El About es legible por LLMs con fetcher browser (tab About, HTML renderizado
117
+ [WEB S12]; el HTML crudo sin JS quedó sin verificar [?]). Los hechos deben
118
+ coincidir byte a byte con CV/LinkedIn/GitHub (fechas, roles, papers).
119
+ - Sin directorio público de perfiles ni search documentado [OFICIAL S14] — la
120
+ citabilidad viene del hecho de que otros canales (X, Substack, README)
121
+ referencian la página de apoyo; manté los anclas semánticos del SSOT.
122
+ - Host único: `ko-fi.com` — `kofi.com` NO resuelve (NXDOMAIN) [WEB S17];
123
+ jamás emitir ni registrar URL con el host sin guion.
124
+ - **Rename-drift**: el username se puede cambiar y los handles viejos siguen
125
+ resolviendo ([OFICIAL S6], [WEB S12]) — después de renombrar, re-generá el
126
+ preview social ([OFICIAL S4]) y verificá que identity.links apunte al
127
+ handle vigente antes de cada re-paste.
@@ -0,0 +1,42 @@
1
+ # checks.yaml — criterios machine-readable para `pasco check kofi`
2
+ # (unión con content/checks.yaml del workspace; misma rule catalog que el schema).
3
+ #
4
+ # Fuente de los valores: research/SOTA-2026.md (todas las fuentes fechadas
5
+ # 2026-10-05). Ko-fi NO documenta límite para el About [?] — el max-chars es
6
+ # soft-cap curacional, no hard rule (SOTA-2026 §1).
7
+
8
+ - id: k-bio-soft
9
+ platform: kofi
10
+ rule: max-chars
11
+ value: 500
12
+ note: "Soft-cap curacional del About — Ko-fi no documenta límite [?]; el card trunca con 'Show more' (SOTA-2026 §1, S12)."
13
+
14
+ - id: k-facts-identity
15
+ platform: kofi
16
+ rule: fact-present
17
+ value: true
18
+ note: "Hechos del About byte-idénticos al SSOT (D4); el About es el cuerpo del perfil (SOTA-2026 §5)."
19
+
20
+ - id: k-links-identity
21
+ platform: kofi
22
+ rule: link-in-identity
23
+ value: true
24
+ note: "El URL canónico ko-fi.com/<handle> vive en identity.links; host único con guion — kofi.com NO resuelve (SOTA-2026 §3, S17)."
25
+
26
+ - id: k-geo-consistent
27
+ platform: kofi
28
+ rule: geo-consistent
29
+ value: true
30
+ note: "Hechos consistentes con CV/LinkedIn/GitHub = citabilidad; el About es legible por LLMs con fetcher browser (SOTA-2026 §5)."
31
+
32
+ - id: k-live
33
+ platform: kofi
34
+ rule: url-live
35
+ value: true
36
+ note: "Página resuelve en browser — Cloudflare 403 para fetchers planos; verificación live con browser (SOTA-2026 §5)."
37
+
38
+ - id: k-lang
39
+ platform: kofi
40
+ rule: lang-present
41
+ value: en
42
+ note: "EN requerido (D8/§11); compile no hace fallback por fila de bios — artefacto vacío = gap visible."
@@ -0,0 +1,47 @@
1
+ # Playbook — deploy Ko-fi (paste, D9)
2
+
3
+ Superficie: página de creador `ko-fi.com/<handle>` — **sin API de deploy**
4
+ (webhooks de pago only, SOTA-2026 §6/S18). El deploy es manual; el ledger lo
5
+ registra `pasco status --mark`.
6
+
7
+ ## Pre-paste
8
+
9
+ 1. `pasco validate` — exit 0 (schema + drift + geo).
10
+ 2. `pasco build kofi --lang <lang>` — escribe `profiles/kofi/README.md`; ese
11
+ archivo ES el texto a pegar (plano, 1 fila de bios — long > medium > short).
12
+ 3. Verificá el handle vigente: `identity.links` debe contener el URL canónico
13
+ `https://ko-fi.com/<handle>` (host con guion; `kofi.com` NO resuelve,
14
+ S17). **Rename-drift**: si el username cambió, los handles viejos siguen
15
+ resolviendo (S6/S12) y el preview social puede mostrar el nombre viejo
16
+ (S4) — regenerá el preview y actualizá el link ANTES de pegar.
17
+
18
+ ## Paste (dashboard)
19
+
20
+ Orden sugerido (SOTA-2026 §6):
21
+
22
+ 1. **Settings → Profile** (`settings?tab=profile`): display name correcto +
23
+ "Your social links": hasta 15 links, `https://` completo (S3). El About NO
24
+ lleva links inline.
25
+ 2. **`ko-fi.com/manage/mypage` → About**: pegá el contenido de
26
+ `profiles/kofi/README.md` tal cual (texto plano; el card trunca tras unas
27
+ líneas con "Show more" — lo primero es lo que se lee).
28
+ 3. **Estado** ("Set a status", junto al perfil): ≤ 40 chars (S1) — one-liner
29
+ visible, manual, no vive en el SSOT.
30
+ 4. **Settings → Page** (`settings?tab=page`): "Customize preview" (texto/imagen
31
+ del link-share) + Page focus. Preview ≠ About (S4).
32
+ 5. **Cover image**: 3:1, 1200×400 px, < 8 MB, JPEG/PNG (S5).
33
+
34
+ ## Post-paste (verificación + ledger)
35
+
36
+ 1. Verificá la página pública en **browser** (Cloudflare 403 para fetchers
37
+ planos, SOTA-2026 §5): About visible, sin markdown leaks, links de Social
38
+ links anclados.
39
+ 2. Marca el ledger: `pasco status --mark bios:kofi.long@en kofi`
40
+ (ledgerKey = la fila de bios exacta que se pegó).
41
+ 3. `pasco status kofi` — in-sync. `pasco diff` vacío para esa unidad.
42
+
43
+ ## No hacerlo a mano en el workspace
44
+
45
+ - El paste solo se registra vía `--mark`; editar `content/deployments.yaml`
46
+ a mano rompe el contrato D18 (solo `pasco` escribe el ledger).
47
+ - No pegues variantes no elegidas (solo la fila activa de bios es deployable).