Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1423 commits
Select commit Hold shift + click to select a range
b9e7b82
Merge pull request #197 from ai21z/T530
ai21z May 26, 2026
a7d5c4b
T531 Decide pending obligation breach boundary
May 27, 2026
8893cf0
Merge pull request #198 from ai21z/T531
ai21z May 27, 2026
3e5e02e
T532 Extract pending obligation breach guard
May 27, 2026
f7bb05b
Merge pull request #199 from ai21z/T532
ai21z May 27, 2026
8d9ad19
T533 Close pending obligation breach lane
May 27, 2026
533769d
Merge pull request #200 from ai21z/T533
ai21z May 27, 2026
5e16a7e
T534 Decide loop state ownership boundary
May 27, 2026
3c57d81
Merge pull request #201 from ai21z/T534
ai21z May 27, 2026
b2844a7
T535 Decide terminal response state boundary
May 27, 2026
4c17e6e
Merge pull request #202 from ai21z/T535
ai21z May 27, 2026
04aa9cd
T536 Add loop state terminal response helpers
May 27, 2026
a410b62
Merge pull request #203 from ai21z/T536
ai21z May 27, 2026
e629134
T537 Decide post terminal response boundary
May 27, 2026
143acd3
Merge pull request #204 from ai21z/T537
ai21z May 27, 2026
60a6311
T538 Extract compact mutation continuation executor
May 27, 2026
32a0c85
Merge pull request #205 from ai21z/T538
ai21z May 27, 2026
9a7ca9d
T539 Decide post compact continuation boundary
May 27, 2026
062b6cc
Merge pull request #206 from ai21z/T539
ai21z May 27, 2026
c272381
T540 Decide tool loop final answer finalization
May 27, 2026
222fdba
Merge pull request #207 from ai21z/T540
ai21z May 27, 2026
5fc985c
T541 Extract tool loop final answer finalizer
May 27, 2026
a6cd895
Merge pull request #208 from ai21z/T541
ai21z May 27, 2026
e223b5a
T542 Close tool loop response finalization lane
May 27, 2026
dded0c7
Merge pull request #209 from ai21z/T542
ai21z May 27, 2026
0ab27b8
T543 Decide tool loop outcome value boundary
May 27, 2026
acfeb10
Merge pull request #210 from ai21z/T543
ai21z May 27, 2026
608a24e
T544 Extract tool mutation evidence value
May 27, 2026
3667488
Merge pull request #211 from ai21z/T544
ai21z May 27, 2026
e8ea670
T545 Decide post mutation evidence outcome boundary
May 27, 2026
67a7eed
Merge pull request #212 from ai21z/T545
ai21z May 27, 2026
867a7a3
T546 Extract tool outcome failure shape classifier
May 27, 2026
3c0448f
Merge pull request #213 from ai21z/T546
ai21z May 27, 2026
121b766
T547 Decide post failure shape outcome boundary
May 27, 2026
9c04ca9
Merge pull request #214 from ai21z/T547
ai21z May 27, 2026
5f79ff0
T548 Extract tool loop result summary formatter
May 27, 2026
1d29386
Merge pull request #215 from ai21z/T548
ai21z May 27, 2026
ede4933
T549 Close tool loop outcome value lane
May 27, 2026
d8699ec
Merge pull request #216 from ai21z/T549
ai21z May 27, 2026
b80c8d7
T550 Decide next hygiene lane
May 27, 2026
e24a69c
Merge pull request #217 from ai21z/T550
ai21z May 27, 2026
cb82597
T551 Decide trace artifact evidence ownership
May 27, 2026
72dcf43
Merge pull request #218 from ai21z/T551
ai21z May 27, 2026
e253c55
T552 Extract prompt debug redaction owner
May 27, 2026
72fa4a6
Merge pull request #219 from ai21z/T552
ai21z May 27, 2026
2643b1f
T553 Decide prompt debug evidence shape
May 27, 2026
84c61af
T553 Clarify prompt debug artifact writer visibility
May 27, 2026
de2a007
Merge pull request #220 from ai21z/T553
ai21z May 27, 2026
7b6a7d4
T554 Extract prompt debug artifact writer
May 27, 2026
83da183
Merge pull request #221 from ai21z/T554
ai21z May 27, 2026
edbe584
T555 Decide prompt debug artifact shape
May 28, 2026
290846f
T555 Correct prompt debug source line counts
May 28, 2026
8272df4
Merge pull request #222 from ai21z/T555
ai21z May 28, 2026
0c6d1c4
T556 Extract prompt debug destination resolver
May 28, 2026
55d70e3
T556 Isolate destination resolver tests
May 28, 2026
ca2a791
Merge pull request #223 from ai21z/T556
ai21z May 28, 2026
9333779
T557 Close prompt debug artifact lane
May 28, 2026
6a03bae
Merge pull request #224 from ai21z/T557
ai21z May 28, 2026
1795fe0
T558 Decide local trace evidence ownership
May 28, 2026
159f3f3
Merge pull request #225 from ai21z/T558
ai21z May 28, 2026
1e25583
T559 Extract command trace event factory
May 28, 2026
6e1841d
Merge pull request #226 from ai21z/T559
ai21z May 28, 2026
53b0e22
T560 Decide local trace evidence shape
May 28, 2026
669dab8
Merge pull request #227 from ai21z/T560
ai21z May 28, 2026
afa0d0d
T561 Extract private document handoff trace event factory
May 28, 2026
a799aaf
Merge pull request #228 from ai21z/T561
ai21z May 28, 2026
ce11fb9
T562 Decide local trace evidence shape
May 28, 2026
dc1abf2
Merge pull request #229 from ai21z/T562
ai21z May 28, 2026
9fdf30c
T563 Extract permission decision trace event factory
May 28, 2026
8a39cde
Merge pull request #230 from ai21z/T563
ai21z May 28, 2026
aedbb26
T564 Decide post-permission local trace shape
May 28, 2026
2f9d38d
Merge pull request #231 from ai21z/T564
ai21z May 28, 2026
f6ba323
T565 Extract checkpoint trace recorder
May 28, 2026
a9e2338
Merge pull request #232 from ai21z/T565
ai21z May 28, 2026
7dc15df
T566 Decide post-checkpoint local trace shape
May 28, 2026
9809545
Merge pull request #233 from ai21z/T566
ai21z May 28, 2026
31fca9b
T567 Extract protected-read postcondition trace event factory
May 28, 2026
4f85542
Merge pull request #234 from ai21z/T567
ai21z May 28, 2026
1cc1c16
T568 Decide post-protected-read local trace shape
May 28, 2026
8c76309
T568 Correct inspected source line counts
May 28, 2026
7ecc3d1
Merge pull request #235 from ai21z/T568
ai21z May 28, 2026
fd5c175
T569 Extract protocol sanitization trace event factory
May 28, 2026
14d37d3
Merge pull request #236 from ai21z/T569
ai21z May 28, 2026
6721951
T570 Decide post protocol sanitization trace shape
May 28, 2026
217cca6
Merge pull request #237 from ai21z/T570
ai21z May 28, 2026
3048b33
T571 Extract backend malformed response trace event factory
May 28, 2026
d4615aa
Merge pull request #238 from ai21z/T571
ai21z May 28, 2026
c841e70
T572 Decide post-backend-malformed local trace shape
May 28, 2026
0418e5a
Merge pull request #239 from ai21z/T572
ai21z May 28, 2026
f6f323c
T573 Extract exact literal write correction trace event factory
May 28, 2026
7c754ff
Merge pull request #240 from ai21z/T573
ai21z May 28, 2026
e061d5f
T574 Decide post-exact-literal local trace shape
May 28, 2026
c8217f6
Merge pull request #241 from ai21z/T574
ai21z May 28, 2026
3746b09
T575 Extract path argument normalization trace event factory
May 28, 2026
ae7caed
Merge pull request #242 from ai21z/T575
ai21z May 28, 2026
63d22ab
T576 Decide post-path-normalization local trace shape
May 28, 2026
579a188
Merge pull request #243 from ai21z/T576
ai21z May 28, 2026
6c417ca
T577 Extract tool alias decision trace event factory
May 28, 2026
57182c3
Merge pull request #244 from ai21z/T577
ai21z May 28, 2026
33ebd52
T578 Decide post-tool-alias local trace shape
May 28, 2026
7ebce92
Merge pull request #245 from ai21z/T578
ai21z May 28, 2026
affda6c
T579 Extract model response trace recorder
May 28, 2026
135b1ca
Merge pull request #246 from ai21z/T579
ai21z May 28, 2026
217ccec
T580 Decide post-model-response local trace shape
May 28, 2026
d316ba1
Merge pull request #247 from ai21z/T580
ai21z May 28, 2026
931048a
T581 Extract policy trace recorder
May 28, 2026
330912a
Merge pull request #248 from ai21z/T581
ai21z May 28, 2026
c63bb6a
T582 Decide post-policy local trace shape
May 28, 2026
024238e
Merge pull request #249 from ai21z/T582
ai21z May 28, 2026
02fe36d
T583 Extract prompt audit trace recorder
May 28, 2026
cfbd19b
Merge pull request #250 from ai21z/T583
ai21z May 28, 2026
724af92
T584 Decide post-prompt-audit trace shape
May 28, 2026
3372a69
Merge pull request #251 from ai21z/T584
ai21z May 28, 2026
53df2c8
T585 Extract repair trace recorder
May 28, 2026
8f0d401
Merge pull request #252 from ai21z/T585
ai21z May 28, 2026
2c66197
T586 Decide post-repair trace shape
May 28, 2026
caa3bd7
Merge pull request #253 from ai21z/T586
ai21z May 28, 2026
b8b2396
T587 Extract verification trace recorder
May 28, 2026
f108ad3
Merge pull request #254 from ai21z/T587
ai21z May 28, 2026
6b38b4f
T588 Decide post-verification trace shape
May 29, 2026
6fbc64f
Merge pull request #255 from ai21z/T588
ai21z May 29, 2026
c826caf
T589 Extract outcome trace recorder
May 29, 2026
bff2f97
Merge pull request #256 from ai21z/T589
ai21z May 29, 2026
df25a1c
T590 Decide post-outcome trace shape
May 29, 2026
0281b87
Merge pull request #257 from ai21z/T590
ai21z May 29, 2026
bd7b7ae
T591 Extract expectation verification trace event factory
May 29, 2026
c79a303
Merge pull request #258 from ai21z/T591
ai21z May 29, 2026
4839c71
T592 Decide post-expectation trace shape
May 29, 2026
5983aa0
Merge pull request #259 from ai21z/T592
ai21z May 29, 2026
572d9bd
T593 Extract pending action obligation trace event factory
May 29, 2026
c809934
Merge pull request #260 from ai21z/T593
ai21z May 29, 2026
a57a3b9
T594 Decide post-pending obligation trace shape
May 29, 2026
1247a42
Merge pull request #261 from ai21z/T594
ai21z May 29, 2026
dda6de1
T595 Extract action obligation trace event factory
May 29, 2026
9b938d5
Merge pull request #262 from ai21z/T595
ai21z May 29, 2026
c4f45d5
T596 Close local trace event shape lane
May 29, 2026
16166a5
Merge pull request #263 from ai21z/T596
ai21z May 29, 2026
2736479
T597 Decide trace lifecycle ownership
May 29, 2026
7bd07e6
Merge pull request #264 from ai21z/T597
ai21z May 29, 2026
442ff3a
T598 Decide artifact canary ownership
May 29, 2026
611eb20
Merge pull request #265 from ai21z/T598
ai21z May 29, 2026
27ac24a
T599 Close trace artifact evidence lane
May 29, 2026
232c4ba
Merge pull request #266 from ai21z/T599
ai21z May 29, 2026
fb9b396
Add ArchUnit bytecode-level architecture boundary guards
May 29, 2026
f13dd47
Add report-only ArchUnit architecture discovery pass
May 29, 2026
15c1f89
test(arch): add report-only package/slice cycle analysis
May 29, 2026
7d820ca
test(arch): add report-only execution-harness spine access report
May 29, 2026
ff032e5
test(arch): promote stable boundaries to gen-2 hard guards + guardrai…
May 29, 2026
8f873ba
docs(arch): add current architecture risk report
May 29, 2026
ed3d1eb
docs(arch): add external architecture visualization plan
May 29, 2026
8c749bb
docs(arch): add deep current-architecture design review (14)
May 30, 2026
f6a2542
docs(architecture): add technology modernization and dependency strat…
May 30, 2026
ef62f51
[T600] Decide roleful intent lane
May 30, 2026
eeb8ae7
Merge pull request #267 from ai21z/T600
ai21z May 30, 2026
b71db12
[T601] Add roleful intent value types
May 30, 2026
8be0240
Merge pull request #268 from ai21z/T601
ai21z May 30, 2026
e8b9931
[T602] Add task intent compiler
May 31, 2026
cfc1461
Merge pull request #269 from ai21z/T602
ai21z May 31, 2026
b93c646
[T603] Wire roleful intent parity path
May 31, 2026
8875890
Merge pull request #270 from ai21z/T603
ai21z May 31, 2026
9eac707
[T604] Fix scoped negation intent
May 31, 2026
312f603
Merge pull request #271 from ai21z/T604
ai21z May 31, 2026
e096380
[T605] Fix constraint target roles
May 31, 2026
db30e05
Merge pull request #272 from ai21z/T605
ai21z May 31, 2026
08f7d8d
[T606] Add workspace target reconciliation
May 31, 2026
aa8f4a3
Merge pull request #273 from ai21z/T606
ai21z May 31, 2026
e3959d0
[T607] Fix static web continuation naming
May 31, 2026
24a3940
Merge pull request #274 from ai21z/T607
ai21z May 31, 2026
2a8dd91
[T608] Add roleful trace and prompt-debug evidence
May 31, 2026
d755e96
Merge pull request #275 from ai21z/T608
ai21z May 31, 2026
96add70
[T609] Add roleful intent e2e regression pack
May 31, 2026
a97171b
[T609] Add roleful intent e2e regression pack
ai21z May 31, 2026
c68d2fd
[T610] Close roleful intent lane
May 31, 2026
4cb9ac7
[T610] Close roleful intent lane
ai21z May 31, 2026
ed64808
docs(architecture): consolidate architecture docs
May 31, 2026
703f97e
Merge v0.9.0-beta-dev into architecture guard branch
May 31, 2026
d8407a9
test(rag): isolate smoke tests from repo root
May 31, 2026
85e969b
Merge architecture guard cleanup into beta dev
May 31, 2026
899f46d
[T611] Fix explicit forbidden target projection
May 31, 2026
43bb082
Merge T611 explicit forbidden target projection
May 31, 2026
55137cd
[T612] Fix non-mutating roleful target semantics
May 31, 2026
547070f
Merge T612 non-mutating roleful target semantics
May 31, 2026
e056260
[T613] Expose directory evidence for existence checks
May 31, 2026
9333500
Merge T613 existence path tool surface
May 31, 2026
d133f58
[T614] Require grounded path existence evidence
May 31, 2026
adad179
Merge T614 path existence evidence guard
May 31, 2026
3769fcc
[T615] Fix partial-mutation blocked outcome rendering
May 31, 2026
9d6960a
Merge T615 partial-mutation blocked outcome rendering
May 31, 2026
2c49b53
[T616] Add deterministic roleful intent regression pack
May 31, 2026
612b15c
Merge T616 roleful intent regression pack
May 31, 2026
9bb70f8
[T618] Scope static-web verification findings
May 31, 2026
308cdca
Merge T618 scoped static-web verification
ai21z May 31, 2026
265fb32
[T619] Render grounded path existence answers
May 31, 2026
a453e3b
Merge T619 grounded path-existence answers
ai21z May 31, 2026
6f9e15d
[T621] Ignore CSS comments in selector extraction
May 31, 2026
0404b39
Merge T621 CSS comment selector fix
ai21z May 31, 2026
6ba52ed
T623 claim-scoped verification gate
May 31, 2026
9f533fa
T624 fold in verification review scope
May 31, 2026
8e7a821
T624 preserve verification report in outcomes
May 31, 2026
b1dc5b0
T625 add static web browser behavior verifier
May 31, 2026
a56f523
T626 tighten static web fallback causality
May 31, 2026
8e6a49d
Document HtmlUnit verifier dependency and T627
Jun 1, 2026
a7613de
T627 harden HtmlUnit workspace loading
Jun 1, 2026
b50ae4c
T628-T630 tighten source-derived verification
Jun 1, 2026
84feff5
T632-T633 dispatch verification by profile
Jun 1, 2026
14da2ad
T634 add document extraction verification lane
Jun 1, 2026
9398fee
T635 surface document extraction limitations
Jun 1, 2026
73d97a8
T636 fix HTML JS interaction verification
Jun 1, 2026
fa6b6e1
T637 tighten static web interaction verification
Jun 1, 2026
99a89af
T638 preserve static web repair claims
Jun 1, 2026
ef0b5aa
T640 surface remote static web asset limitations
Jun 1, 2026
47234b7
T641 report backend neutral status runtime
Jun 1, 2026
54d0d88
T642 preserve target polarity
Jun 2, 2026
885ffda
T643 support optional mutation targets
Jun 2, 2026
2c32a35
T645 add synthwave live audit harness
Jun 2, 2026
b77f8f1
T646 repair failed static web interactions
Jun 2, 2026
0ef8bf7
T648 align static web full rewrite repair tools
Jun 2, 2026
1ddcfcf
T650 preserve action obligation failure details
Jun 2, 2026
4a2027f
T651 prefer full writes for broad static web tasks
Jun 2, 2026
809165d
T652 preserve static web verifier targets
Jun 2, 2026
0e07903
T653 repair optional static web styling targets
Jun 3, 2026
f4ecf0d
T654 include static repair target readbacks
Jun 3, 2026
354e4d7
T655 include current static repair readbacks
Jun 3, 2026
9b08d6c
T656 share static repair readback context
Jun 3, 2026
cc988ea
T657 target static repair user prompts
Jun 3, 2026
f63d238
T658 allow static web state utility CSS selectors
Jun 3, 2026
daf290f
T659 target static verification continuation prompts
Jun 3, 2026
739e9dd
T661-T693 strengthen static web reliability
Jun 6, 2026
ddaed82
T695 add repo-local work cycle skill
Jun 6, 2026
bdcb394
T696 T697 preserve static web requirements and framework assets
Jun 6, 2026
6d604bf
T698 record synchronized audit findings
Jun 6, 2026
7c8d65f
T699 bind dirty static web workspace targets
Jun 6, 2026
30df91a
T700 detect Tailwind build directives
Jun 6, 2026
7adb03c
T701 ground verification status answers
Jun 6, 2026
dd67d68
Harden static web verification and repair flow
Jun 6, 2026
02a0a92
T707 add static web rewrite grounding frame
Jun 6, 2026
9a3cc9c
T709a gate compaction prune on success
Jun 6, 2026
717d6aa
T709 harden compaction summary integrity
Jun 6, 2026
5ca4659
T711 split compaction integrity failures from LLM breaker
Jun 6, 2026
345135e
T711 expose compaction status in trace debug
Jun 6, 2026
20e9581
T708a add project memory loader
Jun 7, 2026
8a9fb8b
T708b inject project memory frame
Jun 7, 2026
18b9c5b
T708c expose project memory audit
Jun 7, 2026
b73301f
Implement project memory and symbol retrieval hardening
Jun 7, 2026
8eb5f96
Merge pull request #287 from ai21z/feature/t708-project-memory-analysis
ai21z Jun 7, 2026
608dd76
T717 harden symbol extraction migration
Jun 7, 2026
ccfa529
T718 preserve Java method symbols with throws clauses
Jun 7, 2026
5014076
Merge feature/t708-project-memory-analysis into beta dev
Jun 7, 2026
a4c10f7
Clean audit evidence
Jun 7, 2026
afde647
Declare 0.10.0 beta candidate
Jun 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
131 changes: 131 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
# Talos - Copilot / AI Assistant Project Instructions

These instructions are read automatically by GitHub Copilot Chat and should
be treated as persistent project rules for any AI assistant working in this
repository.

---

## Branch Model

### Source of truth

- **`v0.9.0-beta-dev`** is the active development branch.
- **`main`** is the stable release branch. Do not target it directly.
- All feature work branches off `v0.9.0-beta-dev` and merges back into it.

### Branch rules

- Always create a new feature branch from `v0.9.0-beta-dev`.
- Never commit directly to `v0.9.0-beta-dev` or `main`.
- Never push to `main` unless performing a deliberate release merge.

### Infrastructure / tooling isolation

**CI workflows, quality tooling, and build-infrastructure changes must NOT
be merged into `v0.9.0-beta-dev` or `main` without explicit approval.**

These include:
- `.github/workflows/` files
- JaCoCo / Sonar / Qodana / Snyk / CodeQL configuration
- Build plugin additions that affect CI behavior
- Quality gate threshold changes

Such changes must live on their own branch (e.g., `feature/code-quality-stack`)
and be reviewed as a standalone PR before merging into `v0.9.0-beta-dev`.

**Reason:** Infrastructure changes affect every downstream branch and CI run.
They must be intentional, not accidental side effects of a feature branch.

### Current long-lived branches

| Branch | Purpose | Merge target |
|---|---|---|
| `v0.9.0-beta-dev` | Active development | `main` (on release) |
| `feature/retrieval-pipeline` | Retrieval + context assembly modernization | `v0.9.0-beta-dev` |
| `feature/code-quality-stack` | CI/quality tooling (JaCoCo, Sonar, Qodana, CodeQL, Snyk) | `v0.9.0-beta-dev` (after review) |

---

## Project Identity

Talos is a **local-first CLI workspace assistant** and execution harness for
bounded local workspace work.

Repository identity:

- Product name: Talos
- Repository name: `talos-cli`
- GitHub repository: `ai21z/talos-cli`
- Public description: "Local-first CLI workspace assistant with retrieval,
approval-gated file operations, traces, context handling, and
verification-oriented outcomes."

Talos currently focuses on:

- workspace inspection through local tools
- local context retrieval and context packing
- approval-gated file operations
- bounded command execution through approved profiles
- local traces, prompt/debug evidence, and outcome records
- context handling across turns
- verification-oriented completion reporting

Talos is **not**:

- a foundation model
- a cloud-agent clone
- a swarm or multi-agent platform
- a background autonomous daemon
- a general browser/email/calendar automation product
- just a RAG CLI

Do not weaken explicit user control, approval gates, workspace boundaries,
traceability, or verification-oriented outcomes.

---

## Coding Conventions

- Java 21, Gradle 8.14, Kotlin DSL (`build.gradle.kts`)
- JUnit 5 for tests
- Framework-neutral core; frameworks are adapters, not the architecture
- Local-first, privacy-first
- Keep diffs tight; avoid speculative abstractions
- Preserve existing behavior before deleting legacy code

---

## Architecture Notes

### Key packages

- `dev.talos.core.retrieval` — retrieval pipeline, stages, traces
- `dev.talos.core.rerank` — reranker interface and implementations
- `dev.talos.core.context` — context packing, token budgets
- `dev.talos.core.ingest` — parsing, chunking
- `dev.talos.core.index` — Lucene indexing
- `dev.talos.core.embed` — embeddings client
- `dev.talos.core.cache` — SQLite caching
- `dev.talos.core.llm` — LLM client abstraction
- `dev.talos.tools` — tool registry and local workspace tool implementations
- `dev.talos.api` — programmatic API seam (`TalosKnowledgeEngine`)
- `dev.talos.cli` — CLI commands and REPL

### Retrieval pipeline

`RagService.prepare()` routes through `RetrievalPipeline`:
BM25 → KNN → RRF Fusion → Rerank → Dedup

Stages are stateless (`StageOutput` record). Traces are captured per-stage.

---

## What NOT to do

- Do not rewrite the core around LangChain4j or Spring AI
- Do not merge broad long-term memory into Talos core without a scoped design
- Do not add MCP server logic until the local tool and retrieval seams are stable
- Do not perform broad package reshuffles without a concrete reason
- Do not delete legacy code before proving parity with new code
- Do not push CI/quality tooling changes into dev or main without review
87 changes: 87 additions & 0 deletions .github/workflows/beta-dev-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
name: Beta Dev CI

on:
pull_request:
types: [opened, reopened, synchronize, ready_for_review]
branches: [v0.9.0-beta-dev]
push:
branches:
- v0.9.0-beta-dev

permissions:
contents: read

env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"

concurrency:
group: beta-dev-ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
gradle-check:
name: Gradle check (Java 21)
runs-on: windows-2025-vs2026
timeout-minutes: 45

steps:
- name: Checkout
uses: actions/checkout@v6

- name: Set up JDK 21
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: "21"

- name: Run unit tests
run: .\gradlew.bat test --no-daemon

- name: Run E2E tests
run: .\gradlew.bat e2eTest --no-daemon

- name: Run coverage and artifact gates
run: .\gradlew.bat jacocoTestReport checkGeneratedArtifactCanaries jacocoTestCoverageVerification --no-daemon

- name: Run final Gradle check
run: .\gradlew.bat check --no-daemon

- name: Report test result failures
if: failure()
shell: pwsh
run: |
function Escape-Annotation([string] $Value) {
return $Value.Replace('%', '%25').Replace("`r", '%0D').Replace("`n", '%0A')
}

$found = $false
$files = Get-ChildItem -Path build/test-results -Filter *.xml -Recurse -ErrorAction SilentlyContinue
foreach ($file in $files) {
try {
[xml] $xml = Get-Content -LiteralPath $file.FullName -Raw
} catch {
$path = Escape-Annotation $file.FullName
$message = Escape-Annotation $_.Exception.Message
Write-Output "::warning file=$path::Could not parse test result XML: $message"
continue
}

foreach ($case in $xml.testsuite.testcase) {
$nodes = @()
if ($case.failure) { $nodes += $case.failure }
if ($case.error) { $nodes += $case.error }
foreach ($node in $nodes) {
$found = $true
$message = if ($node.message) { $node.message } elseif ($node.InnerText) { $node.InnerText.Trim() } else { 'Test failed' }
$title = "$($case.classname).$($case.name)"
$path = Escape-Annotation $file.FullName
$safeTitle = Escape-Annotation $title
$safeMessage = Escape-Annotation $message
Write-Output "::error file=$path,title=$safeTitle::$safeMessage"
}
}
}

if (-not $found) {
Write-Output "No JUnit XML failures found under build/test-results."
}
25 changes: 22 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
*.hprof
hs_err_pid*
replay_pid*
/reports/

# Qodana (JetBrains code quality) — keep config, ignore outputs
.qodana/
Expand Down Expand Up @@ -67,6 +68,11 @@ test_performance.java
validation_commands.txt
test-remote-config.yaml

# ---- Scratch/throwaway test files in root
/test_*.java
/test_*.class
*.class

# ---- Temporary & editor files
*.tmp
*.swp
Expand All @@ -75,14 +81,27 @@ test-remote-config.yaml
*.orig
*.rej

# ---- Local test data (uncomment if you create these)
# /local/
# ---- Local test data
/local/
# /corpus/
# /sandbox/
# .loqj/ # if you ever generate a per-repo runtime dir (by default it lives under your HOME)
# .talos/ # if you ever generate a per-repo runtime dir (by default it lives under your HOME)

# ---- Project docs
# Architecture and cleanup docs under docs/new-architecture are tracked.
V1_IMPLEMENTATION_BRIDGE.md

# ---- Local-only directories and files
/playground/
/.github/
.claude/

# ---- Security: common secret patterns (use explicit names; avoid *.yaml wildcards)
*.env
*.env.*
*.secret.*
*.private.*

# Tracked fake e2e fixtures; these are not real secrets.
!src/e2eTest/resources/fixtures/listing-privacy/.env
!src/e2eTest/resources/fixtures/protected-path/.env
Loading
Loading