| OQ-1 |
~~Project name~~ Resolved: assent (D-009); repo live (D-014). Domain: assent.dev taken (D-028). Path: Option A — register an owned domain (D-031). Exact domain string still TBD before rename. |
Phase 4 / before public freeze marketing |
naming.md; D-028/D-031 |
| OQ-2 |
~~Hosting: GitHub only, or GitLab mirror (dogfooding the GitLab adapter on our own repo)?~~ Resolved (D-105): defer mirror — GitHub canonical; optional read-only GitLab mirror is operator infra, not E9 blocker. Dual-primary rejected (drift risk). No mirror workflow in E9. |
— |
E9-S11 |
| OQ-3 |
~~Two parallel frontends?~~ Resolved by ADR-0002 v2: one YAML envelope, pluggable predicate backends |
— |
superseded; successor questions: OQ-11/OQ-12 |
| OQ-4 |
~~Ship gRPC (go-plugin) tier in v1?~~ Resolved (P2-E5): defer gRPC to post-v1; HTTP/exec + builtins only (Spike C, D-012, ADR-0004 Accepted) |
— |
adr-acceptance-review.md |
| OQ-5 |
~~Policy discovery: remote packs in v1?~~ Resolved (P2-E5): local .assent/ only in v1; remote packs designed-for (ADR-0010 Accepted, D-012) |
— |
adr-acceptance-review.md |
| OQ-6 |
~~E2E default in CI: kind vs testcontainer?~~ Resolved (P2-E5 / Spike B): testcontainer in CI; kind stays for local/demo (spike-b-e2e.md — boot p50 96 s vs 126 s, ~2.4 GB vs ~3.1 GB+node, 0 flakes) |
— |
ADR-0006 Accepted |
| OQ-7 |
~~GitHub mapping for challenge~~ Resolved (P2-E5): parity for the gate, not the device — required-conversation-resolution carries acknowledgement; REQUEST_CHANGES reserved for block (forge-dossier-github.md §3). Residual live checks → Phase 5 / E10 |
Phase 5 / E10 |
ADR-0005 Accepted |
| OQ-8 |
Decision replay/audit: JSON report artifact enough, or signed/attested decision record later? |
Phase 3 |
v1: artifact (Pins in report); attestations later epic |
| OQ-9 |
Version pinning for reproducibility (tool digest + policy SHA in report Pins)? |
Phase 3 |
must be in the report schema from day 1 |
| OQ-10 |
Monorepo support: multiple policy scopes per repo (path-scoped .assent/ dirs)? |
Phase 3 |
likely bindings-level path scoping |
| OQ-11 |
~~kyverno-json vs cel-go~~ Resolved (P2-E5): cel-go (ADR-0013 Accepted; Spike A) |
— |
adr-acceptance-review.md |
| OQ-12 |
~~assert authored syntax~~ Resolved (P2-E5): hybrid all/any/not trees with CEL leaves + per-leaf message (ADR-0013 Accepted) |
— |
adr-acceptance-review.md |
| OQ-13 |
~~Risk score conventions / effect escalation?~~ Resolved (P2-E5): points + per-binding thresholds only in v1; no score→effect escalation (ADR-0007 Accepted) |
— |
adr-acceptance-review.md |
| OQ-14 |
~~serve (webhook) in v1?~~ Resolved (P2-E5): v1.x / E12 post-Phase-4; architecture-ready from day 1 (ADR-0009 Accepted, D-012/D-017) |
— |
adr-acceptance-review.md |
| OQ-15 |
~~fold-to-rename opt-in?~~ Resolved (P2-E5): opt-in per class, default raw; rename never laxer than delete (ADR-0003 Accepted). Residual: similarity metric itself |
Phase 3 |
adr-acceptance-review.md |
| OQ-17 |
~~max_age default~~ Partially resolved (P2-E5): Spike C host defaults (principal/authz 1h, registry 24h, sensitive 15m; arming precondition). Schema freeze |
Phase 3 / contract fixture |
spike-c-provider.md; adr-acceptance-review.md |
| OQ-23 |
~~require-review forge mechanics~~ Leading answer (P1-E3-S02): Premium/Ultimate evidence chain = approval_rules → eligible_approvers[] → approval_state.rules[].approved_by[]; exclude MR-author and bot; never trust rule-level approved alone. Free tier: capability gap → no auto-merge for archetypes needing require-review |
P3-E1 schema slice (ApprovalEvidence per D-017) |
forge-dossier-gitlab.md §4 |
| OQ-24 |
~~Secure-setup adoption spike (topology)~~ Topology resolved (P2-E5 / P2-E4): GitLab Premium + external CI config + project access token + all-threads-resolved + merged-results + merge trains + approval rules + .assent/** human residual. North-star <1h still PENDING — operator timed clean-room run remains an open Phase-4 backlog item (do not claim confirmed). See backlog.md Phase-4 operator row. |
Phase 4 / north-star wording |
spike-secure-setup.md § North-star; timed run → HOLDS/AMEND |
| OQ-25 |
~~Success metric (roast P2-8)~~ Leading answer: independently defined routine denominator + blind holdout (labeler ≠ policy author) + ≤1% false-auto-merge budget; measure via scan/stats confusion matrix — see success-metric.md. Residual: operator adjudicates holdout labels (not invented in-tree). |
Phase 4 (adjudication) |
protocol frozen in P1-E2-S03; adjudication = operator task |
| OQ-18 |
~~GitHub arm-and-wait parity~~ Resolved (P2-E5): yes on paper with three deltas (dismissal, auto-merge revoke, merge queue) — forge-dossier-github.md §1 C8′/C11/C14, §3. Implement |
Phase 5 / E8–E10 |
ADR-0005 Accepted |
| OQ-19 |
~~Post-merge reconciliation: v1.x or out of scope?~~ In scope (D-017 B8): E12 service tier, implemented post-Phase-4 — commit↔DecisionRecord/PublicationReceipt correlation, durable safety event, optional revert MR (never direct revert) |
E12 (unlocked) |
adjudicated outcomes feed policy comparison; a human revert is evidence, not proof |
| OQ-20 |
~~Batch/sweep apply mode — or per-MR CI + serve enough?~~ In scope (D-017 B9): E12 service tier — one serialized sweep, every write through per-MR preconditions/reconciliation/budgets, no bulk bypass |
E12 (unlocked) |
scan stays recorder-only; horizontal workers unsupported until a lease exists |
| OQ-21 |
~~Per-rule rollout phases — or effect-editing sufficient?~~ Reversed (D-017 B2): explicit off/observe/enforce phase field — effect-editing loses policy identity and breaks before/after comparison; observed vs enforcing findings both recorded |
P3-E4 / ADR-0018 |
observe can never alter the enforcing decision or forge state |
| OQ-22 |
Envelope match on MR metadata: labels, draft status, author allowlists — which belong in match.mr for v1? |
Phase 3 |
draft-MRs likely skipped by default in CI template |
| OQ-26 |
assent test score.total faithfulness (P5-E6-S03). The S03 matcher computes score.total as Σ finding.Points over the enforcing Result.Findings, but a finding carries the AUTHORED per-firing weight r.Points, not firings*r.Points (the engine's real pointsSum, an intentional aggregate asymmetry, ADR-0007 Amendment 2). So for a rule that fires K>1 times the matcher UNDERcounts — safe (it can only mismatch/FAIL, never spuriously pass on higher real risk) but not faithful. A faithful total needs the engine to expose the summed pointsSum on Result (a decision-path change, its OWN fail-safety-reviewed lane — parallel to the findings[].path field-add, D-054(b)). Until then S03 fixtures are single-firing so total is exact. |
E6 fast-follow / engine lane |
logged by S03; leading answer: add Result.PointsTotal in the path/score engine lane, then Match reads it |
| OQ-16 |
~~Which open-source repos join the demo/test corpus?~~ Resolved (P2-E5): kafka/org + JulieOps descriptors + octoDNS zones, pinned by SHA with vendored excerpts — see examples/repos/corpus.md |
— |
adr-acceptance-review.md; D-008/D-029 extra private shapes deferred but kept in corpus plan |