Zig tabanlı instance graph'ın nasıl çalıştığını (GraphView/NodeReference/EdgeReference), gerçek Python API surface'ini ve allocation, attributes ve cleanup etrafındaki invariantları açıklar. Low-level graph API'leri, memory management veya instance graph'ı traverse eden sistemler inşa ederken kullanın.
cd ~/.claude/skills
git clone https://github.com/atopile/atopile.git atopile mkdir -p ~/.claude/skills/graph
curl -fsSL https://raw.githubusercontent.com/atopile/atopile/HEAD/.claude/skills/graph/SKILL.md \
-o ~/.claude/skills/graph/SKILL.md faebryk.core.graph modülü, Zig graph implementasyonunun etrafındaki ince bir Python wrapper'ıdır.
Davranışın source-of-truth kaynakları:
src/faebryk/core/zig/src/graph/graph.zigsrc/faebryk/core/zig/src/python/graph/graph_py.zigsrc/faebryk/core/zig/gen/graph/graph.pyifrom faebryk.core.graph import GraphView
g = GraphView.create()
try:
_ = g.create_and_insert_node()
finally:
g.destroy()
src/faebryk/core/graph.pysrc/faebryk/core/zig/src/graph/graph.zigsrc/faebryk/core/zig/src/python/graph/graph_py.zigsrc/faebryk/core/zig/gen/graph/graph.pyisrc/faebryk/core/node.py (FabLL: node'lar/trait'ler graph-backed)src/atopile/compiler/gentypegraph.py (compiler, graph API'leri aracılığıyla typegraph'lar/instance'lar oluşturur)src/faebryk/core/graph_render.py (graph görselleştirmesi)NodeReference / EdgeReference: Zig'deki global backing storage'a (UUID'ler) value-like handle'lar.GraphView: bu reference'lar üzerinde bir membership + adjacency view (view başına arena + map'ler + bitset'ler).BoundNode / BoundEdge: traversal helper'ları için kullanılan "reference + owning GraphView pointer" wrapper'ları.GraphView(), NodeReference(), EdgeReference() çağrılması amaçlanmamıştır; exposed factory method'ları kullanın.
GraphView.create()NodeReference.create(**attrs)EdgeReference.create(source=..., target=..., edge_type=..., **attrs)GraphView.create() Zig-side graph'ı C allocator'ında tahsis eder; sadece GraphView.destroy() tarafından serbest bırakılır.
u8; Python'da 0..255 olarak işleyin (hashing/modulo Zig tarafında gerçekleşir).GraphView.init bir self_node ekler; sayımlar bunu içerir.src/faebryk/core/zig/gen/graph/graph.pyi)from faebryk.core.graph import GraphView, Node, Edge
g = GraphView.create()
try:
n1 = g.create_and_insert_node() # -> BoundNode
n2 = Node.create(name="n2") # -> NodeReference (henüz insert edilmedi)
bn2 = g.insert_node(node=n2) # -> BoundNode
e = Edge.create(source=n1.node(), target=bn2.node(), edge_type=7, name="link")
_be = g.insert_edge(edge=e) # -> BoundEdge
finally:
g.destroy()
GraphView.__repr__() Zig'den GraphView(id=..., |V|=..., |E|=...) yazdırır.python -m faebryk.core.graph (test_graph_garbage_collection çalıştırır).src/faebryk/core/zig/src/graph/* düzenleyin.ato dev compile (editable install'larda faebryk.core.zig import eder, compile eder).src/faebryk/core/zig/src/python/graph/graph_py.zig'deki wrapper'ı güncelleyin ve stub'ların yeniden oluşturulduğundan emin olun.Ana test entrypoint'leri:
python -m faebryk.core.graphzig test src/faebryk/core/zig/src/graph/graph.zigHerhangi bir yaratıcı çalışmaya başlamadan önce bunu mutlaka kullanın - feature oluştururken, component inşa ederken, functionality eklerken veya davranış değiştirirken. Kullanıcı niyetini, gereksinimleri ve tasarımı implementation öncesinde araştırır.
Uygulama tamamlandığında, tüm testler geçtiğinde ve çalışmanızı nasıl entegre edeceğinize karar vermeniz gerektiğinde kullanın - merge, PR veya cleanup seçeneklerini sunarak geliştirme sürecinin tamamlanmasını rehberlik eder.
Kod incelemesi geri bildirimi alırken, önerileri uygulamadan önce kullanın; özellikle geri bildirim belirsiz veya teknik olarak şüpheli görünüyorsa - performatif anlaşmadan veya körü körüne uygulamadan ziyade teknik titizlik ve doğrulama gerekir.
Görevleri tamamlarken, büyük özellikleri hayata geçirirken veya merge etmeden önce çalışmanın gereksinimleri karşıladığını doğrulamak için kullanın.
Yeni bir feature üzerinde çalışmaya başlarken veya implementasyon planını yürütmeden önce kullanın - native araçlar veya git worktree fallback aracılığıyla izole edilmiş bir workspace sağlar.
Herhangi bir konuşma başlatırken kullanın - skill'lerin nasıl bulunacağını ve kullanılacağını belirler, clarification soruları da dahil olmak üzere HERHANGİ bir yanıt vermeden önce skill invocation gerektirir.