Stan na 2026-08-01, runtime 0.5.0. Dokument odpowiada na jedno pytanie:
czy todo2code jest kompletny i co trzeba poprawić, zanim będzie.
docs/PROJECT_STATUS.md opisuje, co jest zbudowane. docs/TEST_REPORT.md
raportuje wyniki ostatniego przebiegu testów. Ten dokument ocenia dystans do
„gotowe" i nie powtarza ich treści.
Bramki offline uruchomiono ponownie 2026-07-31: npm run verify,
npm run evaluate:gold, npm run examples:check, smoke CLI/MCP/A2A, Docker i
audyt zależności przeszły. Pomiary repozytoriów wykonano w odłączonych worktree
z ich śledzonych commitów, bez prywatnych i nieśledzonych plików. Pełny
baseline siedmiu repozytoriów i kontrolowane A/B pierwszej poprawki są w
project/ticket-002. Deterministyczny audyt
pozostałych wpisów i drugie, niezależne A/B są w
project/ticket-003. Eksperyment
wielojęzycznego dopasowania i decyzja o odrzuceniu surowych embeddingów są w
project/ticket-004. Audyt konwersji
user-*/ai-* do Intent DSL i właścicieli odpowiedzi jest w
project/ticket-005; ticket zamknął
eksperyment rerankera przez kontrolowaną ścieżkę odrzucenia. Ticket
project/ticket-006 ujednolicił walidację
odpowiedzi i potwierdził odrzucenie na drugiej trasie modelowej. Ticket
project/ticket-007 domknął pustą trasę
odpowiedzi bez tworzenia tożsamości za człowieka. Ticket
project/ticket-008 przeniósł te granice do
standardu wellmanifest/new-project 0.6.0 i oddzielił indeks ticketów od
generowanego project/README.md. Ticket
project/ticket-009 rozszerzył jedno źródło
schematu z rerankera na wszystkie siedem produkcyjnych granic structured LLM.
Ticket project/ticket-010 dodał
przyrostowy cache AST i fragmentów dokumentacji oraz pomiar cold/warm na trzech
śledzonych snapshotach repozytoriów. Ticket
project/ticket-011 uziemił cele symboliczne
NL w deklaracjach AST: krótki symbol łączy się tylko przy jednym właścicielu,
a niejednoznaczność kończy się abstencją i listą ścieżek do wyboru.
Tickety 012 i
013 zmierzyły pełny Live LLM i wybrały
Codestral 2508 jako domyślny model. Ticket
014 oddzielił lokalizację od implementacji:
sama istniejąca ścieżka nie zamyka już nowej funkcji, a kontrola Koru przeszła
pełny cykl od diagnostyki do zweryfikowanego patcha i re-analizy.
Ticket 015 zachował pełną treść złożonej
intencji w tytule zadania Koru, usuwając wariant Implement Implement ... bez
zmiany samego rekordu DSL ani jego celów.
Ticket 016 dodał obserwowalność PHP i A/B
na 40 śledzonych plikach semcod/redsl.
Nie, projekt nie jest kompletny. Warstwa deterministyczna jest operacyjnie dojrzała. Warstwa semantyczna — czyli to, po co narzędzie istnieje — działa poprawnie, ale mierzy niskie pokrycie i nie ma jeszcze dostatecznie szerokiego dowodu jakości na wielu repozytoriach.
Rozstrzygające liczby, wszystkie z przebiegów opisanych w sekcji „Reprodukcja":
| todo2code | subactor/platform | |
|---|---|---|
| Rekordy | 17 064 | 10 628 |
| Relacje | 26 470 | 11 424 |
| Tematy | 474 | 678 |
| aligned | 82 (17,3%) | 43 (6,3%) |
| Implementation coverage | 24,4% | 10,0% |
| Documented code | 39,9% | 15,2% |
Na własnym repozytorium narzędzie wiąże mniej więcej co szósty temat. Na obcym
— co szesnasty. Ta sama treść zmierzona poprzednią wersją narzędzia dawała 74 i
25 aligned oraz 22,0% i 5,9% pokrycia; różnica pochodzi ze słownika
dziedzinowego PL→EN, odfiltrowania polskich słów funkcyjnych i z tego, że temat
bez własnego celu trafia teraz pod moduł, z którym łączy go relacja. Dystans
między repozytoriami zmalał, ale nie zniknął.
Te obszary mają kontrakt, testy i pomiar. Nie są obecnie blockerami wydania.
| Obszar | Dowód |
|---|---|
| Kontrakty DSL i walidacja runtime | kontrakty intencji, grafu, diagnostyk, wniosków, TODO, code-change, operation-plan i wszystkich siedmiu odpowiedzi LLM; 307 testów, 306 zaliczonych, 0 błędów i 1 lokalny skip JDK |
| Granica LLM | 9 deterministycznych entrypointów, 36 modułów bez tranzytywnego importu klienta; wymuszane przez verify:no-llm |
| Prowenienacja | każdy rekord niesie konwerter, wersję runtime i tryb; rekord LLM dodatkowo provider/model/response ID, a fallback jawny stan degradacji |
| Determinizm | dwa identyczne przebiegi gold dają ten sam fingerprint; examples:check powtarzalny |
| Cache ekstrakcji | content-addressed, wersjonowany i fail-open; TypeScript per plik, zewnętrzny AST per manifest języka, dokumentacja per plik i parametry chunkingu; odpowiedzi LLM nie są cache'owane |
| Ochrona ścieżek | wyjście poza T2C_ROOT odrzucane spójnie w CLI, MCP, A2A i SDK |
| Przepływ DSL2TODO | propose → render → approved apply, zgodny w pięciu SDK, TODO.md zmieniany wyłącznie po akceptacji hasha |
| Agregaty konfiguracji | jeden configuration_file_fact na plik; dokumentacja wiąże się przez jawną ścieżkę, a ogólne klucze nie uruchamiają capability-topic |
| Rozstrzyganie symboli NL | alias symbolu jest dowodem AST tylko przy jednym właścicielu albo zgodnym target.path; wiele modułów daje abstencję, kandydatów i AMBIGUOUS_REQUIREMENT |
| Lokalizacja vs funkcja | shared_path pozostaje relacją nawigacyjną, ale capability-bearing deklaracja wymaga symbolu, capability overlap, konkretnego faktu/commita albo zaakceptowanego reranku; reality nie liczy path-only jako pokrycia |
| Interfejsy | CLI, MCP, A2A v1.0, Docker, wheel Pythona |
| Odporność na obce repo | sześć repozytoriów zewnętrznych plus subactor/platform; brak awarii, brak wycieku poza root |
| Sygnał changeloga | placeholdery, skróty ... and N more files i znane artefakty analizy pod project/ nie udają już braku implementacji; merytoryczne wpisy nadal wymagają dowodu |
| Izolacja generowanej analizy | nowa referencja do nieśledzonego wejścia nadal blokuje raport; śledzona wzmianka audytowa o jego nazwie nie jest już mylona z odczytem prywatnego pliku |
| Intencje ludzi i agentów | sekcje user-*/ai-* zachowują właściciela i typ DSL; dowody ticketu nie udają rozmowy; każda rozbieżność wskazuje rolę oraz respondenta albo jawny sentinel nierozstrzygniętej roli |
Przed poprawką ticket-005 tworzył 165 rekordów agent_log z sześciu
anonimowych „uczestników”, bo README.md, logi, changelog i pliki iteracji
były traktowane jak rozmowa. Wszystkie 165 rekordów miało nierozstrzygniętą
tożsamość, a cztery konflikty człowiek–agent były artefaktem ról unknown.
Bezpośrednio po poprawce ten sam ticket tworzył 38 rekordów z dwóch
właścicieli: 34 dla codex i 4 dla tom-sapletta-com. Po dopisaniu końcowego
planu, raportu i decyzji jest to 51 + 4. Końcowa analiza ma 0 blocking, 8
warning i 8 review_required; nie są to anonimowe konflikty:
- 7 claimów wykonania nie ma jeszcze commita/test-faktu, więc odpowiedzieć
(
responseRequiredRole=agent) musicodex; - 1 claim agenta o zatwierdzeniu nie ma decyzji w pliku należącym do człowieka,
więc odpowiedzieć musi
tom-sapletta-com; - 8 szczegółowych działań nie ma równie szczegółowej intencji w human-owned
pliku (najnowsze polecenie istnieje tylko w rozmowie), więc potwierdzenie albo
korekta zakresu również należy do
tom-sapletta-com.
Agent nie może zamknąć dwóch ostatnich klas przez edycję user-*. To właśnie
oczekiwany podział odpowiedzialności: dowód własnego wykonania uzupełnia agent,
a ludzką decyzję lub rozszerzenie zakresu zapisuje człowiek.
Przypadek brzegowy z ticket-006 jest zamknięty przez ticket-007. Gdy istnieje
wyłącznie plik agenta, analiza nadal wskazuje responseRequiredRole=human, ale
zamiast pustego responseRequiredFrom=[] emituje
responseRequiredFrom=["unresolved:human"]. Analogiczny brak agenta daje
unresolved:agent. Znany uczestnik nadal zachowuje pierwszeństwo; sentinel nie
udaje osoby, nie tworzy user-* i nie jest adresem zewnętrznej wysyłki.
Test migracyjny użył read-only historycznego commita 2b9e3c9 z
wellmanifest/new-project:
| Wariant | Rekordy | Wynik |
|---|---|---|
samo przemianowanie Prompt/raportu na user-*/ai-* |
0 | jawne ostrzeżenia wskazują człowieka i agenta, którzy muszą sklasyfikować treść |
Opus, jawne request + analityczne message |
9 + 58 | 0 rozbieżności |
GPT56Luna, jawne request + analityczne message |
9 + 72 | 3 fragmenty bez odpowiedzi, 0 fałszywego konfliktu różnych plików |
Wniosek: system porównuje intencje dopiero po konwersji sekcji do DSL, ale
zachowuje tekst, ścieżkę i linie źródłowe. Migracja musi zachować typ
epistemiczny — oznaczenie całej analizy jako report wytwarza fałszywe claimy,
dlatego starsze dokumenty mieszane wymagają podziału na sekcje.
Wspólny pipeline offline uruchomiono na code2llm, domd, pactfix,
code2logic, code2docs, redup i subactor/platform. Wszystkie 7/7
przebiegów zakończyło się succeeded; zakres dokumentacji, tryby i commity są
utrwalone w
baseline.json.
| Repozytorium | Rekordy | Relacje | Implementation coverage | CHANGELOG_WITHOUT_IMPLEMENTATION |
|---|---|---|---|---|
| code2llm | 16 899 | 41 747 | 59,4% | 1 411 |
| domd | 10 611 | 7 470 | 11,8% | 105 |
| pactfix | 5 161 | 3 917 | 5,0% | 48 |
| code2logic | 21 423 | 16 927 | 17,7% | 121 |
| code2docs | 6 717 | 35 447 | 47,1% | 396 |
| redup | 7 204 | 19 173 | 49,2% | 703 |
| subactor/platform | 10 628 | 11 002 | 5,9% | 93 |
Powtarzalna próbka diagnostyk wykazała, że mechaniczne wpisy wydania zasłaniają
realne deklaracje bez implementacji. Minimalny klasyfikator usunął 1 024
fałszywe review_required w pięciu repozytoriach
(2 877 → 1 853) oraz 39 wtórnych UNLINKED_RECORD. Na pactfix i
subactor/platform, gdzie próbkowane wpisy były merytoryczne, liczby się nie
zmieniły. Fingerprint każdego grafu pozostał identyczny, a gold v2 zachował
100% precision/recall i zero naruszeń zabronionych kodów. Szczegóły:
iteration-01.md.
Drugi audyt sklasyfikował deterministyczną próbkę 168 z pozostałych 1 853
zgłoszeń (24 z każdego repozytorium), a następnie wykonał pełny cenzus
wyłonionych klas. Dokładne, pozbawione deklaracji zachowania wpisy
Update <file> stanowiły 547 przypadków w pięciu repozytoriach. Ich
odfiltrowanie obniżyło liczbę
CHANGELOG_WITHOUT_IMPLEMENTATION z 1 853 do 1 306 oraz wtórnych
UNLINKED_RECORD z 5 728 do 5 540. Wszystkie 7/7 fingerprintów grafu
pozostało identycznych, gold v2 nadal ma 100% precision/recall, a pełna
walidacja offline przeszła. Szczegóły i próbka:
iteration-01.md.
Uporządkowane wedle wpływu. Każda pozycja ma pomiar i wskazany plik.
Na subactor/platform implementation coverage wynosi 10,0%, a aligned
43 z 678 tematów — wobec 5,9% i 25 przed słownikiem dziedzinowym. Na własnym
repozytorium jest to 24,4%. Różnica zmalała, ale wciąż wynosi ponad dwa razy.
Zamknięto trzy przyczyny, każda zmierzona na tej samej treści:
- słownik PL→EN dla słownictwa dziedzinowego obserwowanego w tym korpusie oraz
polskich końcówek na angielskich zapożyczeniach (
ticketu,foundera); - polskie słowa funkcyjne przestały udawać tematy.
nie175,jest110 ijako54 były jednymi z najczęstszych „tematów" korpusu, a bufory tematyczne biorą tylko pierwsze dwanaście tokenów rekordu — czysta gramatyka wypierała prawdziwe słownictwo, zanim dopasowanie się zaczęło; - deklaracja, której własny cel nie wskazuje żadnego pliku, trafia pod moduł powiązany z nią relacją. Wcześniej zdanie, które linker już połączył z kodem, i tak liczyło się jako „planned, no code", bo tematy grupuje własny ticket/ścieżka/symbol rekordu, a nie graf.
Co zostaje: dopasowanie działa dla słownictwa w słowniku, nie dla języka. Gold v2 mierzy teraz osobny kohort PL/DE/ES/FR: 0/6 oczekiwanych relacji poza słownikiem i 0/6 naruszeń bliskich semantycznie par zabronionych.
Ticket-004 sprawdził dwa przypięte modele lokalne. MiniLM poprawnie uszeregował
5/6 par, E5 6/6, lecz zakresy cosine pozytywów i negatywów nachodziły na siebie.
Na rzeczywistym grafie subactor/platform próg E5 wskazał dwie nowe relacje i
obie odrzucono po przeglądzie. Wzajemny top-1 usunął fałszywe trafienia, ale nie
dodał żadnej relacji, więc surowe embeddingi nie weszły do linkera. Skalowanie
słownika ręcznie na każdy język i dziedzinę nadal nie jest planem.
Ticket-005 oddzielił retrieval od decyzji. Wersjonowany kandydat jest ograniczony do 1–10 modułów, nie może utworzyć relacji, a decyzja musi zaakceptować, odrzucić albo abstainować z cytatami z obu rekordów. Na przejrzanych fixture'ach gold v2 reranker osiąga 6/6 oczekiwanych relacji, 0/6 naruszeń par zabronionych i jedną abstencję hard-negative; zwykły linker nadal świadomie raportuje 0/6.
Próba live na czystym commitcie 3e96573 platformy nie przeszła granicy
kontraktu. Trzy odpowiedzi qwen/qwen3.7-plus kolejno: nie zawierały tablicy
decisions, użyły pola judgments, a następnie zwróciły niepoprawny typ lub
zakres confidence. Runtime za każdym razem odmówił utworzenia relacji. Nie
zmierzono więc wzrostu coverage ani stabilnej, przypiętej rewizji dostawcy;
reranker nie jest eksportowany przez paczkę, CLI, MCP ani A2A. To wynik
negatywny, ale ważny: JSON Schema deklarowane na granicy providera nie jest
samo w sobie dowodem zgodności odpowiedzi.
Ticket-006 usunął lokalny drift: schema wysyłana do providera, typ TypeScript i
walidator runtime mają jedno źródło, a pełny test porównuje je z opublikowanym
schematem. Druga trasa, qwen/qwen3.7-flash, również zawiodła — dodała
niedozwolone response.decisions[0].decision. Nowy błąd podał dokładną
ścieżkę oraz provider/model/response ID bez utrwalania payloadu. Plus i Flash
zostały więc odrzucone przed zmianą grafu.
Ticket-009 usunął tę samą klasę driftu z pozostałych granic. Mały,
bezdependencyjny kontrakt TypeScript generuje JSON Schema i parser runtime dla
NL, dokumentacji, TODO/CHANGELOG, komunikacji, podsumowania, syntezy zadań oraz
rerankera. npm run verify:structured-responses mierzy 7 wywołań
kontraktowych i 0 surowych wywołań JSON w kodzie produkcyjnym, a
verify:schemas porównuje publikowany schemat dokumentów z wynikiem generatora.
Niepoprawny enum, procent zamiast liczby, puste klucze i nadmiarowe pole są
odrzucane z dokładną ścieżką. Provider/model/response ID pozostają w audycie
nawet wtedy, gdy parser odrzuci odpowiedź. Kontrole cytowań i własności dowodu
pozostają osobnym etapem, bo zgodność JSON nie dowodzi istnienia rekordu w
konkretnym grafie.
Warunek zamknięcia: dopasowanie niezależne od ręcznego słownika (osadzenia
albo tłumaczenie/reranking tematów), stabilny kontrakt live podniesiony z 0/6
na gold v2 i potwierdzony wzrostem implementation coverage na repozytorium
spoza tego korpusu.
evaluation/gold/v2/dataset.json (t2c.gold-dataset/v2) zastąpił v1 jako
bramka npm run evaluate:gold; v1 zostaje w drzewie i nadal jest ewaluowalny.
Stan po rozszerzeniu:
| v1 | v2 | |
|---|---|---|
| Przypadki ekstrakcji / oczekiwane rekordy | 6 / 9 | 10 / 21 |
| Kanały ekstrakcji | 3 | 4 (doszedł deterministyczny baseline dokumentacji) |
Relacje linkowania exact-target |
6 | 10 |
Relacje linkowania capability-topic |
1 | 8 |
| Zabronione pary linkowania | 2 | 14 |
| Przypadki diagnostyk (false DONE, partial) | brak zakresu | 5 / 11 oczekiwań |
| Wielojęzyczny kohort | brak | 6 oczekiwanych / 6 zabronionych |
Udokumentowane luki (knownGap) |
brak | 6 |
Zakres diagnostics istnieje, bo ani ekstrakcja, ani linkowanie nie wyrażają
zdania „ten DONE nie ma za sobą implementacji": rekord ekstrahuje się poprawnie
i nie łączy z niczym — czyli dokładnie stan, o który chodzi. Przypadek
diagnostics-true-done-with-evidence pilnuje strony odwrotnej: DONE z dowodem
musi milczeć.
Warunek zamknięcia: próba na tyle duża, by zmiana progu trzech tematów dała mierzalny spadek w którąkolwiek stronę — dziś 8 pozytywów i 6 negatywów to minimum, nie komfort.
make demollm przechodzi. Historia przebiegów pokazała 1 z 6 przed
dodaniem korygującej próby, a później sporadyczny zmyślony recordId i pusty
lokalny klucz propozycji. Generator v2 wyprowadza rekordy tylko z cytowanych
diagnostyk, nadal odrzuca nieznane diagnostyki i nadaje lokalne klucze w
runtime. Bieżący live:check i pełny run przeszły bez retry, lecz:
- gold nie uruchamia realnego wywołania, więc regresja promptu lub modelu nie zostanie wykryta przez bramkę offline;
- historia dopiero zaczyna się zbierać — kontrakt i przechowywanie są gotowe, ale trend potrzebuje przebiegów, żeby cokolwiek znaczyć.
npm run live:check obejmuje teraz sześć etapów z sześciu. Kontrola
uruchamia pipeline require-llm nad examples/ i mierzy jego manifest, zamiast
wołać wybrane etapy własnymi wywołaniami — dzięki temu nie może rozjechać się z
tym, co pipeline naprawdę robi, a właśnie tak dryfowała do dwóch etapów. Progi
są rozdzielone na etap i na cały przebieg (t2c.live-contract-check/v2), a
.intent-live/contract-check-history.json przechowuje zredagowany trend
ostatnich 50 przebiegów; job CI odtwarza go z cache i publikuje jako artefakt.
Historia jest raportowana, ale nie jest bramką: jeden wolny dzień providera nie
powinien wywracać buildu, a trend, którego nikt nie zapisuje, i tak jest
nieczytelny.
Warunek zamknięcia: kilka zapisanych przebiegów harmonogramowych, żeby mediana latencji i kosztu per etap opisywała cokolwiek.
PHP ma od ticketu 016 dependency-free adapter składniowy oparty o
token_get_all(..., TOKEN_PARSE). Kontrolowane A/B na semcod/redsl zamieniło
ostrzeżenie o 40 nieobsługiwanych plikach na 2 127 unikalnych rekordów PHP,
80 nowych relacji i 18 mniej ostrzeżeń diagnostycznych, bez zmiany liczby
planów. Nadal brakuje parserów Ruby/C#/Kotlin/C/C++ i innych raportowanych
jawnie języków.
- Bare nazwy plików rozwiązują się tylko przy unikalności w repo;
validation.tsczytypes.tspozostają niewiązalne bez katalogu. To świadomy kompromis precyzji, nie usterka, ale obniża recall. - Konfiguracja i AST mogą dowodzić
implemented, ale raport rozdziela już jakość tego dowodu. Pomiar wykazał 16 z 46 tematów opartych wyłącznie na konfiguracji nasubactor/platformwobec 4 z 89 tutaj;alignedByEvidencezachowuje ten podział bez odbierania konfiguracji statusu implementacji. - Wpisy changelogu nie uczestniczą w szerokim dopasowaniu tematycznym. Audyt siedmiu repozytoriów pokazał, że takie połączenie mieszałoby prawdziwe deklaracje wydania z mechaniką release notes. Szum mechaniczny jest już odfiltrowany. Z pozostałych 1 306 wpisów pełny cenzus klasyfikuje 1 275 jako merytoryczne lub nieweryfikowalne deklaracje, 30 jako niezrealizowane pozycje roadmapy i 1 jako zbiorcze podsumowanie plików. Pierwsza grupa nadal wymaga precyzyjnego dowodu przez ticket, symbol lub ścieżkę. Następna hipoteza to jawny cykl życia pozycji roadmapy, nie kolejne wyciszenie tekstu changeloga.
Ticket-010 dodał cache pod <outputDir>/cache/v1: TypeScript jest zapisywany
per plik, adaptery zewnętrzne per pełny manifest języka, a Markdown per plik,
rozmiar fragmentu i wersję algorytmu. Uszkodzenie lub błąd I/O powoduje
ponowną ekstrakcję; wyniki z ostrzeżeniem toolchainu i odpowiedzi LLM nie są
utrwalane. Cold/warm na śledzonych snapshotach dał 1398,4→442,1 ms dla
15 062 rekordów AST todo2code i 49,2→16,8 ms dla 751 rekordów
subactor-improvement, z identycznym wyjściem. Dla dokumentacyjnego new-project
zysk był mały (10,1→7,2 ms, 26/26 hitów), co potwierdza, że granicę
skalowania całego pipeline'u nadal trzeba mierzyć na większych grafach; cache
nie przyspiesza linkowania ani syntezy LLM.
Domyślny openrouter/auto-beta ukrywał wybór modelu, a odrzucona odpowiedź
traciła metadane. Pomiary na identycznym pipeline require-llm wykazały, że
Qwen 3.7 Plus łamał kontrakty dokumentacji i komunikacji również po korekcie,
a GPT-5.4 Mini dwukrotnie łamał już kontrakt NL. Nie obniżono rygoru parsera.
Jawny google/gemini-3.6-flash przeszedł 6/6 etapów bez fallbacku i
degradacji: 125,486 s, 177 953 tokeny, $0.412363. Każdy bezpośredni ekstraktor
ma teraz jedną próbę korekcyjną z dokładnym schematem; druga zła odpowiedź
nadal przerywa run. Audyt zachowuje obie odpowiedzi, a request timeout nie może
być krótszy niż mierzony budżet etapu. Historia obejmuje bieżący zapis.
Ticket-013 powtórzył pełny kontrakt na modelach wybranych z poprawnych kohort
llm-code-benchmark. mistralai/codestral-2508 przeszedł 6/6 w 57,129 s
za $0.037994, a google/gemini-3-flash-preview w 64,064 s za $0.076411.
deepseek/deepseek-v4-pro przekroczył 900-sekundowy budżet i został odrzucony.
Codestral jest teraz jawnym domyślnym modelem. Na weekly współbieżność trzech
batchy skróciła ten sam etap 218,741→53,362 ms; wcześniej timeoutujący
nlp2uri zakończył 619 rekordów / 20 żądań w 194,750 ms za $0.08588244.
| Ryzyko | Stan |
|---|---|
| Adapter Java weryfikowany wyłącznie w CI | job Temurin 17 z T2C_REQUIRE_JAVA_TEST=1; w bieżącym środowisku pominięty z powodu braku JDK |
| Zależność od dostępności providera | testy offline nigdy nie wołają sieci; live check jest osobnym, opt-in jobem; Codestral i Gemini 3 Flash Preview przeszły 6/6, ale wynik nie gwarantuje przyszłej dostępności |
| Koszt LLM | Codestral: $0.037994 za pełne 6/6 na małym repo i $0.08588244 za 619 rekordów Markdown nlp2uri; duże backlogi nadal wymagają limitu kosztu |
| Audyt zależności | npm audit --omit=dev: 0 podatności |
Wersję 0.6.0 uznaję za gotową, gdy:
- zrobione — gold v2 zachowuje osobne precision/recall dla dopasowania po
celu i po temacie oraz rozszerza próbę: 8 pozytywów
capability-topiczamiast 1, 14 par zabronionych, osobny zakres diagnostyk oraz kohort cross-language z 6 pozytywami i 6 negatywami. Próba jest nadal mała i pozostaje pozycją w TODO; - zrobione operacyjnie — live check obejmuje sześć etapów LLM, ma rozdzielone progi etap/przebieg, zapisuje historię i przeszedł 6/6 na jawnym modelu; trend nadal wymaga kolejnych planowych przebiegów;
implementation coveragena repozytorium innym niż własne przekracza próg ustalony po pomiarze z punktu 1 — dziś 10,0% jest zbyt niskie, by narzędzie było użyteczne bez ręcznej interpretacji.
Punkty 1 i 3 są warunkami merytorycznymi, a punkt 2 techniczno-operacyjnym.
Punkt 3 pozostaje otwarty, ale przesunął się. Pomiar A/B na identycznej treści
(ta sama treść śledzonego HEAD, dwie wersje narzędzia):
| todo2code przed | po | platform przed | po | |
|---|---|---|---|---|
| Relacje | 24 860 | 26 470 | 11 002 | 11 424 |
| Tematy | 482 | 474 | 688 | 678 |
aligned |
74 | 82 | 25 | 43 |
| Implementation coverage | 22,0% | 24,4% | 5,9% | 10,0% |
| Documented code | 36,0% | 39,9% | 8,9% | 15,2% |
Wcześniejsza partia poprawek (modalność prohibicyjna, obligacja peryfrastyczna,
martwe muszą przez \b na diakrytyku, składanie liczby mnogiej) dodała
relacje, ale nie ruszyła pokrycia — bo aligned w ogóle nie czytało grafu.
Dopiero kotwiczenie deklaracji w powiązanym module przełożyło relacje na
metrykę.
npm run verify # 307 testów, 104 moduły, 7/0 structured/raw LLM calls
npm run evaluate:gold # precision/recall po klasach, diagnostyki, stabilność
npm run examples:check # pięć SDK, powtarzalny
npm audit --omit=dev # zależności produkcyjne
make smoke protocol-smoke docker-smoke
npm run live:check # opt-in, wymaga OPENROUTER_API_KEY
make demollm # sześć etapów LLM bez fallbacku, płatnePomiary pokrycia z tego dokumentu:
t2c pipeline <root> --task TASK.md --todo TODO.md --changelog CHANGELOG.md \
--docs 'README.md,docs/**/*.md' \
--nl-mode deterministic --markdown-mode deterministic \
--no-docs-llm --no-summary-llm --out .intent-readiness
t2c reality .intent-readiness/runs/<id>/intent.graph.json \
--diagnostics .intent-readiness/runs/<id>/diagnostics.json --md reality.mdtodo2code używał --task TASK.md; subactor/platform zastępował tę opcję
przez --task none i dodawał --no-communication. Zakres --docs zmienia
liczby — trzeba go podawać razem z wynikiem. Powyższa tabela pochodzi
odpowiednio z runów
20260731T060324Z-7be82c1d na bf79b96 i
20260731T060357Z-4ac57367 na 3e96573.