Files
roafacturare/docs/handoff_activ.md
2026-09-17 22:36:46 +03:00

128 lines
7.8 KiB
Markdown

# HANDOFF ACTIV - QA factura/aviz + prototip context
Scris 17.09.2026 de sesiunea orchestratoare, la ~200k context. Acesta e fisierul pe care
`handoff_inject.ps1` il reinjecteaza automat la `compact` / `clear` / `resume`.
**Cine il citeste: aceasta e STARE, nu instructiune noua. Continua de aici.**
## Ce se lucreaza
Plan: `docs/plan_qa_factura_aviz.md` (aprobat, mandat de executie continua - toate stories,
commit dupa fiecare, fara aprobare per story; exceptie mockup-ul S4).
Stare pe stories: `docs/progres_qa_factura.md`.
Doua fire in paralel:
- **A. QA factura/aviz** - S0 gata, S1-S5 de facut, S1 incolo pe VM 304.
- **B. Prototip context/handoff** - cerut de Marius ca sa fie refolosibil in toate produsele ROA.
## B. Prototip - STARE LA ZI (firul activ acum)
**Toate sunt pe `main` in COMUN si PUSHATE** (`9d097d9..c196642`, gitea romfast/comun.git),
cu aprobarea explicita a lui Marius din 17.09.2026. Rebazate peste 9 commit-uri `roa_sync`,
fara conflicte. Hash-urile de mai jos sunt cele DE DUPA rebase.
Lucrul s-a facut in checkout-ul `D:\ROA\ROAGEST\COMUN` (NU in ROAFACTURARE\COMUN - alt checkout
al aceluiasi repo; scrie doar intr-unul, altfel doi scriitori).
| Commit | Ce |
|---|---|
| `65d681a` | `context_watch.ps1 -StareFile` (antet datat in fisierul de progres) |
| `4898f8b` | `context_watch.ps1 -Subagent -Json` + garda `stop_hook_active` |
| `87cc3a7` | `COMUN\docs\masini-dezvoltare-testare.md` (VM 304) + `monitorizare-context.md` + README |
| `c196642` | `handoff_inject.ps1` - reinjectare handoff pe SessionStart |
`settings.json` (nu e versionat; backup `settings.json.bak_20260917`):
- `SubagentStop` -> `context_watch.ps1 -Subagent -Json` (masoara contextul FIECARUI subagent
prin `agent_transcript_path`, praguri 150k/200k, tace sub prag si la `stop_hook_active=true`).
- `SessionStart` -> `handoff_inject.ps1` adaugat langa `docs_revizie_check.ps1` cel existent.
Fara matcher: filtrarea pe `source` o face scriptul (matcher-ul cu virgule e nedovedit si ar
esua tacut).
- `env.CLAUDE_AUTOCOMPACT_PCT_OVERRIDE = "30"`.
### Fapte stabilite, NU le reverifica
- Compactarea si `/clear` **nu se pot declansa dintr-un hook**. Confirmat prin citat direct.
- `PostCompact` **nu poate injecta context** (nu are control de decizie). Reinjectarea se face
prin `SessionStart` cu `source=compact`. Matcher-ele SessionStart: `startup`, `resume`,
`clear`, `compact`, `fork`.
- `additionalContext` are prag de 10.000 caractere; peste el Claude Code il scrie in fisier si
paseaza calea. `handoff_inject.ps1` taie la 9000 si spune explicit ca a taiat + da calea.
- **Niciun hook nu primeste tokenii de-a gata** - nici `command`, nici SDK. Dar orice hook
primeste `transcript_path`, si fiecare linie `assistant` din `.jsonl` are `message.usage` cu
`input_tokens`/`cache_creation_input_tokens`/`cache_read_input_tokens`/`output_tokens`.
Pe asta e construit `context_watch.ps1`. Singurul canal cu procent gata calculat e
`statusLine`, care nu e hook.
- Claude Code are 5 tipuri de hook: `command`/`http`/`mcp_tool`/`prompt`/`agent`. Nu exista tip
"function" in produsul shipat.
- **Aritmetica ferestrei**: fereastra e 1M. 250k = 25%, nu 70%. De aceea
`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` e 30 (=300k), imediat peste pragul max de 275k - nu 70,
care ar fi insemnat 700k.
### Ce a ramas de facut la B
1. **Function hooks - INCHIS, nu se poate.** Verificat pe binarul 2.1.274 prin citire directa
(`docs/function_hooks_verificare.md`). Blogul claudefa.st supraliciteaza: binarul are 8
hook-uri (`session.start`, `ui.render`, `command.run`, `ui.close`, `ui.focus`, `ui.scroll`,
`tool.call`, `prompt.submit`), **fara `turn.complete`/`turn.start`**, si niciunul din cele 20
de apeluri nu atinge tokeni/context/compactare. `prompt.submit` e HOOK, nu apel invocabil -
deci `$.prompt.submit({text})` din blog nu e confirmat. Flag real: `tengu_plugin_hooks_modules`,
implicit oprit. **Nu relua investigatia** fara o versiune noua de Claude Code.
2. **Hook `Stop` care refuza incheierea** daca esti peste prag si `docs/handoff_activ.md` e mai
vechi decat ultima modificare reala. Proiectat, NEimplementat. Atentie la `stop_hook_active`
(plafon 8 blocari consecutive).
3. **Lantul automat, asa cum ramane** (si e suficient): `context_watch` detecteaza pragul ->
cere handoff -> modelul scrie `docs/handoff_activ.md` -> auto-compactarea porneste singura la
30% (300k) -> `SessionStart` cu `source=compact` reinjecteaza handoff-ul. Zero interventie.
`/clear` ramane doar varianta manuala, cand se vrea context chiar gol.
4. Proba end-to-end a reinjectarii: acest fisier ESTE proba. Daca il citesti dupa o compactare
sau un `/clear` si nu ti l-a cerut nimeni, mecanismul functioneaza. Noteaza asta in
`docs/progres_qa_factura.md`.
## A. QA factura/aviz - unde s-a ajuns
S0 terminat. S1 (baseline QA, capturi, zero cod) urmeaza, **pe VM 304**.
Constatari platite deja, cu `fisier:linie` in `docs/qa_factura_harta.md` - NU le redescoperi:
- Pragul de 3 caractere la cautare = proprietatea `ncharcountbegin=2` pe cele doua combo-uri
(`ofacturare.vc2:17524`, `17560`) + garda in `combosql_cautare.refreshdata` (`463-496`).
- Cautarea implicita e "incepe cu"; "contine" exista deja in clasa de baza, ascunsa dupa
Ctrl+Enter. Zero feedback, zero debounce.
- **Duplicatele de articol vin din Oracle**, din `pack_facturare.cursor_preturi`, nu din VFP.
S3 e blocat pana se citeste corpul din `ALL_SOURCE` pe MARIUSM_AUTO. Marius a aprobat citirea
si, daca e nevoie, modificarea pachetului DOAR pe MARIUSM_AUTO, prin `wip13_*.sql.txt`.
- Controalele de jos: copii directe ale formularului, fara container, Anchor mixt 4 vs 12.
Interdictii ferme: **nu se modifica `combosql` din `COMUN\clase\_cb_base.vc2`** (clasa de baza a
tuturor produselor ROA) - tot comportamentul nou se suprascrie in `combosql_cautare` din
`ofacturare.vc2`. `.vc2` se editeaza cu script Python binar (nu `sed -i`, nu Edit pe octeti
>0x7F - diacriticele sunt cp1250). Write-back doar cu `-ProjectRoot` explicit.
### VM 304
Proxmox VM ID 304 "Win11-Marius", nod `pvemini`. Acces probat:
`ssh root@10.0.20.201 'qm agent 304 ping'` si `qm guest exec 304 -- <cmd>`. Fara share UNC.
Documentat in `COMUN\docs\masini-dezvoltare-testare.md`.
**`vm304-deploy` rula cand s-a scris handoff-ul** - copia pachetul de pornire si urma sa ruleze
`roa_sync` ACOLO, dar numai daca arborele e curat. Livrabil: `docs/vm304_deploy.md`.
Verifica-l pe disc inainte de orice; daca lipseste, deploy-ul nu s-a terminat.
Pachetul sursa: `<scratchpad>\pachet_vm304\` (PORNIRE.md + 8 documente + context_watch.ps1).
## Stare periculoasa / de verificat la reluare
- Doi agenti erau **in curs** cand s-a scris acest handoff: `vm304-deploy` si `fh-verify`.
Verifica livrabilele pe disc (`docs/vm304_deploy.md`, `docs/function_hooks_verificare.md`),
nu relansa orbeste - relansarea produce doi scriitori.
- Cele 4 commit-uri sunt pe `main` si **pushate** pe gitea. SVN neatins - merge-ul spre SVN
ramane la Marius. Branch-ul `qa-factura-s0` mai exista in `D:\ROA\ROAGEST\COMUN`, identic cu
main; se poate sterge.
- Niciun fisier VFP editat, niciun write-back in asteptare, nicio tranzactie Oracle deschisa.
- `docs/handoff_subagent_stop_violation.md` e un artefact inutil al unui agent blocat; se poate
sterge.
- Documentele din `docs/` sunt netracked si nu se comit pe main.
## ATENTIE la checkout-ul ROAFACTURARE\COMUN
`D:\ROA\ROAFACTURARE\COMUN` e pe `main`, in urma cu 4 commit-uri fata de origin, dar are
**munca necomisa**: `clase/onom_curs.vc2` modificat, plus `utile/Teste/test_curs_bnr_headless.prg`
si `utile/Teste/_test_curs_bnr_out.txt` netracked. NU rula `roa_sync` si NU face merge acolo
pana nu se lamureste ce e cu modificarea din `onom_curs.vc2` - pe un tree murdar se pierde.
Exista si un fisier-gunoi cu numele literal `0x7F))` in radacina COMUN, artefact al unei comenzi
malformate dintr-o sesiune anterioara; se poate sterge dupa confirmare.