FabLL (faebryk.core.node), Python node/trait bildirimleri TypeGraph ve instance graph'a nasıl eşlediğini, field/trait invariantlarını ve instantiation desenlerini kapsamasını gösterir. Yeni component veya trait tanımlarken, Node API ile çalışırken veya type registration'ı anlarken kullanın.
cd ~/.claude/skills
git clone https://github.com/atopile/atopile.git atopile mkdir -p ~/.claude/skills/fabll
curl -fsSL https://raw.githubusercontent.com/atopile/atopile/HEAD/.claude/skills/fabll/SKILL.md \
-o ~/.claude/skills/fabll/SKILL.md fabll (esas olarak src/faebryk/core/node.py) donanım bileşenleri tanımlamak ve bunlarla çalışmak için yüksek seviyeli Python API'sidir. Python sınıfları ile temel TypeGraph ve instance grafiği arasındaki boşluğu kapatır.
import faebryk.core.faebrykpy as fbrk
import faebryk.core.graph as graph
import faebryk.core.node as fabll
g = graph.GraphView.create()
tg = fbrk.TypeGraph.create(g=g)
class _App(fabll.Node):
pass
app = _App.bind_typegraph(tg=tg).create_instance(g=g)
src/faebryk/core/node.py (Node/Traits/alanlar, tür kaydı, bağlama/örnekleme yardımcıları)src/faebryk/core/faebrykpy.py (FabLL tarafından arka planda kullanılan edge türleri)src/faebryk/core/graph.py (örnekler tarafından kullanılan GraphView sarıcısı)src/faebryk/library/): Her bileşen (Resistor, Capacitor, vb.) Node sınıfından türetilir.ato dosyalarından dinamik olarak Node alt sınıfları oluşturur.Node örnekleri üzerinde çalışır.fabll.Node bir graph.BoundNode ile oluşturulur.SomeType.MakeChild(...)Traits.MakeEdge(SomeTrait.MakeChild().put_on_type()) (veya benzer)MyType.bind_typegraph(tg).create_instance(g)faebryk.library.*) ato içeri aktarmaları için kasıtlı olarak kısa tanımlayıcılara (sınıf adı) sahiptirNode._register_type içinde zorunlu kılınır)src/faebryk/core/node.py içinde bulunur (alan sistemi).__init_subclass__).ato dev test --llm test/core/test_node.py -q ve ato dev test --llm test/library/test_traits.py -qNode alt sınıflarına bir Trait olabilecek metotlar eklemeyin. Bu, onların farklı bileşen aileleri için uygulanmasına olanak tanır.Node.__init_subclass__).EdgeTrait.traverse(trait_type=...) tercih edin.MyNode() çağırmayın: örnekler bağlı bir tür aracılığıyla bind_typegraph(...).create_instance(...) ile oluşturulur.import faebryk.core.graph as graph
import faebryk.core.faebrykpy as fbrk
g = graph.GraphView.create()
tg = fbrk.TypeGraph.create(g=g)
inst = MyNode.bind_typegraph(tg).create_instance(g=g)
Node.__init_subclass__ node türleri için "birden fazla seviye derinliğinde" kalıtımı yasaklar.ImplementsTrait edge içeren Node alt sınıflarıdır.class MyTrait(Node):
is_trait = Traits.MakeEdge(ImplementsTrait.MakeChild().put_on_type())
node_instance.get_trait(TraitType) kullanın. Bu bir graf geçişi gerçekleştirir.EdgeComposition aracılığıyla bağlanır. add_child bu edge'i oluşturur. Büyük ağaçlar (10k+ düğüm) Python döngü yükünden kaçınmak için dikkatli bir şekilde inşa edilmelidir; temel graf verimlidir, ancak Python etkileşimleri zaman maliyeti vardır.2 veya daha fazla bağımsız görevin paralel olarak yürütülebileceği ve aralarında state paylaşımı ya da sıralı bağımlılık olmadığı durumlarda kullanın.
Ayrı bir oturumda inceleme kontrol noktaları ile yürütülecek yazılı bir uygulama planınız olduğunda kullanın.
Mevcut oturumda bağımsız görevlerle uygulama planlarını yürütürken kullanın
Herhangi bir hata, test başarısızlığı veya beklenmeyen davranışla karşılaştığınızda, çözüm önerisi sunmadan önce kullanın.
Herhangi bir feature ya da bugfix uygulamaya başlamadan önce kullanın.
Yeni beceriler oluştururken, mevcut becerileri düzenlerken veya dağıtımdan önce becerileri doğrularken kullanın.