Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
c380e49
feat(i18n): complete six-language application and documentation
csk917work-dev Oct 25, 2026
92ed8f2
test(windows): identify launcher fixture by executable path
csk917work-dev Oct 25, 2026
7af06f1
Merge pull request #52 from cskwork/feat/gh-15-complete-locales
cskwork Oct 25, 2026
b949418
fix(agent): honor proof and tool contracts
cskwork Oct 17, 2026
576ca8a
fix(runtime): join log writer before DB close
cskwork Oct 17, 2026
f204750
fix(chat): preserve inspector during initial load
cskwork Oct 17, 2026
6a391b3
fix(agent): preload bounded trigger evidence
cskwork Oct 17, 2026
a84fea3
fix(runtime): isolate proof fixtures and synchronize terminal results
csk917work-dev Oct 24, 2026
0d636d7
fix: close shutdown and verification gaps before integration
csk917work-dev Oct 25, 2026
aad0d92
fix(agent): preserve terminal receipts and model context limits
csk917work-dev Oct 25, 2026
6ca962d
fix(scope): match domain rules on label boundaries and gate agent sco…
csk917work-dev Oct 24, 2026
fcbed89
fix(web): say global asset rules filter recording, not network calls …
csk917work-dev Oct 24, 2026
471fe69
fix(web): bump next and zod past audited advisories; use platform pas…
csk917work-dev Oct 25, 2026
77f97fd
fix(server): wait for scheduler, archive and log writers before store…
csk917work-dev Oct 25, 2026
68054f6
fix(server): drain task runtimes and goal bootstrap before stores clo…
csk917work-dev Oct 25, 2026
e25c580
fix(server): join compaction, LLM-health and other detached writers o…
csk917work-dev Oct 25, 2026
5b00b6b
chore(i18n): complete six-language strings for #50
csk917work-dev Oct 25, 2026
d2e84f2
fix(web): keep dev's patched next and zod versions (#50)
csk917work-dev Oct 25, 2026
a06ffb8
Merge pull request #54 from cskwork/fix/gh-50-scope-enforcement
cskwork Oct 25, 2026
5a8e2c1
test(chat): attribute compaction focus to the current summary request
csk917work-dev Oct 25, 2026
935915b
Merge pull request #55 from cskwork/fix/gh-53-verification-gates
cskwork Oct 25, 2026
80b135d
test(chat): wait for cancelled edit dialog before retry
csk917work-dev Oct 25, 2026
71a487f
Merge pull request #56 from cskwork/fix/gh-53-retry-dialog
cskwork Oct 25, 2026
7117020
feat(llm): add guarded OpenCode SDK bridge
csk917work-dev Oct 25, 2026
29b6add
fix(llm): honor SDK connection-test output limits
csk917work-dev Oct 25, 2026
3fb3bca
docs: synchronize PR40 evidence and SDK provenance across locales
csk917work-dev Oct 25, 2026
4144f14
docs: clarify tested OpenCode runtime platforms
csk917work-dev Oct 25, 2026
b9781b2
test(e2e): capture provider attribution diagnostics
csk917work-dev Oct 25, 2026
a327a32
docs: record all-issue and PR continuation handoff
csk917work-dev Oct 25, 2026
c9d9a9f
Merge pull request #58 from cskwork/fix/handoff-20261026
cskwork Oct 26, 2026
3509fb1
chore: checkpoint unfinished PR40 integration for handoff
csk917work-dev Oct 26, 2026
0214692
docs: make all active handoff work recoverable from GitHub
csk917work-dev Oct 26, 2026
d5ce498
Merge pull request #59 from cskwork/fix/handoff-portable-20261026
cskwork Oct 26, 2026
1c5d07f
Merge dev into fix/pr40-resume preserving both shutdown contracts
cskwork Oct 26, 2026
be2332b
Merge latest dev handoff recovery documentation
cskwork Oct 26, 2026
61101ad
fix(locale): complete Japanese and Spanish contract metadata
cskwork Oct 26, 2026
5c538a8
fix: coordinate database test suites and retry reporter creation
cskwork Oct 26, 2026
e0ad6a5
test: drain adapter E2E server before closing its database
cskwork Oct 26, 2026
f6d8a29
Merge current OpenCode SDK candidate into latest dev baseline
cskwork Oct 26, 2026
11def12
fix(sdk): patch provider utilities and deduplicate Effect
cskwork Oct 26, 2026
7982c2a
fix(release): include OpenCode SDK bridge in archives
cskwork Oct 26, 2026
675ca4a
fix(i18n): complete localized planner and worker contracts
cskwork Oct 26, 2026
c6ea79c
Merge pull request #60 from cskwork/fix/pr40-resume
cskwork Oct 28, 2026
9596ea2
Merge remote-tracking branch 'origin/dev' into feat/gh-49-opencode-sdk
cskwork Oct 28, 2026
3d5bbec
Merge pull request #57 from cskwork/feat/gh-49-opencode-sdk
cskwork Oct 28, 2026
dda018d
fix(sdk): isolate legacy runtime from system opencode config
cskwork Oct 28, 2026
2f071c3
Merge pull request #66 from cskwork/fix/legacy-sdk-system-config-isol…
cskwork Oct 28, 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
  •  
  •  
  •  
20 changes: 19 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,12 @@ jobs:
working-directory: adapters/agent
- run: npm test && npm run check
working-directory: adapters/agent
- uses: oven-sh/setup-bun@v2
with:
bun-version: "1.3.14"
- name: Verify OpenCode SDK adapter
working-directory: adapters/opencode-sdk
run: bun install --frozen-lockfile --ignore-scripts && bun run check && bun test --timeout 30000
- name: Test adapter against real backend
env:
SCOPEWEAVER_ADAPTER_E2E: "1"
Expand Down Expand Up @@ -77,6 +83,8 @@ jobs:
cache-dependency-path: |
web/package-lock.json
e2e/package-lock.json
- name: Test compaction request attribution
run: node --test e2e/chat-summary-requests.test.mjs
- uses: actions/setup-go@v7
with:
go-version-file: go.mod
Expand Down Expand Up @@ -106,7 +114,7 @@ jobs:
ARTEX_TEST_DSN: postgres://scopeweaver_test:test_only_password@localhost:5432/scopeweaver_test_chat_browser?sslmode=disable
SCOPEWEAVER_CHAT_E2E: "1"
CHAT_E2E_SUITE: standard
run: go test ./server -run '^TestChatControlsE2E$' -count=1 -timeout 12m -v
run: go test ./server -run '^TestChatControlsE2E$' -count=1 -timeout 21m -v
- if: always()
uses: actions/upload-artifact@v7
with:
Expand Down Expand Up @@ -143,6 +151,8 @@ jobs:
with:
go-version-file: go.mod
cache: true
- name: Test native six-language Windows launcher
run: node e2e/windows-launcher.mjs
- uses: actions/setup-python@v7
with:
python-version: "3.12"
Expand Down Expand Up @@ -175,10 +185,15 @@ jobs:
with:
go-version-file: go.mod
cache: true
- uses: actions/setup-node@v7
with:
node-version: "22"
- name: Check shell syntax
run: |
for script in *.sh; do bash -n "$script"; done
sh -n start.sh
- name: Test six-language script messages and isolated launchers
run: node e2e/script-locales.mjs
- name: Test local installer with isolated fixtures
run: bash e2e/install-local.sh
- name: Test Compose credential bootstrap
Expand All @@ -187,6 +202,9 @@ jobs:
run: |
bash e2e/package-notices.sh
python3 -m unittest discover -s e2e -p 'test_release_notices.py' -v
- name: Test patched Norma SDK
working-directory: third_party/norma
run: go test ./... -count=1
- name: Run all Go packages with separate disposable databases
env:
PGHOST: localhost
Expand Down
12 changes: 12 additions & 0 deletions CHANGELOG.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,18 @@

## [Unreleased]

### 테스트 범위와 자산 규칙 (#50)

#### 수정

- `fuzzy_domain`을 도메인 레이블 단위로 일치시킵니다. 차단은 위치와 관계없이 레이블을 찾고(`.gov`는 `x.gov`, `x.gov.uk`와 일치하지만 `a.government.com`과는 불일치), 허용은 해당 도메인과 하위 도메인에만 일치합니다(`juice-shop.internal`은 `a.juice-shop.internal`을 허용하지만 `juice-shop.internal2`, `juice-shop.internal.attacker.com`은 거부). 기존 규칙으로 이전에 통과했던 자산 기록이 거부될 수 있습니다.
- 에이전트의 `add_task_scope`와 worker의 자동 범위 추가도 현재 자산 규칙을 통과해야 합니다. 규칙을 읽지 못하면 쓰기를 거부하거나 추가를 건너뜁니다(fail closed). UI의 수동 범위 편집과 기존 범위 행은 유지하며 소급 변경이나 삭제는 하지 않습니다.

#### 변경

- 프롬프트·UI·문서의 범위 설명을 바로잡았습니다. 회사/작업 범위는 프롬프트 지침과 자산 기록·커버리지 필터이며 네트워크 경계가 아닙니다. 자산 규칙은 기록을 제한하며 네트워크 호출은 막지 않습니다. 작업 규칙은 작업 안에서만 적용되고 채팅에는 전역 차단 규칙만 적용됩니다. 도구 호출을 막으려면 가로채기 규칙이 필요하며 기본 제공 파괴적 명령 규칙 외에는 기본 설정된 규칙이 없습니다. 실제 네트워크 경계에는 ScopeWeaver 외부의 송신 제어가 필요합니다.
- 아래에 보존한 원본 `task_scope` 기록의 권한 관련 설명을 명확히 합니다. 도구 호출이나 네트워크 접근을 강제 제한한다는 뜻이 아닙니다. 범위는 프롬프트 지침과 자산 조회 필터이며 커버리지는 이를 계산의 분모로 사용합니다.

### 차단

#### 추가
Expand Down
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,18 @@ This is the translated upstream ARTEX history from baseline `160fe13`, preservin

## [Unreleased]

### Test scope and asset rules (#50)

#### Fixed

- `fuzzy_domain` now matches whole domain labels. Blocks match labels anywhere (`.gov` matches `x.gov` and `x.gov.uk`, not `a.government.com`); allows are right-anchored to the domain or its subdomains (`juice-shop.internal` allows `a.juice-shop.internal`, not `juice-shop.internal2` or `juice-shop.internal.attacker.com`). Existing rules may reject asset inserts that previously passed.
- Agent `add_task_scope` and worker automatic scope additions now pass the current asset gate and fail closed on rule-read errors (reject the write or skip the addition). Manual UI scope edits and existing scope rows are unchanged; no backfill or deletion.

#### Changed

- Clarified scope wording in prompts, UI and documentation: company/task scope is prompt guidance plus an asset-recording and coverage filter, not a network boundary. Asset rules gate recording, not network calls; task rules apply only inside a task, while chat uses global block rules only. Blocking tool calls requires Interception rules (none configured by default except built-in destructive-command rules); a real network boundary needs egress control outside ScopeWeaver.
- Clarification of the preserved upstream `task_scope` entry below: its claim that scope defines authorization describes no enforced tool-call or network boundary. Scope supplies prompt guidance and asset-query filtering; coverage uses it as a metric denominator.

### Interception

#### Added
Expand Down
101 changes: 101 additions & 0 deletions CONTRIBUTING.es.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
# Contribuir a ScopeWeaver

[English](CONTRIBUTING.md) · [한국어](CONTRIBUTING.ko.md) · [简体中文](CONTRIBUTING.zh-Hans.md) · [繁體中文](CONTRIBUTING.zh-Hant.md) · [日本語](CONTRIBUTING.ja.md) · Español

Las contribuciones son bienvenidas: correcciones, adaptaciones de ARTEX original, actualizaciones de dependencias, documentación
y pruebas.

## Antes de empezar

- Lee las [restricciones de uso](README.es.md#licencia-y-exención-de-responsabilidad). Las contribuciones no deben añadir
funciones dirigidas a sistemas reales en línea ni debilitar esas restricciones.
- Para cambios grandes, abre primero una incidencia para acordar el enfoque.
- Mantén cada solicitud de cambio centrada en un tema. Las pequeñas se revisan más rápido.

## Requisitos de una solicitud de cambio

- **Idiomas publicados y documentación completos.** El texto visible y las guías mantenidas de usuarios/colaboradores necesitan inglés, coreano, chino simplificado (`zh-Hans`), chino tradicional (`zh-Hant`), japonés (`ja`) y español (`es`):
- mensajes del servidor: conserva la compatibilidad de `locale.Register(key, en, ko)` e incluye los idiomas adicionales mediante `locale.RegisterAll` y los recursos por idioma de `locale/`
- interfaz web: todas las claves inglesas actuales en tablas EN/KO y `messages/{zh-hans,zh-hant,ja,es}.ts`
- documentación: `README.md`, `CONTRIBUTING.md` y guías mantenidas con ediciones correspondientes `ko`, `zh-Hans`, `zh-Hant`, `ja` y `es`; conserva las entradas ejecutables de habilidades en inglés
- **Pruebas del comportamiento cambiado.** Añade o actualiza pruebas que fallarían sin tu cambio. No
desactives, omitas ni debilites comprobaciones existentes para que pasen.
- **Solo bases de datos desechables.** Las pruebas que escriban en PostgreSQL deben usar una base nueva llamada
`scopeweaver_test_*` (o `scopeweaver_adapter_*` para E2E del adaptador de agentes).
- **Atribuye el trabajo original.** Para adaptaciones de ARTEX, añade `Upstream-commit: mhtsec/ARTEX@<sha>` y una
línea `Co-authored-by:` del autor original, y actualiza `docs/PROVENANCE.md` y
`docs/ko/PROVENANCE.md`.
- **Licencia.** Las contribuciones se aceptan bajo la licencia [AGPL-3.0](LICENSE) del repositorio.

## Añadir o cambiar un idioma

Sigue la [guía de idiomas](docs/es/i18n.md): actualiza `locale/definitions.json` compartido
(ID canónico, nombre nativo, asignación Intl y alias), vectores de coincidencia, catálogos completos de frontend/backend,
asignación date-fns, pruebas específicas y prueba básica de navegador. `zh`, `zh-CN` y `zh-SG` corresponden a
`zh-Hans`; `zh-TW`, `zh-HK` y `zh-MO` a `zh-Hant`. Una escritura explícita prevalece sobre una región contradictoria.
Mantén el inglés como origen de claves, significado, marcadores y etiquetas enriquecidas. La alternativa inglesa/de clave del backend
es una protección de compatibilidad, no prueba de que un idioma esté listo para publicar. No traduzcas
contenido de usuarios, borradores, pruebas sin procesar, identificadores ni datos históricos. Revisa traducciones y registra
dudas; no afirmes aprobación de un hablante nativo sin pruebas. Mantén completas las guías de funciones en los seis idiomas, incluido el par inglés/coreano. Mantén sincronizados también la lista de ID canónicos del adaptador independiente y los auxiliares de mensajes shell/batch de la raíz. Ejecuta `node e2e/script-locales.mjs` y el caso nativo de Windows `node e2e/windows-launcher.mjs`/CI de Windows; los adaptadores empaquetados no deben depender durante la ejecución del JSON de la raíz del repositorio.

## Comprobaciones que ejecutar

Coinciden con los trabajos CI de [.github/workflows/ci.yml](.github/workflows/ci.yml):

```bash
# patched Norma SDK (a separate Go module)
(cd third_party/norma && go test ./... -count=1)


# backend database-backed suites (db, server, agent): against a throwaway database
# that is created and dropped for you. They require ARTEX_TEST_DSN and skip (never
# fall back to the live DSN) without it — see docs/VERIFICATION.md.
make test-db

# backend: every Go package (set ARTEX_TEST_DSN to a disposable scopeweaver_test_* database)
ARTEX_TEST_DSN=postgres://sw_user_test@/scopeweaver_test_1?host=/tmp&sslmode=disable go test ./... -count=1

# frontend
cd web && npm ci && npm test && npm run build:static

# agent adapter (and its real-backend E2E test against a scopeweaver_adapter_* database)
cd adapters/agent && npm ci && npm test && npm run check
SCOPEWEAVER_ADAPTER_E2E=1 go test ./server -run '^TestAgentAdapterE2E$' -count=1
```

El flujo `e2e` también ejecuta una prueba básica esencial de navegador contra el binario real en cada PR y
tras integrar. Para ejecutarla localmente contra un servidor activo y una base nueva `scopeweaver_test_*`
(requiere `psql` y el binario con interfaz integrada compilado desde la misma copia de trabajo):

```bash
cd e2e && npm ci && npx playwright install chromium
SCOPEWEAVER_URL=http://127.0.0.1:8787 ARTEX_PG_DSN=postgres://.../scopeweaver_test_e2e \
SCOPEWEAVER_BINARY=/absolute/path/to/scopeweaver npm run smoke
```

Tras inicializar la contraseña con las comprobaciones básicas existentes, la regresión del panel inicia su propia
copia aislada del binario en un puerto loopback libre con la misma BD de prueba. Comprueba
pilas de tokens Anterior/Nuevo en inglés/coreano y filtros de perfiles; detiene el servidor y elimina los datos
de prueba. Las pruebas del panel y el registro del servidor hijo se guardan en `e2e/e2e-results/dashboard-token-chart/`.

La prueba básica esencial cubre los seis idiomas: restauración de preferencias, borradores de configuración/acceso/tareas/ajustes/chat,
idioma de primera API, reconexión SSE/conservación de filtros y formato de números renderizado.

Describe en la PR qué ejecutaste y qué no pudiste ejecutar.

## Revisión e integración

Crea cada rama `feat/*` o `fix/*` desde el último `dev` y abre su PR hacia `dev`.
Tras integrar, espera todas las comprobaciones y E2E en ese commit exacto de `dev`; después abre una PR de promoción
de `dev` a `main` de este repositorio. Conserva el historial de promoción con un commit de fusión para que `dev`
siga siendo ancestro de `main`. Verifica otra vez las comprobaciones tras la promoción; empieza el trabajo posterior
desde `dev`. La comprobación `branch-policy` rechaza otras rutas de PR.

1. Todas las comprobaciones obligatorias deben pasar en el candidato actual: `branch-policy`, `frontend`,
`agent-adapter`, `backend`, `windows`, `chat-browser` y `smoke`. Tanto `dev` como `main` ejecutan
CI y E2E tras integrar. Para nuevos colaboradores, el mantenedor aprueba la ejecución CI.
2. La PR se revisa contra sus diferencias por corrección, seguridad, traducciones completas y paridad documental en seis idiomas.
3. **El mantenedor realiza una revisión humana final de cada PR antes de integrarla.** No se integra nada
sin ella.

El mantenedor publica versiones tras una prueba completa de extremo a extremo antes y después de integrar.
Loading
Loading