@profile-as-code/cli 0.3.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.
- package/README.md +71 -20
- package/dist/index.js +2791 -289
- package/package.json +12 -7
- package/skills/README.md +62 -0
- package/skills/github-org/SKILL.md +92 -0
- package/skills/github-org/checks.yaml +40 -0
- package/skills/github-org/playbook.md +30 -0
- package/skills/github-org/research/SOTA-2026.md +39 -0
- package/skills/github-readme/SKILL.md +114 -0
- package/skills/github-readme/checks.yaml +32 -0
- package/skills/github-readme/playbook.md +36 -0
- package/skills/github-readme/research/SOTA-2026.md +105 -0
- package/skills/hotmart/SKILL.md +150 -0
- package/skills/hotmart/checks.yaml +43 -0
- package/skills/hotmart/playbook.md +53 -0
- package/skills/hotmart/research/SOTA-2026.md +142 -0
- package/skills/kofi/SKILL.md +127 -0
- package/skills/kofi/checks.yaml +42 -0
- package/skills/kofi/playbook.md +47 -0
- package/skills/kofi/research/SOTA-2026.md +160 -0
- package/skills/linkedin/post.md +50 -0
- package/skills/linkedin/posting.yaml +23 -0
- package/skills/x/post.md +46 -0
- package/skills/x/posting.yaml +24 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@profile-as-code/cli",
|
|
3
|
-
"version": "0.3.
|
|
4
|
-
"description": "pasco — the profile-as-code CLI: init, validate, build, diff, status + partial refine (task template), check (offline rules M6–M8; catalog ships M3/M4), skills:
|
|
3
|
+
"version": "0.3.5",
|
|
4
|
+
"description": "pasco — the profile-as-code CLI: init, validate, build, diff, status + partial refine (task template), check (offline rules M6–M8; catalog ships M3/M4), skills:export (copies the platform skills this package ships). Consumes @profile-as-code/core; never re-implements load/drift/geo/compile.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"bin": {
|
|
@@ -26,13 +26,15 @@
|
|
|
26
26
|
"json-schema"
|
|
27
27
|
],
|
|
28
28
|
"files": [
|
|
29
|
-
"dist"
|
|
29
|
+
"dist",
|
|
30
|
+
"skills"
|
|
30
31
|
],
|
|
31
32
|
"scripts": {
|
|
32
|
-
"build": "pnpm --filter \"@profile-as-code/cli^...\" build && tsup && node -e \"process.platform !== 'win32' && require('node:fs').chmodSync('dist/index.js', 0o755)\"",
|
|
33
|
+
"build": "pnpm --filter \"@profile-as-code/cli^...\" build && tsup && node scripts/bundle-skills.mjs && node -e \"process.platform !== 'win32' && require('node:fs').chmodSync('dist/index.js', 0o755)\"",
|
|
33
34
|
"verify:pack": "node scripts/verify-pack.mjs",
|
|
34
35
|
"guard:release": "node scripts/release-guard.mjs",
|
|
35
36
|
"prepublishOnly": "publint",
|
|
37
|
+
"prepack": "node scripts/bundle-skills.mjs",
|
|
36
38
|
"typecheck": "tsc -p tsconfig.test.json",
|
|
37
39
|
"test": "pnpm build && vitest run",
|
|
38
40
|
"test:watch": "vitest"
|
|
@@ -42,10 +44,13 @@
|
|
|
42
44
|
},
|
|
43
45
|
"dependencies": {
|
|
44
46
|
"yaml": "^2.9.1",
|
|
45
|
-
"zod": "^4.6.
|
|
47
|
+
"zod": "^4.6.7"
|
|
46
48
|
},
|
|
47
49
|
"devDependencies": {
|
|
50
|
+
"@profile-as-code/artifact": "workspace:*",
|
|
48
51
|
"@profile-as-code/core": "workspace:*",
|
|
52
|
+
"@profile-as-code/github": "workspace:*",
|
|
53
|
+
"@profile-as-code/paste": "workspace:*",
|
|
49
54
|
"@profile-as-code/renderers-buymeacoffee": "workspace:*",
|
|
50
55
|
"@profile-as-code/renderers-github-org": "workspace:*",
|
|
51
56
|
"@profile-as-code/renderers-github-readme": "workspace:*",
|
|
@@ -54,9 +59,9 @@
|
|
|
54
59
|
"@profile-as-code/renderers-kofi": "workspace:*",
|
|
55
60
|
"@profile-as-code/renderers-liberapay": "workspace:*",
|
|
56
61
|
"@profile-as-code/renderers-payhip": "workspace:*",
|
|
57
|
-
"@types/node": "^26.6.
|
|
62
|
+
"@types/node": "^26.6.5",
|
|
58
63
|
"tsup": "^8.5.1",
|
|
59
64
|
"typescript": "^7.0.2",
|
|
60
|
-
"vitest": "^5.0.
|
|
65
|
+
"vitest": "^5.0.5"
|
|
61
66
|
}
|
|
62
67
|
}
|
package/skills/README.md
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Skills por plataforma
|
|
2
|
+
|
|
3
|
+
Cada plataforma tiene UNA skill: el conocimiento operacional SOTA de esa red,
|
|
4
|
+
versionado y contribuible. Las skills son la capa de *juicio* que complementa
|
|
5
|
+
al renderer (capa determinista de código).
|
|
6
|
+
|
|
7
|
+
## Estructura de una skill
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
skills/<plataforma>/
|
|
11
|
+
├── SKILL.md # frontmatter (nombre, descripción, modelo sugerido) + flujo
|
|
12
|
+
├── research/ # investigación versionada, con fuentes fechadas
|
|
13
|
+
│ └── SOTA-<año>.md
|
|
14
|
+
├── playbook.md # pasos de deploy manual + verificación post-pega
|
|
15
|
+
└── checks.yaml # criterios machine-readable que ejecuta `pasco check`
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## División de responsabilidades
|
|
19
|
+
|
|
20
|
+
| Capa | Qué garantiza |
|
|
21
|
+
|---|---|
|
|
22
|
+
| **Renderer** (`packages/renderers/<plataforma>`) | Consistencia: el mismo hecho nunca se contradice entre redes. Determinista, snapshot-tested. |
|
|
23
|
+
| **Skill** (`skills/<plataforma>/`) | Juicio y actualidad: límites oficiales, ranking/SEO, ángulos por audiencia, trampas, checks. |
|
|
24
|
+
|
|
25
|
+
## Reglas
|
|
26
|
+
|
|
27
|
+
1. **Evidencia:** toda afirmación cuantitativa lleva fuente + fecha. Sin fuente → no entra.
|
|
28
|
+
2. **Distinción de fuentes:** `[OFICIAL]` docs de la plataforma · `[EXPERTO]` artículo de autor reconocido ·
|
|
29
|
+
`[BENCHMARK]` patrón observado en perfiles reales · `[?]` sin confirmar.
|
|
30
|
+
3. **Frontmatter con modelo sugerido:** las skills declaran qué nivel de modelo requieren
|
|
31
|
+
(mecánico = modelo pequeño; juicio = modelo grande) para el refinamiento vía `pasco refine`.
|
|
32
|
+
4. **GEO obligatorio por skill:** además de SEO, cada skill documenta cómo los LLM leen/citan
|
|
33
|
+
esa plataforma (p. ej. LinkedIn vía agentes, X vía citas, GitHub README como contexto de agente)
|
|
34
|
+
y qué checks de consistencia factual aplican.
|
|
35
|
+
5. **i18n por skill:** la política de idioma de cada plataforma (qué `lang` prioriza y por qué).
|
|
36
|
+
6. **Contribución:** PR de skills para plataformas que no cubrimos. Toda skill pasa por
|
|
37
|
+
sanitización + security scan + test de comportamiento antes de aceptarse.
|
|
38
|
+
7. **No optimizar engagement vacío:** la prioridad es credibilidad + conversión real
|
|
39
|
+
(reclutador, cliente), no métricas superficiales.
|
|
40
|
+
|
|
41
|
+
## Plataformas objetivo (orden de prioridad)
|
|
42
|
+
|
|
43
|
+
1. `github-readme` — la única superficie 100% automatizable (git/API)
|
|
44
|
+
2. `linkedin` — trayectoria profesional
|
|
45
|
+
3. `upwork` — servicio/cliente
|
|
46
|
+
4. `x` — visibilidad
|
|
47
|
+
5. `researchgate` — ciencia
|
|
48
|
+
6. `substack` — newsletter/audiencia propia (superficie de contenido + perfil)
|
|
49
|
+
|
|
50
|
+
## Brand flavor (M6, §17)
|
|
51
|
+
|
|
52
|
+
`github-org` — README del GitHub **org** para workspaces `flavor: brand`: voz de
|
|
53
|
+
marca (≠ voz personal), handle-matrix checks (`handle-claimed`/`handle-consistent`,
|
|
54
|
+
offline en `pasco check`), trademark/impersonación. Ver `skills/github-org/`.
|
|
55
|
+
|
|
56
|
+
## Post skills (MVP, #264)
|
|
57
|
+
|
|
58
|
+
The week-1 post experiment uses a **different shape** from the profile skills:
|
|
59
|
+
`skills/<platform>/post.md` (judgment) + `skills/<platform>/posting.yaml`
|
|
60
|
+
(machine-readable limits/settings). `pasco post` reads them; `pasco refine` keeps
|
|
61
|
+
reading `SKILL.md`. They cover two channels only (`linkedin`, `x`) and are not
|
|
62
|
+
projected to harnesses yet — see `docs/post-mvp.md`.
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: github-org-readme
|
|
3
|
+
description: >
|
|
4
|
+
Transforma los HECHOS del SSOT de un workspace brand (flavor: brand —
|
|
5
|
+
profile-data-topia/content/*.yaml) en el README del GitHub ORG con estrategia
|
|
6
|
+
comunicativa de marca — NO un CV ni un dump de surfaces. Patrón: editorial
|
|
7
|
+
press / high-epistemic (research/SOTA-2026.md). El agente ejecutante produce N
|
|
8
|
+
variantes en prosa; el humano elige; la elegida se registra como variante
|
|
9
|
+
activa (content/active.yaml). La voz de marca NO es la voz personal.
|
|
10
|
+
model: juicio (frontier) — la voz de marca y la estrategia editorial no son delegables
|
|
11
|
+
applies_to: github-org
|
|
12
|
+
projection: agent-agnostic (AionUi, OpenHands, Claude Code, Cursor, pi…)
|
|
13
|
+
version: 0.1.0
|
|
14
|
+
status: draft (M6)
|
|
15
|
+
sources: skills/github-org/research/SOTA-2026.md
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# GitHub Org README — skill de marca (flavor brand, §17)
|
|
19
|
+
|
|
20
|
+
## Misión
|
|
21
|
+
|
|
22
|
+
Convertir los HECHOS del workspace brand (SSOT) en la página de aterrizaje del
|
|
23
|
+
org de GitHub: quién es la marca, qué publica, dónde vive (handle matrix), y
|
|
24
|
+
POR QUÉ importa. El dump determinista ya lo produce el renderer
|
|
25
|
+
(`pasco build github-org`) — esta skill es la capa de **juicio y voz** (D4/D5).
|
|
26
|
+
|
|
27
|
+
## Regla de oro
|
|
28
|
+
|
|
29
|
+
> Los HECHOS son sagrados (byte-idénticos al SSOT); solo la VOZ varía. La voz de
|
|
30
|
+
> marca ≠ voz personal: no escribas como persona, escribí como la marca.
|
|
31
|
+
|
|
32
|
+
- Nombres, fechas, URLs, handles, estados: **idénticos** a `content/*.yaml`.
|
|
33
|
+
- URLs SOLO de `identity.links` + `socialHandles[].url` (regla drift / §17.1).
|
|
34
|
+
- **Impersonación/trademark:** si un dominio o handle homónimo pertenece a una
|
|
35
|
+
empresa viva NO relacionada (p. ej. `topia.com` es una empresa real no
|
|
36
|
+
relacionada con Topia Press), la marca SIEMPRE firma como su nombre completo
|
|
37
|
+
("Topia Press") y nunca usa el nombre a secas que podría confundirse.
|
|
38
|
+
|
|
39
|
+
## Fuente de datos (workspace brand)
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
content/flavor.yaml → flavor: brand (obligatorio para esta skill)
|
|
43
|
+
content/identity.yaml → name, orgName, mission, tagline, brandVoice, established, links
|
|
44
|
+
content/socialHandles.yaml → la handle matrix (status: claimed|pending) — SEED
|
|
45
|
+
content/newsletter.yaml → Substack/Ghost
|
|
46
|
+
content/podcast.yaml → Spotify/RSS
|
|
47
|
+
content/press.yaml → menciones de prensa (fechadas, resolubles)
|
|
48
|
+
content/audiences.yaml → perfiles de lector (no reclutador)
|
|
49
|
+
content/keywords.yaml → SEO + GEO
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Estrategia comunicativa (editorial press — SOTA-2026 §3)
|
|
53
|
+
|
|
54
|
+
1. **¿Quién lee?** Lectores de alta exigencia epistémica, suscriptores, prensa,
|
|
55
|
+
LLMs que citan (GEO).
|
|
56
|
+
2. **¿Qué quiero que hagan?** Suscribirse al newsletter, seguir la marca en sus
|
|
57
|
+
plataformas, citar los ensayos.
|
|
58
|
+
3. **¿Cuál es mi señal más fuerte?** La consistencia: mismo nombre, misma
|
|
59
|
+
misión, mismos handles en todas las superficies — la marca ES su coherencia
|
|
60
|
+
(handle-claimed / handle-consistent).
|
|
61
|
+
|
|
62
|
+
Liderá con #3: una marca dispersa (handles sin claim, URLs contradictorias) no
|
|
63
|
+
se cita, se ignora.
|
|
64
|
+
|
|
65
|
+
## Voice matrix (brandVoice → secciones)
|
|
66
|
+
|
|
67
|
+
| Contexto | Voz | Trampa a evitar |
|
|
68
|
+
|---|---|---|
|
|
69
|
+
| Header/misión | editorial, riguroso, esperanzado | doom-scrolling, hype |
|
|
70
|
+
| Newsletter | concreto, de alta señal | prometer "todo sobre X" |
|
|
71
|
+
| Press | factual, modesto | autobombo |
|
|
72
|
+
| Footers/CTAs | UN llamado claro | múltiples CTAs |
|
|
73
|
+
|
|
74
|
+
## Checklist de deploy (manual + git)
|
|
75
|
+
|
|
76
|
+
1. `pasco validate` — schema OK y 0 drift warnings en la handle matrix.
|
|
77
|
+
2. `pasco check` — handle-claimed / handle-consistent OK (offline) + `url-live` de
|
|
78
|
+
cada handle claimed (network, verificación manual).
|
|
79
|
+
3. `pasco build github-org --lang en` → `profiles/github-org/README.md`.
|
|
80
|
+
4. Copiar el README al repo del org (deploySpec: git; el humano mergea —
|
|
81
|
+
repo-governance).
|
|
82
|
+
5. Verificación post-deploy: cada badge/link del README resuelve; los handles
|
|
83
|
+
pending NO figuran como surfaces vivas.
|
|
84
|
+
|
|
85
|
+
## GEO
|
|
86
|
+
|
|
87
|
+
`schema.org/Organization` JSON-LD con `@id` = el link con `role: identity` (ausente si
|
|
88
|
+
ninguno lo declara) y `sameAs` = los links con `role: realization` + claimed handles
|
|
89
|
+
(v1.6/#103; antes de v1.6 era identity.links completo). El email de contacto
|
|
90
|
+
(`identity.email`, v1.5/#71) sale como propiedad `email`, nunca dentro de `sameAs`. Un LLM que triangule la marca debe encontrar el mismo nombre,
|
|
91
|
+
misión y set de handles en GitHub, X, Bluesky y el newsletter — esa consistencia
|
|
92
|
+
ES la citabilidad.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# checks.yaml — criterios machine-readable para `pasco check github-org`
|
|
2
|
+
# (unión con content/checks.yaml del workspace; misma rule catalog que el schema).
|
|
3
|
+
# v1.1/§17: handle-claimed y handle-consistent se EJECUTAN offline en pasco check
|
|
4
|
+
# (drift codes); url-live es la verificación de red (skill, no drift).
|
|
5
|
+
|
|
6
|
+
- id: org-handle-claimed
|
|
7
|
+
platform: github-org
|
|
8
|
+
rule: handle-claimed
|
|
9
|
+
value: true
|
|
10
|
+
note: "Todo handle claimed debe resolver a una URL (offline: drift/handle-claimed-not-linked; live: url-live)."
|
|
11
|
+
|
|
12
|
+
- id: org-handle-consistent
|
|
13
|
+
platform: github-org
|
|
14
|
+
rule: handle-consistent
|
|
15
|
+
value: true
|
|
16
|
+
note: "La handle matrix es el SSOT: una fila por plataforma, hosts correctos (offline: drift/duplicate-handle, drift/handle-host-mismatch)."
|
|
17
|
+
|
|
18
|
+
- id: org-mission-identity
|
|
19
|
+
platform: github-org
|
|
20
|
+
rule: fact-present
|
|
21
|
+
value: true
|
|
22
|
+
note: "name/mission/tagline del README byte-idénticos al SSOT (D4)."
|
|
23
|
+
|
|
24
|
+
- id: org-links-identity
|
|
25
|
+
platform: github-org
|
|
26
|
+
rule: link-in-identity
|
|
27
|
+
value: true
|
|
28
|
+
note: "Toda URL del README vive en identity.links o socialHandles[].url (regla drift, §17.1)."
|
|
29
|
+
|
|
30
|
+
- id: org-jsonld-org
|
|
31
|
+
platform: github-org
|
|
32
|
+
rule: geo-consistent
|
|
33
|
+
value: true
|
|
34
|
+
note: "JSON-LD schema.org/Organization: @id = el link con role: identity (ausente si no hay ninguno), sameAs = links con role: realization + claimed handles (GEO, v1.6/#103, §15.4)."
|
|
35
|
+
|
|
36
|
+
- id: org-cta-one
|
|
37
|
+
platform: github-org
|
|
38
|
+
rule: lang-present
|
|
39
|
+
value: en
|
|
40
|
+
note: "EN requerido (D8/§11); un CTA primario por variante (suscribirse al newsletter)."
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Playbook — deploy del GitHub Org README (flavor brand, deploySpec: git)
|
|
2
|
+
|
|
3
|
+
## Pre-requisitos
|
|
4
|
+
|
|
5
|
+
- Workspace brand (`pasco init --flavor brand`) con `content/` lleno y
|
|
6
|
+
`pasco validate` en verde.
|
|
7
|
+
- Org de GitHub creado (privado hasta pasar el checklist de public-readiness —
|
|
8
|
+
repo-governance).
|
|
9
|
+
|
|
10
|
+
## Pasos
|
|
11
|
+
|
|
12
|
+
1. **Handle matrix** — `pasco check` (offline):
|
|
13
|
+
- Cada fila `claimed` tiene `url` o match en `identity.links`.
|
|
14
|
+
- Sin `drift/duplicate-handle`, sin `drift/handle-host-mismatch`.
|
|
15
|
+
2. **Live check (manual, red):** abrí cada URL `claimed` — debe resolver al
|
|
16
|
+
perfil correcto (verificación `url-live` que el engine no automatiza).
|
|
17
|
+
3. **Build:** `pasco build github-org --lang en` →
|
|
18
|
+
`profiles/github-org/README.md`.
|
|
19
|
+
4. **Deploy:** copiá el README al repo `org/org` del GitHub org y commiteá en tu
|
|
20
|
+
branch + PR — el humano mergea (repo-governance §3).
|
|
21
|
+
5. **Verificación post-deploy:** cada badge y link del README resuelve; los
|
|
22
|
+
handles `pending` NO figuran como surfaces vivas; el JSON-LD `Organization`
|
|
23
|
+
está embebido (GEO §17.1).
|
|
24
|
+
|
|
25
|
+
## Nota de marca (impersonación)
|
|
26
|
+
|
|
27
|
+
Si un dominio/handle homónimo pertenece a una empresa viva NO relacionada
|
|
28
|
+
(p. ej. `topia.com`), la marca siempre firma con su nombre completo
|
|
29
|
+
("Topia Press") — nunca el nombre a secas. Checks: `org-mission-identity`,
|
|
30
|
+
`org-cta-one`.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# SOTA-2026 — GitHub org README / brand landing (brand flavor, M6)
|
|
2
|
+
|
|
3
|
+
Dated, evidence-tagged sources for the `github-org` skill. Claims without a
|
|
4
|
+
source + date do not enter (regla de evidencia).
|
|
5
|
+
|
|
6
|
+
## Sources
|
|
7
|
+
|
|
8
|
+
- **[OFICIAL] GitHub docs — "Creating a default community health file" / org
|
|
9
|
+
profiles** (2026, github.com/orgs/community). Org READMEs render on the org
|
|
10
|
+
landing page; they are the first page a visitor (human or LLM agent) sees.
|
|
11
|
+
- **[OFICIAL] schema.org — Organization type** (2026, schema.org/Organization):
|
|
12
|
+
`sameAs`, `logo`, `foundingDate`, `slogan`, `description` are the machine-
|
|
13
|
+
readable fields an LLM triangulates across surfaces.
|
|
14
|
+
- **[BENCHMARK] Handle-consistency pattern** (observado 2026-08-18 en el sweep
|
|
15
|
+
de disponibilidad de handles de Topia Press, operador): la marca vive en 10+
|
|
16
|
+
superficies (X, Bluesky, GitHub org, Substack, Instagram, TikTok, YouTube,
|
|
17
|
+
Reddit, Mastodon, SoundCloud + dominio canónico); el drift manual de esa
|
|
18
|
+
matrix es el problema que el engine resuelve (issue #25).
|
|
19
|
+
- **[EXPERTO] Brand voice vs personal voice** (2026, práctica de agencias de
|
|
20
|
+
marca): una org no "habla como persona" — misión/tagline estables, un CTA
|
|
21
|
+
primario, consistencia sobre autobombo. La voz de marca es la coherencia.
|
|
22
|
+
|
|
23
|
+
## Implicaciones para el renderer y la skill
|
|
24
|
+
|
|
25
|
+
1. El README del org es la **primera superficie GEO** de la marca: el JSON-LD
|
|
26
|
+
`Organization` con `sameAs` = links + claimed handles es lo que un LLM cita.
|
|
27
|
+
2. La **handle matrix es el SSOT** de superficies (más fiable que adivinar de
|
|
28
|
+
`identity.links`): filas `claimed` son surfaces vivas; `pending` no se
|
|
29
|
+
despliegan.
|
|
30
|
+
3. **Consistencia = citabilidad** (SPEC §8): mismo nombre, misma misión, mismos
|
|
31
|
+
handles en todas las superficies.
|
|
32
|
+
4. **Impersonación:** homónimos vivos no relacionados (p. ej. `topia.com`) →
|
|
33
|
+
firmar siempre con el nombre completo de la marca.
|
|
34
|
+
|
|
35
|
+
## Open questions (skill-level)
|
|
36
|
+
|
|
37
|
+
- ¿El org README debe listar repos públicos del org (proyectos de la marca) en
|
|
38
|
+
M6? El renderer v1 no lo hace (los repos del org son surfaces secundarias; el
|
|
39
|
+
newsletter/podcast/prensa son las primarias).
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: github-readme-profile
|
|
3
|
+
description: >
|
|
4
|
+
Transforma los hechos del SSOT (profile-data/content/*.yaml) en un GitHub profile
|
|
5
|
+
README con estrategia comunicativa y estética deliberada — NO un dump de CV.
|
|
6
|
+
Patrón: OSS Maintainer / minimalista senior (research/SOTA-2026.md). El agente
|
|
7
|
+
ejecutante produce N variantes en prosa; el humano elige; la elegida se registra
|
|
8
|
+
como variante activa (content/active.yaml).
|
|
9
|
+
model: juicio (frontier) — la estrategia narrativa no es delegable a modelos pequeños
|
|
10
|
+
applies_to: github-readme
|
|
11
|
+
projection: agent-agnostic (AionUi, OpenHands, Claude Code, Cursor, pi…)
|
|
12
|
+
version: 0.1.0
|
|
13
|
+
status: draft (M3)
|
|
14
|
+
sources: skills/github-readme/research/SOTA-2026.md
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# GitHub Profile README — skill de comunicación
|
|
18
|
+
|
|
19
|
+
## Misión
|
|
20
|
+
|
|
21
|
+
Convertir los HECHOS del workspace (SSOT) en una página de perfil que se lea en
|
|
22
|
+
**30 segundos** con una impresión fuerte: quién sos, qué estás construyendo AHORA,
|
|
23
|
+
por qué importa, y UNA acción posible. El dump exhaustivo ya lo produce el renderer
|
|
24
|
+
determinista (`pasco build`) — esta skill es la capa de **juicio y narrativa** (D4/D5).
|
|
25
|
+
|
|
26
|
+
## Regla de oro
|
|
27
|
+
|
|
28
|
+
> Los HECHOS son sagrados (byte-idénticos al SSOT); solo la HISTORIA varía.
|
|
29
|
+
|
|
30
|
+
- Nombres, fechas, DOIs, números, URLs: **idénticos** a `content/*.yaml`. Prohibido
|
|
31
|
+
inventar, redondear o reordenar hechos.
|
|
32
|
+
- URLs SOLO de `identity.links` (regla drift). No inventes links.
|
|
33
|
+
- Claims cuantitativos SOLO de `projects[].evidence` o `keywords.geo.claims`.
|
|
34
|
+
|
|
35
|
+
## Fuente de datos
|
|
36
|
+
|
|
37
|
+
Lee el workspace (ruta del `.pascorc` o `--workspace`):
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
content/identity.yaml → nombre, ubicación, links canónicos (TU fuente de URLs)
|
|
41
|
+
content/positioning.yaml → statement + ángulos por audiencia + anclas GEO
|
|
42
|
+
content/projects.yaml → qué construís (status + evidence verificable)
|
|
43
|
+
content/publications.yaml → papers/preprints con DOI
|
|
44
|
+
content/skills.yaml → stack con pesos por plataforma
|
|
45
|
+
content/bios.yaml → textos base por plataforma (punto de partida)
|
|
46
|
+
content/keywords.yaml → SEO + GEO (associations/claims)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Estrategia comunicativa (framework de 3 preguntas — SOTA-2026 §3)
|
|
50
|
+
|
|
51
|
+
1. **¿Quién lee?** Contribuidores OSS, sponsors, reclutadores técnicos, pares.
|
|
52
|
+
2. **¿Qué quiero que hagan?** Explorar los proyectos, sponsor (Patreon/GitHub Sponsors),
|
|
53
|
+
contactar para colaborar/contratar.
|
|
54
|
+
3. **¿Cuál es mi señal más fuerte?** Para un perfil open-source/soberanía: el trabajo
|
|
55
|
+
público con evidencia (upstream PRs merged, papers con DOI, deployments probados).
|
|
56
|
+
|
|
57
|
+
Liderá con #3 filtrado por #1: **stewardship** (proyectos vivos con proof), no branding.
|
|
58
|
+
|
|
59
|
+
## Estructura del README (prosa, no dump)
|
|
60
|
+
|
|
61
|
+
1. **Header**: nombre + one-liner que responde "qué construís" (de `statement`/headlines,
|
|
62
|
+
reescrito en prosa si mejora) + badges canónicas (identity.links) centradas.
|
|
63
|
+
2. **Hook** (2–3 líneas): quién sos y por qué lo que hacés importa — conectá física +
|
|
64
|
+
sistemas complejos + IA soberana como UNA historia, no como lista. Weave de las
|
|
65
|
+
anclas GEO (`positioning.geo.semanticAssociations`) de forma natural, sin stuffing.
|
|
66
|
+
3. **Qué estoy construyendo AHORA** (2–3 proyectos con narrativa): nombre, una frase de
|
|
67
|
+
valor (de `description`), UNA evidencia verificable (de `evidence[]`). Prosa corta,
|
|
68
|
+
no bullets de 4 items. Prioridad por `skills[].platformWeights[github-readme]`.
|
|
69
|
+
4. **Evidencia de stewardship** (una sección corta): upstream PRs (merged/open) y
|
|
70
|
+
papers con DOI — woven como "every merged PR is infrastructure that belongs to
|
|
71
|
+
everyone". Tabla compacta si son varios.
|
|
72
|
+
5. **Stack como señal**: 4–6 tecnologías reales de `skills` (los keywords de mayor peso),
|
|
73
|
+
no todos los que tocaste. Badges shields.io máximo ~8.
|
|
74
|
+
6. **UN CTA**: Patreon (soporte al trabajo) + UN link más (CV o contacto). No cinco.
|
|
75
|
+
7. **Footer**: firma visual (one-liner o ASCII art sutil, coherente con la identidad) +
|
|
76
|
+
`<!-- generated by profile-as-code pasco refine github-readme · variant <id> -->`.
|
|
77
|
+
|
|
78
|
+
## Estética (SOTA-2026 §6)
|
|
79
|
+
|
|
80
|
+
- **Dark-first**: assets y badges que funcionen en dark mode (GitHub sigue el tema del
|
|
81
|
+
sistema). Nada de fondos claros forzados.
|
|
82
|
+
- **Restraint**: máximo un widget de stats (o ninguno si los repos hablan solos);
|
|
83
|
+
cero typing-animations, cero visitor counters, cero snake games.
|
|
84
|
+
- **Jerarquía visual**: headers claros, whitespace, una sola columna. `<details>`
|
|
85
|
+
accordions para material secundario si hace falta.
|
|
86
|
+
- **Centrado HTML div** para el header/badges en pantallas anchas.
|
|
87
|
+
- Tipografía: sin emojis decorativos; símbolos funcionales (✓ mergeado, ↗ link) como
|
|
88
|
+
máximo.
|
|
89
|
+
|
|
90
|
+
## Variantes (flujo refine)
|
|
91
|
+
|
|
92
|
+
- Producí **N variantes** (`--variants N`, default 3) con ángulos distintos:
|
|
93
|
+
1. **Stewardship** (por defecto): lidera con open source + evidencia.
|
|
94
|
+
2. **Soberanía**: lidera con la tesis (IA soberana, economía agéntica), proyectos como prueba.
|
|
95
|
+
3. **Investigador**: lidera con publicaciones/DOI, proyectos como aplicación.
|
|
96
|
+
- Cada variante: `variantId` = `gh-<lang>-<n>` (ej. `gh-en-1`).
|
|
97
|
+
- El humano elige; se registra con `pasco refine github-readme --choose <id>` →
|
|
98
|
+
escribe `content/active.yaml`.
|
|
99
|
+
|
|
100
|
+
## Verificación (checks)
|
|
101
|
+
|
|
102
|
+
- `pasco validate` exit 0 (schema + drift 0 + geo).
|
|
103
|
+
- Facts byte-idénticos: cruzá cada hecho del README contra el YAML.
|
|
104
|
+
- Links ⊆ `identity.links` (más el hecho de contacto: fila `- [Email](mailto:…)` derivada
|
|
105
|
+
de `identity.email`, v1.5/#71 — primero en `## Links`, output-only, nunca en `sameAs`).
|
|
106
|
+
- Length: el README se lee en 30s (SOTA-2026 §1) — si hay más de ~40 líneas, recortá.
|
|
107
|
+
- CTA: exactamente una acción primaria.
|
|
108
|
+
|
|
109
|
+
## GEO (consistencia = citabilidad)
|
|
110
|
+
|
|
111
|
+
- Los hechos del README deben coincidir byte a byte con el CV y LinkedIn (fechas,
|
|
112
|
+
roles, papers) — un LLM que triangula y encuentra contradicción te descarta.
|
|
113
|
+
- Los anchors semánticos se refuerzan naturalmente en la prosa (no keyword stuffing:
|
|
114
|
+
los LLM lo descuentan, SPEC §8 anti-patterns).
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# checks.yaml — criterios machine-readable para `pasco check github-readme`
|
|
2
|
+
# (unión con content/checks.yaml del workspace; misma rule catalog que el schema).
|
|
3
|
+
|
|
4
|
+
- id: gh-bio-max
|
|
5
|
+
platform: github-readme
|
|
6
|
+
rule: max-chars
|
|
7
|
+
value: 280
|
|
8
|
+
note: "Bio corta (one-liner) — el README se lee en ~30s (SOTA-2026 §1)."
|
|
9
|
+
|
|
10
|
+
- id: gh-facts-identity
|
|
11
|
+
platform: github-readme
|
|
12
|
+
rule: fact-present
|
|
13
|
+
value: true
|
|
14
|
+
note: "Los hechos del README deben estar byte-idénticos al SSOT (D4)."
|
|
15
|
+
|
|
16
|
+
- id: gh-links-identity
|
|
17
|
+
platform: github-readme
|
|
18
|
+
rule: link-in-identity
|
|
19
|
+
value: true
|
|
20
|
+
note: "Toda URL del README vive en identity.links (regla drift)."
|
|
21
|
+
|
|
22
|
+
- id: gh-geo-consistent
|
|
23
|
+
platform: github-readme
|
|
24
|
+
rule: geo-consistent
|
|
25
|
+
value: true
|
|
26
|
+
note: "Hechos consistentes con las otras superficies (CV, LinkedIn) = citabilidad."
|
|
27
|
+
|
|
28
|
+
- id: gh-cta-one
|
|
29
|
+
platform: github-readme
|
|
30
|
+
rule: lang-present
|
|
31
|
+
value: en
|
|
32
|
+
note: "EN requerido (D8/§11); un CTA primario por variante."
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# GitHub Profile README — deploy playbook
|
|
2
|
+
|
|
3
|
+
Deploy = git (D9): el README generado se commitea en el repo-perfil
|
|
4
|
+
(`<user>/<user>`, p.ej. `ChristianLuciani/ChristianLuciani`) y GitHub lo muestra.
|
|
5
|
+
Sin pegar a mano, sin API.
|
|
6
|
+
|
|
7
|
+
## Flujo
|
|
8
|
+
|
|
9
|
+
1. **Refine**: `pasco refine github-readme --variants 3` → el agente (esta skill)
|
|
10
|
+
produce 3 variantes en prosa. Elegí una:
|
|
11
|
+
`pasco refine github-readme --choose gh-en-2`.
|
|
12
|
+
2. **Build**: `pasco build github-readme` → si hay una variante activa con cuerpo,
|
|
13
|
+
escribe ese README completo VERBATIM en `profiles/github-readme/README.md`;
|
|
14
|
+
sin variante, regenera el snapshot determinista del SSOT (control de verdad).
|
|
15
|
+
3. **Deploy**: copiá el artefacto al repo-perfil y commit:
|
|
16
|
+
```sh
|
|
17
|
+
cp profiles/github-readme/README.md ../<usuario>/README.md
|
|
18
|
+
cd ../<usuario> && git commit -am "docs: profile README (variante activa, desde profile-data)"
|
|
19
|
+
```
|
|
20
|
+
4. **Verificar en GitHub**: perfil → se ve el README en dark/light, links clicables,
|
|
21
|
+
facts consistentes con el CV.
|
|
22
|
+
|
|
23
|
+
## Verificación post-deploy (CHECKLIST)
|
|
24
|
+
|
|
25
|
+
- [ ] README visible en el perfil (repo público con el nombre del usuario)
|
|
26
|
+
- [ ] Dark mode OK (badges y assets legibles)
|
|
27
|
+
- [ ] Todos los links → identity.links (clicables, sin 404)
|
|
28
|
+
- [ ] Facts byte-idénticos al CV (fechas, roles, papers, DOIs)
|
|
29
|
+
- [ ] UN CTA primario (Patreon + un link más)
|
|
30
|
+
- [ ] Se lee en ~30 segundos
|
|
31
|
+
- [ ] `pasco validate` exit 0 con la variante activa registrada
|
|
32
|
+
|
|
33
|
+
## Rollback
|
|
34
|
+
|
|
35
|
+
Git: `git revert` del último commit del repo-perfil. El SSOT nunca se ve afectado
|
|
36
|
+
(el deploy es un commit normal).
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# SOTA 2026 — GitHub Profile README
|
|
2
|
+
|
|
3
|
+
> Research fechada para la skill `github-readme` (SPEC §16, M3). Regla de evidencia:
|
|
4
|
+
> toda afirmación cuantitativa lleva fuente + fecha; `[OFICIAL]` docs de la plataforma,
|
|
5
|
+
> `[EXPERTO]` autor reconocido, `[BENCHMARK]` patrón observado en perfiles reales, `[?]` sin confirmar.
|
|
6
|
+
|
|
7
|
+
## 1. El problema central: señal, no ruido
|
|
8
|
+
|
|
9
|
+
El error N°1 es tratar el README como un **resumen de CV**: listas largas de tecnologías,
|
|
10
|
+
paredes de badges, GIFs animados. Los reclutadores piden "signal, not noise"
|
|
11
|
+
[EXPERTO — Codeboards.io, "GitHub Profile README Guide 2026", 2026].
|
|
12
|
+
|
|
13
|
+
- Un visitante decide en **~6 segundos** si explora más [EXPERTO — Igor Braz, dev.to,
|
|
14
|
+
"Top 10 Hacks... 2026", 2026-08-06].
|
|
15
|
+
- Reclutadores técnicos pasan **30–90 segundos** en un perfil de GitHub; la meta es
|
|
16
|
+
**comprensión en 30 segundos, no completitud** [EXPERTO — Quillly/devbio.me,
|
|
17
|
+
"GitHub Profile README: What to Include in 2026", updated 2026-06].
|
|
18
|
+
- El 82% de las contribuciones ocurren en repos privados [OFICIAL — GitHub Octoverse 2025]
|
|
19
|
+
→ el perfil público muestra <20% del output real; el README debe **dirigir a la mejor
|
|
20
|
+
evidencia pública**, no intentar listar todo.
|
|
21
|
+
|
|
22
|
+
## 2. Los 8 elementos que funcionan (2026)
|
|
23
|
+
|
|
24
|
+
[EXPERTO — Quillly/devbio.me, 2026-06]
|
|
25
|
+
|
|
26
|
+
1. **Bio de una línea** que responde "qué construís", no el cargo ("passionate developer"
|
|
27
|
+
no funciona).
|
|
28
|
+
2. **Stack como señal, no como lista**: 3–5 tecnologías en las que sos genuinamente
|
|
29
|
+
experto. TS es #1 en GitHub desde ago 2025 (+66.6% YoY, Octoverse 2025) — decirlo
|
|
30
|
+
explícito si aplica.
|
|
31
|
+
3. **Un widget de stats** (dark-themed, que matchee el perfil). Ojo: los contadores de
|
|
32
|
+
contribuciones se están inflando por herramientas de IA (1M+ PRs generados por IA
|
|
33
|
+
entre may–sep 2025 [OFICIAL — Octoverse 2025]) → volumen es señal más débil.
|
|
34
|
+
4. **Heatmap de contribuciones** (consistencia > estallido).
|
|
35
|
+
5. **Repos pineados con contexto**: una frase de qué hace, no solo el nombre.
|
|
36
|
+
6. **Qué estás construyendo AHORA** (momentum — da razón concreta para contactar).
|
|
37
|
+
7. **UN link** deliberado (el que cuente la historia completa más rápido).
|
|
38
|
+
8. **UN número honesto** (stars, usuarios, deployments) — más credibilidad que prosa.
|
|
39
|
+
|
|
40
|
+
### Qué NO incluir
|
|
41
|
+
|
|
42
|
+
- Texto animado de typing ("I'm a developer who loves to code…") — el equivalente de un
|
|
43
|
+
spinner; todo generador lo produce [EXPERTO — Quillly, 2026-06].
|
|
44
|
+
- Contadores de visitas (se inflan, no dicen nada).
|
|
45
|
+
- "Currently learning X, Y, Z" (señal de que no estás haciendo bien ninguno).
|
|
46
|
+
- Párrafos largos de bio (nadie los lee).
|
|
47
|
+
- Skills en prosa ("team player") — cero señal.
|
|
48
|
+
|
|
49
|
+
## 3. El framework de las 3 preguntas (antes de escribir)
|
|
50
|
+
|
|
51
|
+
[EXPERTO — Quillly, "10 Templates (2026)", 2026-06]
|
|
52
|
+
|
|
53
|
+
1. ¿Quién lee esto? (reclutador, contribuidor OSS, cliente, co-founder)
|
|
54
|
+
2. ¿Qué quiero que hagan? (contratar, abrir un PR, bookear una llamada, sponsor)
|
|
55
|
+
3. ¿Cuál es mi señal más fuerte? (años, repos con stars, revenue, papers)
|
|
56
|
+
|
|
57
|
+
El README lidera con la respuesta a #3, filtrada por #1. No se puede hablar a 180M de
|
|
58
|
+
desarrolladores a la vez — **un patrón, una audiencia**.
|
|
59
|
+
|
|
60
|
+
## 4. Patrón recomendado: The OSS Maintainer (stewardship)
|
|
61
|
+
|
|
62
|
+
Para un perfil alineado a **open source + soberanía tecnológica**, el patrón OSS
|
|
63
|
+
Maintainer es el correcto [EXPERTO — Quillly, Pattern 2, 2026-06]:
|
|
64
|
+
|
|
65
|
+
- Señal de **stewardship**, no branding personal: contribuidores potenciales revisan el
|
|
66
|
+
perfil ANTES del código.
|
|
67
|
+
- Elementos: proyectos activos con descripción de una frase + evidencia; widget de stats
|
|
68
|
+
o heatmap; **CTA de sponsorship** (GitHub Sponsors / Patreon / Polar); links de
|
|
69
|
+
comunidad.
|
|
70
|
+
- "One founder documented how consistent public proof of project activity was the
|
|
71
|
+
turning point from zero to five-figure MRR — the README is the most visible piece of
|
|
72
|
+
that proof" [EXPERTO — Indie Hackers, citado en Quillly, 2026-06].
|
|
73
|
+
|
|
74
|
+
Variante "minimalista senior" [EXPERTO — Quillly, Pattern 5]: tres cosas claras > veinte
|
|
75
|
+
vagas; cada palabra gana su lugar; funciona cuando los repos pineados son fuertes.
|
|
76
|
+
|
|
77
|
+
## 5. GEO — cómo leen los LLM el perfil de GitHub
|
|
78
|
+
|
|
79
|
+
- El README del perfil es **contexto de agente**: un LLM que triangula una identidad
|
|
80
|
+
cruza GitHub ↔ LinkedIn ↔ web. Hechos inconsistentes = auto-descarte [INF — SPEC §8].
|
|
81
|
+
- La consistencia factual entre superficies ES citabilidad: fechas/roles/papers idénticos.
|
|
82
|
+
- Structured data: el JSON-LD `Person` (sameAs = links canónicos) ayuda a la resolución
|
|
83
|
+
[INF — schema/README.md, geoCheck structured-data readiness].
|
|
84
|
+
|
|
85
|
+
## 6. Estética (2026, lo que funciona)
|
|
86
|
+
|
|
87
|
+
- **Dark-first**: el widget de stats y los assets deben matchear dark mode
|
|
88
|
+
[EXPERTO — dev.to Igor Braz, hack #9: SVG con media queries de prefers-color-scheme].
|
|
89
|
+
- **Centrado HTML div** para header/badges en pantallas anchas [EXPERTO — dev.to, hack #10].
|
|
90
|
+
- **Accordions `<details>`** para material secundario (setup, certificaciones) — mantiene
|
|
91
|
+
limpio el primer scroll [EXPERTO — dev.to, hack #6].
|
|
92
|
+
- **Restraint**: un solo widget de stats; paredes de badges = señal de optimización en
|
|
93
|
+
vez de construcción [EXPERTO — Quillly, 2026-06].
|
|
94
|
+
- **ASCII art / one-liner** como firma visual funciona si es parte de la identidad
|
|
95
|
+
(perfil senior), no un decorado [BENCHMARK — patrón observado en perfiles técnicos].
|
|
96
|
+
|
|
97
|
+
## 7. Fuentes
|
|
98
|
+
|
|
99
|
+
| Fuente | Tipo | Fecha |
|
|
100
|
+
|---|---|---|
|
|
101
|
+
| GitHub Octoverse 2025 (82% privado, 1M+ PRs IA, TS #1, 36.2M nuevos) | [OFICIAL] | 2025 |
|
|
102
|
+
| Quillly/devbio.me — "GitHub Profile README: What to Include in 2026" | [EXPERTO] | 2026-06 |
|
|
103
|
+
| Quillly/devbio.me — "10 Patterns (2026)" (framework 3 preguntas, OSS Maintainer) | [EXPERTO] | 2026-06 |
|
|
104
|
+
| Codeboards.io — "Complete Guide 2026" (signal not noise) | [EXPERTO] | 2026 |
|
|
105
|
+
| Igor Braz — dev.to "Top 10 Hacks 2026" (6s, dark-mode, accordions) | [EXPERTO] | 2026-08-06 |
|