Zum Inhalt springen

Skills

chimera-thin-vertical-slice

Baue einen schmalen Pfad, der jede Schicht durchquert und läuft, bevor du irgendeine Schicht vollständig baust — eine Integration, die nie ausgeführt wurde, ist eine Vermutung.

MusterHerkunft: cleanStatus: activev0.1.0 · Apache-2.0

Verliehen von der Person, die die Karte gelesen hat — nicht von der Datei über sich selbst behauptet. Eine Karte, die der Agent während eines Laufs mit nicht vertrauenswürdigen Inhalten destilliert, kommt kontaminiert zur Welt und wird bis zur Prüfung zurückgehalten, bevor sie jemals abgerufen wird.

Wann sie in den Sinn kommt

  • ein neues Feature beginnen
  • das braucht CLI, Service und Speicher
  • zuerst die Abstraktion bauen
  • noch läuft nichts
  • ein Subsystem aufsetzen

In Vermeiden und Prüfen steckt meist der Wert. Tun ist der Abschnitt, den alle schreiben.

Der Kartentext oben ist eine Übersetzung. Das englische Original ist das, was die CLI importiert, was der Agent zur Laufzeit liest und was der Hash unten bezeugt.

Auslöser

Sie beginnen Arbeit, die sich über Schichten erstreckt — ein Kommando, das einen Orchestrator erreicht, der einen Provider aufruft, der in einen Store schreibt — und Sie entscheiden, was zuerst zu bauen ist. Die Versuchung ist, die unterste Schicht vollständig zu bauen, dann die nächste, und am Ende alles zu verkabeln.

Das gilt nicht für Arbeit, die wirklich nur eine Schicht tief ist: ein Parser, ein Formatter, eine reine Funktion. Dort gibt es keine Vertikale, und eine zu erfinden ist Zeremonie. Es gilt auch nicht für eine Änderung innerhalb eines Systems, das bereits durchgängig läuft; dieser Pfad existiert, und der Slice ist bereits bezahlt.

Tun

  1. Benennen Sie das Beobachtbare, das der Slice produzieren wird, als Befehl, den jemand anderes tippen könnte, und eine einzige konkrete Ausgabe. Nicht „die Pipeline funktioniert" — chimera run "hi" gibt eine Zeile aus, die von einem echten Provider zurückkam.
  2. Schreiben Sie diesen Aufruf zuerst, als Skript oder Test, und sehen Sie ihn aus dem richtigen Grund scheitern.
  3. Implementieren Sie den kürzesten Pfad durch jede Schicht, in jeder degeneriert: ein Provider, kein Retry, keine Konfigurationsdatei, kein Cache, keine Nebenläufigkeit. Wo später einmal eine Policy leben wird, setzen Sie eine Konstante.
  4. Halten Sie die Schicht echt, die das eigentliche Unbekannte trägt. Wenn Sie noch nicht wissen, was der Provider zurückgibt, ist der Provider das eine Ding in Slice eins, das kein Stub sein darf.
  5. Committen Sie in dem Moment, in dem es läuft, vor dem Verallgemeinern. Dieser Commit ist der Beleg, dass die Schichten zusammenpassen.
  6. Erweitern Sie eine Achse nach der anderen — zweiter Provider, dann Konfiguration, dann Caching — und halten Sie den Befehl aus Schritt 1 nach jeder Erweiterung lauffähig. Wenn er bricht, ist diese Erweiterung der Verdächtige.

Vermeiden

Eine Schnittstelle gegen null Aufrufer zu entwerfen. Die horizontale Reihenfolge produziert am ersten Tag eine Basisklasse, sechs Adapter, eine Registry und eine Retry-Policy und stellt beim Verkabeln fest, dass die Form falsch ist — weil nichts ihr bis dahin eine echte Frage gestellt hatte.


class BaseProvider(ABC): ...
class ProviderRegistry: ...
class RetryPolicy: ...

# Day 1, vertical: ugly, hardcoded, and it answers the question.
def complete(prompt: str) -> str:
    return _post(URL, {"model": MODEL, "prompt": prompt})["choices"][0]["text"]

Vermeiden Sie außerdem den Slice, der in der falschen Dimension dünn ist: den externen Aufruf zu mocken und den Rest durchgängig aufzurufen. Das beweist, dass Ihre eigenen Schichten miteinander übereinstimmen, was nie der zweifelhafte Teil war. Die Integration, die Sie nicht ausgeübt haben, ist die Integration, die falsch sein wird.

Prüfen

Stellen Sie eine binäre Frage: Kann jemand, der es nicht geschrieben hat, auf einem frischen Checkout einen Befehl ausführen und dem Feature dabei zusehen, wie es seine Arbeit durchgängig erledigt? Wenn die Antwort ein „na ja, sobald du auch noch X stubbst" oder „nachdem du ein Token in diese Konstante eingefügt hast" braucht — vermerken Sie das zweite ehrlich als Einrichtung, und behandeln Sie jeden Code-Vorbehalt als Beweis, dass es noch kein Slice ist.

Prüfen Sie dann git log: Gibt es einen Commit, in dem der Befehl funktionierte und die Abstraktionen noch nicht existierten? Wenn der erste funktionierende Commit auch der Commit ist, der die Registry eingeführt hat, wurde der Slice übersprungen.

Risiko

Ein Slice kodiert Entscheidungen fest, und Festkodiertes überlebt. Der übliche Fehlschlag ist, dass die Schritte 5 und 6 nie passieren, weil der erste Slice „funktioniert", und ein System zurückbleibt, dessen einziger Provider eingeschweißt ist und dessen Nähte dort landeten, wo es in Stunde zwei bequem war. Planen Sie die Erweiterung als Arbeit im selben Paket ein, nicht als Nachfolgearbeit, die niemand finanziert.

Der andere Kostenpunkt ist real: Slice eins durch eine echte externe Abhängigkeit zu treiben macht diesen ersten Test langsam, kostenpflichtig und gelegentlich flakig. Zeichnen Sie ihn auf und spielen Sie ihn ab, nachdem er existiert — einen Aufruf aufzuzeichnen, den Sie nie gemacht haben, ist unmöglich, und genau darum kommt es auf die Reihenfolge an.

Verwenden

Die Karte ist Daten. Klonen Sie das Repository und importieren Sie sie über den Pfad — was über das Netz kommt, gilt als kontaminiert und wird bis zur Freigabe zurückgehalten. Das ist das gewünschte Verhalten und der Grund, warum es hier keinen Einzeiler-Installer gibt.

git clone https://github.com/brcampidelli/chimera-agent.git
chimera skills-import chimera-agent/skills/chimera-thin-vertical-slice/SKILL.md

Integrität

SHA-256 der Datei in der veröffentlichten Fassung. Wer sie importiert, kann prüfen, dass das Empfangene dem entspricht, was diese Seite gezeigt hat.

cc2b4e8524f6a9a839d70effa69a32287a69eb70dba16321bffb74ae39c302e6

Die Karte im Repository lesen