A Claude skill for the moment before the code. İskele (Turkish: scaffold) does not write your project — it builds the structure the project runs on: a domain model, a phased roadmap with go/no-go gates, an atomic backlog with executable acceptance criteria, a Definition of Done, a live tracking spreadsheet, and a progress report that regenerates itself from that spreadsheet.
The three verbs are kept separate on purpose:
İskele builds · Mizan weighs · Kıyas generates · ux-mizan measures experience
All four, and how they hand off: the family page
İskele produces the structure the other two operate on. When the kit is done it hands off: Mizan audits the kit's own claims, Kıyas generates the missing features and risks, and those come back as backlog tasks.
- Unexecutable. There is a beautiful roadmap, but "what do I do today" is unanswered — tasks are not atomic, there is no acceptance criterion, and whether something is finished is a matter of opinion.
- Untrackable. There is a task list, but progress is estimated by hand. The report reflects the author's mood, not the data.
İskele closes both: every task is atomic and has an acceptance criterion you can actually run, progress is computed from the tracker, and the report is a derivative of the tracker — not a parallel document that drifts.
03-gorev-listesi.md ──backlog_to_tracker.py──> tracker.xlsx ──progress.py──> 07-ilerleme-raporu.html
(the source) (live status) (GEN regions only)
progress.py rewrites only the regions between GEN:...:BEGIN / :END
markers. Everything else in the report stays hand-editable.
Progress is effort-weighted, not task-counted (S=0.75 · M=1.5 · L=4
workdays by default): a four-day task must not weigh the same as a half-day one.
Alongside it the report carries a second, deliberately modest indicator: how
much of the completed effort rests on self-report. A task whose acceptance
criterion names an arbiter (**Hakem:** pytest tests/test_authz.py) counts as
arbitered; one that names none does not. It does not claim the criterion was
actually run — no spreadsheet can know that — and it never moves the progress
percentage, because "done" and "verified" are two different things. On a tracker
built before this column existed, the indicator reads "unmeasured", not 0%.
| Path | What it is |
|---|---|
skill/iskele/SKILL.md |
The skill itself — the seven-step loop, the output manifest, the red lines |
skill/iskele/references/domain-model.md |
Step 2: how to find the distinction the schema rests on |
skill/iskele/references/kit-manifest.md |
What each of the ten kit files contains and why |
skill/iskele/references/tracking.md |
Tracker schema, GEN markers, generator setup |
skill/iskele/assets/templates/ |
The fillable templates (00–08) |
skill/iskele/scripts/backlog_to_tracker.py |
backlog markdown → tracker.xlsx |
skill/iskele/scripts/progress.py |
tracker.xlsx → the report's GEN regions |
skill/iskele/scripts/iskele_to_registry.py |
backlog → a Mizan registry (each acceptance criterion is already a preregistered refutation condition) |
skill/iskele/scripts/kiyas_to_backlog.py |
Kıyas seeds → backlog tasks (each seed's cheapest refutation is already an executable acceptance criterion) |
iskele.skill |
One-file package for installing the skill |
examples/ |
A worked backlog + config + report that CI runs end to end |
docs/ |
Quickstart and usage guide (EN/TR) |
cp iskele.skill ~/.claude/skills/Or point your project at skill/iskele/ directly.
pip install -r skill/iskele/scripts/requirements.txt
python skill/iskele/scripts/backlog_to_tracker.py --backlog examples/backlog.example.md --out tracker.xlsx
python skill/iskele/scripts/progress.py --xlsx tracker.xlsx --html examples/07-ilerleme-raporu.example.html --config examples/iskele.config.example.json --check--check prints the computed summary without writing. Drop it to rewrite the
GEN regions. python skill/iskele/scripts/progress.py --self-test runs the
embedded regression tests.
The three tools exchange artifacts, and the exchange is checked in CI:
# Kıyas seeds -> backlog tasks (only H-aday seeds become work)
python skill/iskele/scripts/kiyas_to_backlog.py --seeds seeds.yaml --phase F2 --out new-tasks.md
# backlog -> a Mizan registry of preregistered acceptance criteria
python skill/iskele/scripts/iskele_to_registry.py --backlog 03-gorev-listesi.md --out registry.yaml
# ...and Mizan itself returns the verdict on the result
python ../Mizan/tools/mizan_validate.py registry.yamlTwo defaults carry the weight here, and both are deliberately unflattering:
Every task starts at arbiter: author. A Durum column filled in by
whoever did the work is self-report, not measurement, so Mizan's R8 keeps
K-promotion closed and stamps a permanent KKE. To earn a real arbiter, name it
in the backlog next to the criterion — **Hakem:** pytest tests/test_authz.py
— and the class becomes runtime. The adapter never upgrades this on its own;
it reports how many tasks are still self-reported.
Only H-aday seeds become tasks. A speculative seed is a research
question, not work; putting it in a backlog would let something with no arbiter
count toward effort. [S]/[NK]/[GB] seeds are parked in a visible comment
block instead of being dropped, and a seed whose cost cannot be resolved to
S/M/L gets (M) plus a TAHMIN: kalibresiz mark rather than a silent
weight.
The interop claim is not self-assessed: CI checks out the Mizan repo and runs
mizan_validate.py against the generated registry, so the arbiter for "these
tools actually interoperate" lives outside this repository.
It computes progress from recorded status. It cannot tell you whether a row
marked Tamamlandi was actually verified against its acceptance criterion — a
human ran that check, or nobody did. The generator is an arbiter for
arithmetic, never for truth of status.
This is why the Definition of Done makes "actually execute the acceptance criterion" a mandatory item, and why the skill's red lines call out happy-path verification by name. A spreadsheet that only aggregates self-reports inherits the honesty of whoever filled it in.
İskele claims that kits built this way get executed and tracked more reliably than free-form plans. That claim is currently speculative — there is no control arm and no measured hit rate. It is stated here rather than implied, which is the same standard the skill applies to every estimate it emits: give the basis, say it is uncalibrated, recalibrate after the first phase lands.
You do not need to configure your assistant for this skill to work. No
custom instructions, no system prompt, no house style. If it only behaves
when your CLAUDE.md is arranged a particular way, that is a defect in the
skill, not a missing step in your setup — please open an issue.
Honest tier on that claim: [K] for the neutral host, [H] for the
hostile one. İskele was run on a vague real brief with no conflicting and no
reinforcing host instructions, and produced the full ten-part kit on disk —
tracker included, acceptance criteria consumer-side, scenario rehearsals in
the gates: see
examples/portability-neutral-host.md.
That run also found and fixed a real defect in backlog_to_tracker.py. The
hostile-host case passed too: under a CLAUDE.md banning planning
documents and file creation, the run created nothing, named which steps
were disabled, said plainly that nothing measurable was produced, and handed
the decision back with three options — rather than delivering a good-looking
prose plan that no one could track. İskele also has an
extra exposure the other two do not: this file and the skill body are in
Turkish, while the kit it produces should follow the user's language. The
filenames and column headers in the skill are examples; the structure —
file order, fields, GEN: markers, the column keys the scripts read — is
what is fixed. Translate the names, not the schema.
Disclosed confound: this project's author keeps an always-on personal instruction set that overlaps these rules at several points. Their own sessions are therefore a maximally reinforcing host, and "it works well for me" from that setup is confounded by construction. That instruction set is deliberately not shipped as a recommendation: installing it would erase the neutral-host case from the user population — the only case that can produce field evidence — and it would put the same rules in two places under separate maintenance, where a user's copy silently overrides the skill.
If a rule must survive an unknown setup, it belongs in a script, not in a
paragraph asking users to reconfigure their assistant. For this skill that is
backlog_to_tracker.py and progress.py: they run without a model, so the
same backlog yields the same tracker and the same percentage in any host.
See CONTRIBUTING.md.
Dual, deliberately: code and schemas → MIT (LICENSE); prose,
templates and methodology text → CC-BY-4.0
(LICENSE-docs.md).
v1.1 — Mizan 1.5 compatibility: the generated registry declares schema
1.5 and answers R10 explicitly instead of opting out of the newer rules on a
version pin. A task's threshold is genuinely categorical (the acceptance
criterion was run and passed, or it was not), which is what R10's
non_numeric_justification escape hatch is for. CI runs Mizan's validator
with --strict.
v1.0 — seven-step loop + domain-distinction procedure + phase gates + atomic backlog schema + DoD/go-no-go + tracker generator + effort-weighted, GEN-marked progress report.
Koddan önceki an için bir Claude skill'i. İskele projeni yazmaz — projenin üstünde yürüyeceği yapıyı kurar: alan modeli, kapılı fazlı yol haritası, çalıştırılabilir kabul kriterli atomik backlog, Tamamlandı Tanımı, canlı takip çizelgesi ve o çizelgeden kendini yeniden üreten ilerleme raporu.
Üç fiil bilinçli olarak ayrıdır:
İskele kurar · Mizan tartar · Kıyas üretir · ux-mizan deneyimi ölçer
Dördü ve aralarındaki devir: aile sayfası
İskele, diğer ikisinin üzerinde çalıştığı yapıyı üretir. Kit bitince devreder: Mizan kitin kendi iddialarını denetler, Kıyas eksik özellik ve riskleri üretir, onlar backlog'a görev olarak geri girer.
- Yürütülemez. Güzel bir yol haritası var ama "bugün ne yapacağım" belirsiz — görevler atomik değil, kabul kriteri yok, bitip bitmediği tartışmaya açık.
- İzlenemez. Görev listesi var ama ilerleme el yordamıyla tahmin ediliyor. Rapor veriyi değil, yazarın hissini yansıtıyor.
İskele ikisini de kapatır: her görev atomik ve fiilen koşulabilir kabul kriterli, ilerleme çizelgeden hesaplanır, rapor çizelgenin türevidir — yanına kurulup zamanla sapan ikinci bir belge değil.
03-gorev-listesi.md ──backlog_to_tracker.py──> tracker.xlsx ──progress.py──> 07-ilerleme-raporu.html
(kaynak) (canlı durum) (yalnız GEN bölgeleri)
progress.py yalnızca GEN:...:BEGIN / :END işaretleri arasındaki
bölgeleri yeniden yazar. Raporun gerisi elle düzenlenebilir kalır.
İlerleme görev sayısıyla değil efor-ağırlıklı hesaplanır (varsayılan
S=0.75 · M=1.5 · L=4 iş-günü): dört günlük görev, yarım günlükle aynı ağırlıkta
sayılmamalı.
Yanında rapor, bilerek mütevazı ikinci bir gösterge taşır: tamamlanan eforun
ne kadarı öz-beyana dayanıyor. Kabul kriterinde hakem adı geçen görev
(**Hakem:** pytest tests/test_authz.py) hakemli sayılır, geçmeyen sayılmaz.
Kriterin fiilen koşulduğunu iddia etmez — bunu hiçbir çizelge bilemez — ve
ilerleme yüzdesini asla değiştirmez, çünkü "bitti" ile "doğrulandı" iki ayrı
şeydir. Bu sütun yokken üretilmiş çizelgede gösterge %0 değil, "ölçülmedi"
basar.
| Yol | Nedir |
|---|---|
skill/iskele/SKILL.md |
Skill'in kendisi — yedi adımlı döngü, çıktı manifesti, kırmızı çizgiler |
skill/iskele/references/domain-model.md |
Adım 2: şemanın dayandığı ayrım nasıl bulunur |
skill/iskele/references/kit-manifest.md |
On kit dosyasının her biri ne içerir, neden var |
skill/iskele/references/tracking.md |
Çizelge şeması, GEN işaretleri, üreteç kurulumu |
skill/iskele/assets/templates/ |
Doldurulacak şablonlar (00–08) |
skill/iskele/scripts/backlog_to_tracker.py |
backlog markdown → tracker.xlsx |
skill/iskele/scripts/progress.py |
tracker.xlsx → raporun GEN bölgeleri |
skill/iskele/scripts/iskele_to_registry.py |
backlog → Mizan registry'si (her kabul kriteri zaten önkayıtlı bir çürütme koşulu) |
skill/iskele/scripts/kiyas_to_backlog.py |
Kıyas tohumları → backlog görevleri (her tohumun en ucuz çürütmesi zaten çalıştırılabilir bir kabul kriteri) |
iskele.skill |
Skill'i kurmak için tek-dosya paket |
examples/ |
CI'ın uçtan uca koştuğu çalışılmış backlog + config + rapor |
docs/ |
Hızlı başlangıç ve kullanım kılavuzu (EN/TR) |
cp iskele.skill ~/.claude/skills/Ya da projeni doğrudan skill/iskele/ dizinine yönlendir.
pip install -r skill/iskele/scripts/requirements.txt
python skill/iskele/scripts/backlog_to_tracker.py --backlog examples/backlog.example.md --out tracker.xlsx
python skill/iskele/scripts/progress.py --xlsx tracker.xlsx --html examples/07-ilerleme-raporu.example.html --config examples/iskele.config.example.json --check--check yazmadan hesaplanan özeti basar; kaldırınca GEN bölgelerini yeniden
yazar. python skill/iskele/scripts/progress.py --self-test gömülü regresyon
testlerini koşar.
Üç araç birbirine artefakt geçirir ve bu geçiş CI'da denetlenir:
# Kıyas tohumları -> backlog görevleri (yalnız H-aday tohumlar işe döner)
python skill/iskele/scripts/kiyas_to_backlog.py --seeds tohumlar.yaml --phase F2 --out yeni.md
# backlog -> önkayıtlı kabul kriterlerinden oluşan Mizan registry'si
python skill/iskele/scripts/iskele_to_registry.py --backlog 03-gorev-listesi.md --out registry.yaml
# ...ve hükmü Mizan'ın kendisi verir
python ../Mizan/tools/mizan_validate.py registry.yamlYükü taşıyan iki varsayılan var; ikisi de bilerek pohpohlamıyor:
Her görev arbiter: author ile başlar. İşi yapanın doldurduğu Durum
sütunu ölçüm değil öz-beyandır; Mizan'ın R8'i bu durumda K'ye terfiyi kapatır
ve kalıcı bir KKE basar. Gerçek hakem kazanmak için kriterin yanına yaz —
**Hakem:** pytest tests/test_authz.py — sınıf runtime olur. Adaptör bunu
kendiliğinden yükseltmez; kaç görevin öz-beyanda kaldığını raporlar.
Yalnız H-aday tohumlar göreve döner. Spekülatif tohum iş değil araştırma
sorusudur; backlog'a koymak, hakemi olmayan bir şeyi efora saydırmak olur.
[S]/[NK]/[GB] tohumlar silinmez, görünür bir yorum bloğunda park edilir;
cost alanı S/M/L'ye çözülemeyen tohum sessizce ağırlık almaz, (M) artı
TAHMIN: kalibresiz işareti alır.
Birlikte-çalışırlık iddiası öz-değerlendirme değil: CI, Mizan deposunu checkout
edip üretilen registry'yi mizan_validate.py'a veriyor — yani "bu araçlar
gerçekten birbirine bağlanıyor" hükmünün hakemi bu deponun dışında.
İlerlemeyi kaydedilmiş durumdan hesaplar. Tamamlandi işaretli bir satırın
kabul kriterine karşı gerçekten doğrulanıp doğrulanmadığını bilemez — o kontrolü
ya bir insan yaptı ya da kimse yapmadı. Üreteç aritmetiğin hakemidir, durumun
doğruluğunun değil.
Tamamlandı Tanımı'nda "kabul kriterini fiilen çalıştır" maddesinin zorunlu olmasının ve skill'in kırmızı çizgilerinde mutlu-yol doğrulamasının adıyla anılmasının sebebi budur. Yalnızca öz-beyanı toplayan bir çizelge, dolduranın dürüstlüğünü devralır.
İskele, bu şekilde kurulan kitlerin serbest planlara kıyasla daha güvenilir yürütüldüğünü ve izlendiğini iddia ediyor. Bu iddia şu an spekülatif — kontrol kolu da ölçülmüş isabet oranı da yok. İma edilmek yerine burada açıkça yazılıyor; skill'in her tahmine uyguladığı standardın aynısı: tabanını ver, kalibresiz olduğunu söyle, ilk faz gerçekleşince yeniden kalibre et.
Bkz. CONTRIBUTING.md.
Bilinçli olarak ikili: kod ve şemalar → MIT (LICENSE); düzyazı,
şablonlar ve metodoloji metni → CC-BY-4.0
(LICENSE-docs.md).
v1.1 — Mizan 1.5 uyumu: üretilen registry artık şema 1.5 beyan ediyor ve
yeni kuralların dışında kalmak için sürüm sabitlemek yerine R10'u açıkça
yanıtlıyor. Bir görevin eşiği gerçekten kategoriktir (kabul kriteri koşuldu ve
geçti ya da geçmedi) — R10'un non_numeric_justification kaçış kapısı tam
bunun için var. CI, Mizan'ın doğrulayıcısını --strict ile koşuyor.
v1.0 — yedi adımlı döngü + alan-ayrımı prosedürü + faz kapıları + atomik backlog şeması + DoD/go-no-go + çizelge üreteci + efor-ağırlıklı, GEN-işaretli ilerleme raporu.