Brand onboarding
Skill popiliadam/platinum-seo-engine/skills/meta/brand-onboarding
Use when: kullanıcı "yeni proje", "brand onboarding", "proje bootstrap", "wizard çalıştır", "yeni site ekle", "project-config oluştur" der ya da /pseo-brand-onboarding çağırır; brand_identity 20 + content_settings 14 + profile enum 5-value Süleyman input'u alarak project-config.schema 1.5 conformant staging output üretir. Also use when: workspace henüz yok (Phase 14 öncesi staging-only mode); domain DNS doğrulanması gerekiyor; profile heuristic suggest fallback istendi; init-project çalıştırılmadan önce config wizardı isteniyor. Do not use when: mevcut proje config update için (separate edit-config skill — gelecek phase); workspace var ve direkt project.config.json yazılacak (Phase 14+ behavior; init-project devreye giriyor); başka projenin config'i kopyalanacak (template-clone — gelecek phase).From its SKILL.md
npx -y skills add popiliadam/platinum-seo-engine --skill brand-onboardingAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
17.1 KB, as published. Nobody here has run it
brand-onboarding — meta skill (Phase 12 Wave 1, W-G2)
10-step interactive wizard that captures brand identity + content
settings + profile hint from Süleyman, validates against
schemas/project-config.schema.json v1.5, and emits a
staging-only config artifact under outputs/onboarding/. The
wizard core (Steps 1-10) is non-destructive: it NEVER writes the
canonical projects/{slug}/project.config.json — that full-config
write is deferred to Phase 14 (workspace bring-up). The ONE sanctioned
exception is Stage C of the Bank Seed Pipeline below: once a
workspace exists, Stage C appends approved bank entries into the
existing projects/{slug}/project.config.json (Step 6 + DURUR #5
carve-out). Pre-Phase-14 wizard-core invocations remain STAGING-ONLY
(DURUR #5 surfaces an AMBER warning but does NOT block the wizard).
Süleyman'ın manuel
onayı (approval_received=true) zorunlu (DURUR #1) — onay yoksa
events.jsonl'a yazma yapılmaz, hiçbir staging dosyası kalıcı
kabul edilmez.
Foundational Principles enforcement (3-layer)
- Truth-verifiable (Principle 1, R-27) — Süleyman'ın cevapları
events.jsonlpayload'una (notesfield,event_kind=workflowdiscipline) birebir aktarılır. Skill kendi kafasından alan tahmin etmez; eksik alanı AMBER ile geri sorar (DURUR #3). - Profile-aware (Principle 2; profile-aware enforcement) —
profile_hint5-value enum'una (e-commerce | ymyl | local-service | b2b-saas | portfolio) type-safe kilitlenir. 6. değer reddedilir (DURUR #4).profile_hintboşsa domain heuristic suggest (TLD pattern, kelime regex) Süleyman'a sunulur — son kararı Süleyman verir (autonomy boundary). - AI suistimal yasağı — Skill brand_identity 20 + content_settings 14 alanını ASLA otomatik doldurmaz. Her alan Süleyman input prompt'undan gelir; Süleyman boş bıraktıysa default eklenmez, prompt yeniden iterate edilir (DURUR #3) ve seçim AMBER ile netleştirilir.
Inputs (frontmatter contract)
| Name | Type | Required | Notes |
|---|---|---|---|
project_slug | string | yes | kebab-case (^[a-z][a-z0-9-]*$) + reserved word + collision check. |
domain | string | yes | URI format + socket.gethostbyname DNS sanity. AMBER fallback (#6). |
profile_hint | string | no | 5-value enum. Boşsa heuristic suggest. 6. değer REJECT (#4). |
Outputs (artifacts produced)
_state/events.jsonl— workflow lifecycle event (event_kind=workflow, workflow_action=done, workflow_run_id={generated}). Yazılır YALNIZCA Süleyman onayı geldikten sonra (DURUR #1).outputs/onboarding/{slug}-staging-config.json— project-config.schema.json v1.5 conformant staging artifact; validation amaçlı,projects/{slug}/project.config.jsonDEĞİLDİR (DURUR #5 STAGING-ONLY mode).
10-Step Body Protocol
Step 1 — Validate project_slug
Regex ^[a-z][a-z0-9-]*$ (project-config.schema.project_id pattern).
Reserved word check: admin, system, root, api, www,
config, static, assets, public, private, internal. Bu
slug'lar workspace bootstrap pipe'ında çakışma yaratır → REJECT.
Mevcut projects/{slug}/ dizini varsa DURUR #2.
Step 2 — Validate domain
URI format kontrolü (urllib.parse.urlparse scheme + netloc) +
socket.gethostbyname(host) DNS sanity (Python stdlib, harici
bağımlılık yok). DNS resolve fail olursa DURUR #6 — AMBER prompt
("Bu domain DNS'te bulunamadı. Manuel onay verir misin? [y/N]").
Süleyman onaylarsa devam, aksi halde ABORT.
Step 3 — Suggest profile
profile_hint set ise direkt geç. Değilse heuristic:
| Heuristic | Suggest |
|---|---|
Domain TLD .shop, .store, alt-domain mağaza, shop regex | e-commerce |
Pattern klinik|hastane|saglik|hukuk|finans | ymyl |
Pattern tamir|servis|nakliyat|temizlik + .com.tr | local-service |
Pattern app|saas|platform|api + .io|.dev | b2b-saas |
Pattern portfolyo|portfolio|kisisel | portfolio |
Heuristic önerisini Süleyman'a göster, "Bu mu? [y/N + alternatif seç]" prompt. Son kararı Süleyman verir.
Step 4 — Brand identity 20-field interactive prompt
Her alan ayrı prompt; default YOK (AI suistimal yasağı). Skip
edilen alan AMBER + iterate (DURUR #3). 20 alan sırası (v1.3
ADR-030 ile 18 → 20: pronoun_preference + formality canonical
eklendi; eski hitap + tone 1-yıl deprecated alias):
logo_url— URIprimary_color—^#[0-9a-fA-F]{6}$secondary_color—^#[0-9a-fA-F]{6}$accent_color—^#[0-9a-fA-F]{6}$font_family_heading— stringfont_family_body— stringheader_template_id— enum [minimal,classic,ecom]footer_template_id— enum [minimal,full]source_url_for_sampling— URItone— enum [semi-pro,conversational,formal,casual] — DEPRECATED v1.3 (useformality)formality— enum [semi-pro,conversational,formal,casual] — v1.3 canonicalhitap— enum [sen,siz] — DEPRECATED v1.3 (usepronoun_preference)pronoun_preference— enum [sen,siz] — v1.3 canonicalanglicism_tolerance— enum [low,medium,high]tone_phrases_blocklist— array<string>font_heading— string (alias of #5)font_body— string (alias of #6)default_hero_url— URIsame_as_urls— array<URI>image_style— enum [clean-illustration,product-photo,diagram-screenshot,location-photo,esnek]
Step 5 — Content settings 14-field interactive prompt
Aynı disiplin (default yok, skip = AMBER iterate). 14 alan:
toc_strategy— enum [none,static,sticky,auto-generate]related_posts_strategy— enum [none,cluster,tag-based,manual]author_strategy— enum [none,byline-required,byline-optional,person-schema-only]css_strategy— enum [inline,external-tier,hybrid]indexnow_enabled— booleanai_training_optin— booleanvideo_integration— enum [none,youtube,vimeo,self-hosted]internal_data_sharing— booleanexternal_uniqueness_check— booleanoriginal_research_database— array<object>experience_database— array<object>video_database— array<object>disclaimer_templates— object<string,string>image_model— string (default-aware:nano-banana)
Step 6 — Wizard core: projects/{slug}/project.config.json YAZILMAZ
Phase 14 öncesi workspace yok ya da skill scope dışında. Bu adım
explicit no-op: wizard core (Steps 1-10) projects/{slug}/project.config.json
dosyasını ASLA oluşturmaz / full-config yazmaz — staging output (Step 7)
otoritedir. STAGING-ONLY (DURUR #5).
Stage C carve-out: Bu mutlak SADECE wizard core (Steps 1-10) içindir. Aşağıdaki Bank Seed Pipeline'ın Stage C'si, bir workspace ZATEN varsa mevcut
projects/{slug}/project.config.json'a onaylı bank entry'leri append eder (sanctioned bank-write —scripts/meta/brand_onboarding_write. write_bank_entries, R-44 enforced). Wizard core full-config yazmaz; Stage C yalnızcacontent_settingsbank array'lerine ekleme yapar, başka alana dokunmaz.
Step 7 — Emit staging output package
outputs/onboarding/{slug}-staging-config.json yazılır. İçerik
schemas/project-config.schema.json v1.5 ile (Draft7) validate
edilir; başarısızsa DURUR #3 (eksik alan iterate). Schema PASS
olunca artifact diske inilir. Bu staging output; init-project
Phase 14'te bunu input olarak okuyabilir, ama buradaki dosya
otoritatif değildir.
Step 8 — Süleyman onayı (DURUR #1)
Skill awaiting_approval durumuna geçer. Onaylanmadan:
events.jsonlyazılmaz- staging artifact "draft" işaretlidir (file_name suffix
.draftyerine değil — onay öncesi zaten yazılmış olabilir; gerçek gating events.jsonl appendinde) - ABORT path'i temizdir (no event, no portfolio touch)
Onay komutu: Süleyman explicit "evet/onaylıyorum/y" yazar →
approval_received=true. Hayır/atlama → ABORT.
Step 9 — Append _state/events.jsonl (ONLY ON APPROVAL)
{
"schema_version": "<events.schema $.const>",
"event_kind": "workflow",
"workflow_action": "done",
"workflow_run_id": "<uuid>",
"step_index": 8,
"event_id": "brand_onboarded_<slug>_<timestamp>",
"timestamp": "<ISO8601 UTC>",
"project_id": "<project_slug>",
"notes": "brand-onboarding wizard complete; semantic_marker=brand_onboarded; profile=<chosen>"
}
Schema-first override (Lesson 7+23): Brief
event_type=brand_onboardedöneriyor; ancakevents.schema.jsonevent_typeenum'u 12-value WORK-only kapalı liste (content_new,content_revise, ...).event_kind=workflowiçin doğru alanlarworkflow_action(8-value lifecycle) +workflow_run_id. Semantic marker olarakbrand_onboardedstring'inotesfield'una taşınır — schema invariant korunur, intent kaybolmaz.
Step 10 — Output report
Süleyman'a outputs/onboarding/{slug}-staging-config.json path,
chosen profile, 20 brand_identity + 14 content_settings field
özet tablosu, ve "Phase 14 init-project bu staging dosyasını
input olarak okuyacak" notu raporlanır.
Bank Seed Pipeline (Stages A + B + C — Phase 3 G-AI-05)
After Step 10, the skill chains into a 3-stage hybrid bank-seed
pipeline that populates content_settings.experience_database and
content_settings.original_research_database so the May 2026 Core
Update "original, helpful, people-first content" emphasis is met
with real first-hand signals (R-105, R-114, R-119).
Stage A — Auto Discovery:
scripts/meta/brand_onboarding_discovery.discover(project_slug) runs
DFS + Scrapling probes against the project's public surface (WHOIS
founding year, /hakkımızda parse, GBP listing for local-service,
case-study HTML, top-20 keywords). Output: draft_experience_entries
draft_research_entries+topic_candidates. F-16 budget pre-flight short-circuits to DURUR awaiting_approval if DFS daily credits are exhausted.
STAGING-ONLY (P1-12) — real discovery deferred. Stage A is stubbed today:
discover()returns empty drafts until the live-MCP wiring lands (Phase 11 Wave 2) and the full staging→canonical flow goes live with workspace bring-up (Phase 14). It never spends paid credits and never writes project state — the 5 profile-aware questions below are the operator's manual fallback in the meantime.
Stage B — Operator Review:
scripts/meta/brand_onboarding_review.generate_review_prompt()
renders a markdown document listing every draft with a 3-action
menu (approve / edit / reject); operator fills in decisions; calling
layer hands the decisions dict to
apply_review_decisions(discovery_output, decisions). Output:
approved_experience + approved_research + topic_candidates.
Stage C — Atomic Bank Write:
scripts/meta/brand_onboarding_write.write_bank_entries(project_slug, review_output) appends approved entries to project.config.json's
bank arrays. R-44 evidence_url validation fires HERE — every
experience entry MUST carry non-empty evidence_url; every research
entry MUST carry non-empty url. Atomic batch contract: if any entry
fails validation, the file stays untouched.
5 Profile-Aware Questions (when Stage A returns empty)
| # | Question | Profile gate | Bank target |
|---|---|---|---|
| 1 | Sektör tecrübesi (yıl + sertifika + partner) | all profiles | experience_database |
| 2 | 3 müşteri vaka hikayesi | all profiles | experience_database |
| 3 | Yönetici sektörel deneyimi | YMYL + b2b-saas | experience_database |
| 4 | Şirket içi anket / araştırma / case study | all (skip OK) | original_research_database |
| 5 | First-hand somut olaylar (canlı vaka) | YMYL + b2b-saas | experience_database |
Bank Seed DURUR Cascades (additive to the 6 below)
- DURUR #7 — BANK-SEED-DISCOVERY-EMPTY: Stage A returns 0 candidates across all 5 sources → awaiting_approval, operator must supply manually via the 5 questions above.
- DURUR #8 — BANK-SEED-EVIDENCE-MISSING: Stage C rejects an approved entry without evidence_url (R-44). Operator edits to add URL or removes the entry.
- DURUR #9 — BANK-SEED-PROFILE-MIN-NOT-MET: YMYL project with fewer than 3 approved experience entries after Stage C → awaiting_approval. Non-YMYL projects: ≥1 entry or operator explicit-skip.
DURUR conditions (6)
Stop and flag the manager — do not patch, do not fall back silently.
- DURUR #1 — Süleyman onayı yok.
approval_received != true→ ABORT.events.jsonlyazılmaz, staging artifact orphan kalır (cleanup audit ledger sorumluluğu). - DURUR #2 —
project_slugçakışması.projects/{slug}/dizini var ya da reserved word listesi (admin/system/root/api/www vs.) ile çakışıyor → REJECT. - DURUR #3 — Brand identity / content settings zorunlu alan eksik. Süleyman alan atladı → AMBER + prompt yeniden iterate. Skill default doldurmaz (AI suistimal yasağı).
- DURUR #4 —
profile_hintenum dışı. 5-value (e-commerce,ymyl,local-service,b2b-saas,portfolio) dışı seçim → REJECT. Type-safe assert; 6. değer kabul edilmez. - DURUR #5 — Workspace yok (Phase 14 öncesi).
projects/dizini engine repo'sunda yok → STAGING-ONLY mode (warning, devam). Wizard core (Steps 1-10)projects/{slug}/project.config.json'ı ASLA yazmaz. (Workspace VARSA, Stage C bu dosyanıncontent_settingsbank array'lerine append edebilir — Step 6 Stage C carve-out; bu DURUR yalnızca workspace YOKKEN wizard core'u staging'e kilitler.) - DURUR #6 — Domain DNS resolve fail.
socket.gethostbynameexception fırlatır → AMBER prompt; Süleyman manual confirm verirse devam, "no" derse ABORT.
Plugin agnostik invariant (F-16)
Bu skill .mcp.json dosyasına ASLA yazmaz, MCP tool sözleşmesi
yoktur (mcp_tools.required = [], mcp_tools.optional = []).
Phase 11+ plugin agnostik MCP boundary korunur; byte-hash sentinel
test'le doğrulanır (tests/skills/test_brand_onboarding.py).
Cross-references
- Schemas:
schemas/skill-frontmatter.schema.json(frontmatter contract),schemas/project-config.schema.jsonv1.5 (staging artifact validation),schemas/events.schema.jsonv1.0 (workflow event_kind discipline ADR-020). - Skills:
init-project(Phase 14 staging consumer),load-context,whats-next(meta peer skills). - Lessons: 7+23 (worker schema-first override yetkisi), 28 (manager mop-up matrisi), 30 (plugin agnostik MCP boundary F-16), 32 (atomic phase paterni).
- Tests:
tests/skills/test_brand_onboarding.py(15 case; frontmatter + 6 DURUR + plugin agnostik + 3-layer principles + schema staging conformance).