Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
8057a8a
docs(doctoring): OpenCode exact-head dispatch audit (2026-09-17)
seonghobae Sep 17, 2026
513302a
test(strix): bind evidence helper to trusted source root
seonghobae Sep 19, 2026
c08b13d
fix(strix): resolve evidence binder from trusted source
seonghobae Sep 19, 2026
ca7e1e7
test(strix): materialize trusted binder fixtures
seonghobae Sep 19, 2026
db1fd61
fix(strix): restore complete verified fixture tree
seonghobae Sep 19, 2026
fb9c0e2
test(strix): require consumer-free trusted binder fixture
seonghobae Sep 19, 2026
78b33a8
repair(strix): restore executable harness after binary blob corruption
seonghobae Sep 19, 2026
191bd63
test(strix): require binder-free consumer fixture
seonghobae Sep 19, 2026
ef1a866
test(strix): separate trusted gate from consumer root
seonghobae Sep 19, 2026
abc9a7d
docs(strix): bind consumer isolation evidence to exact commits
seonghobae Sep 19, 2026
00082e8
docs(strix): describe separated trusted runtime fixture
seonghobae Sep 19, 2026
782d67b
test(strix): retain canonical gate source under scan
seonghobae Sep 20, 2026
a8d6261
test(strix): red specialized fixture owner boundary
seonghobae Sep 20, 2026
bbe225d
test(strix): materialize specialized fixtures' trusted runtime outsid…
Sep 21, 2026
1794626
test(strix): pin trusted evidence-binder path
seonghobae Sep 21, 2026
361a9eb
merge: adopt current CI owner and repair CodeQL URL oracle
seonghobae Sep 26, 2026
1fd22f4
test(strix): require Job Analysis authority context
seonghobae Sep 26, 2026
808a8a7
fix(strix): include Job Analysis authority context
seonghobae Sep 26, 2026
b90d873
docs(strix): record Job Analysis authority context
seonghobae Sep 26, 2026
0ce27f0
merge(owner): restack doctoring evidence on current security stack
seonghobae Sep 26, 2026
68544b4
merge(main): keep Job Analysis authority context on current main
seonghobae Sep 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions CHANGELOG.d/20260920-strix-trusted-binder-runtime-fixture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
### Strix keeps trusted evidence binding outside consumer workspaces

- The Strix gate resolves its evidence binder beside the trusted gate source.
The executable core harness now materializes that trusted runtime under a
separate source directory, passes a binder-free consumer workspace through
`STRIX_REPO_ROOT`, and invokes the trusted gate by its absolute path.
- OpenCode coverage assertions follow the consolidated
`validate-pr-metadata` owner instead of the removed
`coverage-source-tree` job and failure-report step.
- The commercial-readiness receipt contract now compares the complete parsed
harden-runner endpoint set instead of treating an expected hostname as a URL
substring. This closes the exact CodeQL
`py/incomplete-url-substring-sanitization` finding without suppressing it or
widening egress.
- The branch adopts the current central dependency owner, including the
explicit AnyIO 4.14.2 source-to-hash pin required by the Python security
gate.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@

- The queue-health workflow contract now pins both workflow-level and collector-job permissions to exactly `contents: read` plus `actions: read`, rejecting scalar `read-all`/`write-all`, quoting/spacing variants, inline maps, and unexpected write scopes.

### Strix supplies bounded Job Analysis authority context from the trusted base

- Orgmetra #63 changes `packages/hris-kernel/src/orgmetra_hris_kernel/job_analysis.py`, but the Strix scan workspace previously omitted the unchanged authorization, HTTP, snapshot, and persistence collaborators that establish its resource-ownership boundary. That incomplete context produced a false HIGH IDOR finding even though the product reconstructs owner scope and authorizes resource fields before port access. A source-first executable fixture now requires the changed PR-head module, exactly five unchanged Job Analysis authority files from the authenticated trusted base, and exclusion of an unrelated administration file. RED `1fd22f4e` failed because `auth.py` was absent; the gate now recognizes only the normalized Job Analysis trigger and adds the five fixed context paths through the existing trusted-base materialization boundary. No consumer source, provider/model policy, severity gate, timeout, or write authority changes.

### OpenCode coverage image materializes every Dockerfile lock input

- Required OpenCode run `35370902053` for `.github#2266@12621f75e` failed before executing PR code because its trusted Dockerfile copied `requirements-noema-document-ci-hashes.txt` while the isolated build context contained only the OpenCode lockfile. The coverage owner now validates both lockfiles as regular non-symlink files and copies both into the trusted build context before the networked image build. `tests/test_opencode_agent_contract.py` pins the complete input boundary. Hosted exact-head acceptance remains Proposed until the new run reaches the image-build and coverage steps.
Expand Down
41 changes: 41 additions & 0 deletions docs/doctoring/opencode-exact-head-dispatch-audit-20260917.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Doctoring record: OpenCode exact-head dispatch audit (2026-09-17)

- **Date:** 2026-09-17
- **Subject:** Snapshot of an exact-head OpenCode Review Dispatch audit over open
`ContextualWisdomLab/.github` pull requests after the coalesce gap, captured in
`/tmp/docs-review-dispatch.json`.
- **Decision record:** none — audit trail only; no workflow or scheduler change.
- **Source artifact:** `/tmp/docs-review-dispatch.json`
(`generated_at=2026-09-17T21:19:25.528137+00:00`,
`event_type=opencode-review`, `coalesce_flag_touched=false`).

## Counts

| Outcome | Count |
|---|---|
| Dispatched | **2** |
| Skipped | **11** |
| Errors | **0** |
| Unconfirmed | 0 |
| Total PRs audited | 13 |

## Redispatched (exact-head missing)

| PR | Head SHA | Dispatch run | Dispatched at (UTC) |
|---|---|---|---|
| ContextualWisdomLab/.github#2215 | `ab04bfdb3cbd69cc7ef90dc6bb2104b88550b89c` | [35275996814](https://github.com/ContextualWisdomLab/.github/actions/runs/35275996814) | 2026-09-17T21:19:14Z |
| ContextualWisdomLab/.github#2226 | `ff16764ac374b23be2d8131a5d03c89d62cd0bc7` | [35275997215](https://github.com/ContextualWisdomLab/.github/actions/runs/35275997215) | 2026-09-17T21:19:17Z |

## Skipped (exact-head dispatch already exists)

All eleven skips used reason `exact-head dispatch already exists`:

`#2249`, `#2250`, `#2251`, `#2252`, `#2253`, `#2254`, `#2166`, `#2170`,
`#2174`, `#2184`, `#2205`.

## Reading

Exact-head deduplication held for the majority of the open set: eleven PRs
already had a queued or pending OpenCode Review Dispatch bound to their live
head SHA. Only `#2215` and `#2226` lacked that binding and were redispatched.
Zero errors and zero unconfirmed results — the audit completed cleanly.
67 changes: 67 additions & 0 deletions docs/product-technical-gap-baseline.md
Original file line number Diff line number Diff line change
Expand Up @@ -3438,6 +3438,73 @@ alone -- it is a documented multi-PR hot-file collision zone. Contract:

**Evidence / remaining condition.** The standalone fixture mechanism was executed locally against Python stdlib and produced one canonical request followed by terminal HTTP 302 for every hostile target. This is mechanism evidence, not repository acceptance. Final authority requires focused/full exact-tree GREEN, fresh exact-head Security/SAST/Python Security/CodeQL/runtime-quality checks, no unresolved actionable review, ordinary protected-main integration, and downstream consumer validation. No scanner suppression, redirect allowlist widening, provider fallback, workflow gate weakening, or credential-boundary change is included.

## 2026-09-20 Strix trusted-binder consumer-isolation gap

**Status:** Proposed on `ContextualWisdomLab/.github#2291`; exact-head hosted
checks, independent review, and protected-main integration remain required.

**Context Map / owner.** The central `.github` CI bounded context owns
`strix_quick_gate.sh`, its evidence binder, and the executable gate harness.
Consumer repositories supply only the scan workspace through
`STRIX_REPO_ROOT`; they do not copy or own the binder.

**Gap / root cause.** The production gate incorrectly resolved the trusted
binder from the consumer root. The first repair correctly moved that lookup to
`SCRIPT_DIR`, but its test harness copied only the gate and model helper into
the isolated fixture. The current PR head therefore still reproduced the same
missing-binder exit in the `success` scenario. Three assertions in that harness
also described the removed standalone `coverage-source-tree` job after its
responsibility moved into `validate-pr-metadata`.

**Action / evidence.** The production gate resolves
`strix_evidence_binding.py` beside its trusted source. RED `191bd630`
requires the generic executable consumer fixture to contain no binder. GREEN
`ef1a8667` materializes the gate, model helper, and binder under a separate
`trusted-source/scripts/ci` directory, passes only the binder-free consumer
workspace through `STRIX_REPO_ROOT`, and invokes the trusted gate by its
absolute path. This makes the core executable fixture reproduce the production
owner boundary instead of proving a co-located copy. The full exact-tree Strix
harness and hosted checks remain the release authority; no provider, model,
timeout, severity, or consumer ownership boundary changes.

**2026-09-26 exact-head RCA / owner integration.** Exact Python-security job
`107750961662` on head `1794626af3473ef23b9c2e678c3f06fd6c11636f`
found AnyIO 4.14.0's CVE-2026-63374, CVE-2026-64847, and CVE-2026-63349 in
`requirements-strix-ci-hashes.txt`; this branch had not adopted the central
source-to-hash AnyIO 4.14.2 repair from `ContextualWisdomLab/.github#2385`.
Exact CodeQL dispatch run `36204821293`, Python job `108319933572`, separately
produced one Medium+ SARIF result:
`py/incomplete-url-substring-sanitization` at
`tests/test_organization_commercial_readiness_loop_receipt_contract.py:60`.
The receipt test parsed the complete YAML endpoint block but then expressed the
expected receiver hostname through a subset/membership-style assertion that
CodeQL correctly rejects on URL-security surfaces. The ordinary two-parent
owner integration adopts #2385's AnyIO contract; the test now compares the
complete seven-entry endpoint set exactly. This strengthens the egress oracle:
an unexpected endpoint fails rather than being tolerated. No CodeQL query,
severity, SARIF gate, dependency audit, or endpoint allowlist is suppressed or
widened. Fresh exact-head hosted Python Security and CodeQL remain mandatory.

**2026-09-27 Job Analysis bounded-context repair.** Orgmetra #63 exact head
`d88800a5ca3ca15df332e8def5e25064c46e4005` changes the HRIS-kernel Job
Analysis aggregate module, while the trusted scan workspace previously omitted
the unchanged product-owned authority context that explains its ownership
checks. Strix consequently reported a HIGH IDOR finding against an incomplete
workspace even though the Job Analysis API reconstructs the canonical owner and
authorizes resource fields before snapshot or PostgreSQL port access. Source-
first RED `1fd22f4e1e86d0ebfe5dab932697e95593c9ad10` adds an executable
pull-request-target fixture whose fake scanner refuses to run unless the changed
PR-head `job_analysis.py` is accompanied by exactly the five fixed trusted-base
collaborators (`auth.py`, `authorization.py`, `http.py`, `postgres.py`, and
`snapshot.py`); it also proves an unrelated administration module is excluded.
The minimal GREEN recognizes only that normalized trigger and emits those five
paths through the existing trusted-base context materializer. This is a bounded
CI-context repair, not a transfer of product domain truth: no Orgmetra source,
authorization order, persistence boundary, model/provider policy, severity,
timeout, or write capability changes. Exact-head hosted Strix acceptance,
independent review, ordinary protected-main integration, and a fresh Orgmetra
#63 consumer run remain mandatory before the false-positive gap is complete.

## 2026-09-27 exact release distribution/scope evidence coverage

**Status:** Proposed on `ContextualWisdomLab/.github#2400`; the current
Expand Down
14 changes: 14 additions & 0 deletions scripts/ci/strix_quick_gate.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1384,6 +1384,7 @@ pull_request_scope_context_files() {
local needs_backend_app_python=0
local needs_contextual_orchestrator_python=0
local needs_frontend_email_api_context=0
local needs_orgmetra_job_analysis_authority_context=0
local needs_deployment_context=0
local changed_file normalized_changed_file
for changed_file in "$@"; do
Expand All @@ -1400,6 +1401,9 @@ pull_request_scope_context_files() {
contextual_orchestrator/*.py)
needs_contextual_orchestrator_python=1
;;
packages/hris-kernel/src/orgmetra_hris_kernel/job_analysis.py)
needs_orgmetra_job_analysis_authority_context=1
;;
# The app shell, email components, threading URL builder, and API client can
# shape frontend email retrieval flows; include backend auth context with them.
frontend/src/components/EmailDetail.tsx | frontend/src/components/EmailList.tsx | frontend/src/app/page.tsx | frontend/src/lib/api-client.ts | frontend/src/lib/email-threading.ts)
Expand Down Expand Up @@ -1549,6 +1553,16 @@ backend/services/threading_service.py
EOF
fi

if [ "$needs_orgmetra_job_analysis_authority_context" -eq 1 ]; then
cat <<'EOF'
services/job-analysis-api/src/orgmetra_job_analysis_api/auth.py
services/job-analysis-api/src/orgmetra_job_analysis_api/authorization.py
services/job-analysis-api/src/orgmetra_job_analysis_api/http.py
services/job-analysis-api/src/orgmetra_job_analysis_api/postgres.py
services/job-analysis-api/src/orgmetra_job_analysis_api/snapshot.py
EOF
fi

if [ "$needs_deployment_context" -eq 1 ]; then
cat <<'EOF'
Dockerfile
Expand Down
Loading
Loading