Skip to content

docs(adr): design Inkspan-based LLM email writing guidance - #1322

Open
seonghobae wants to merge 20 commits into
developfrom
feat/inkspan-email-writing-guide
Open

docs(adr): design Inkspan-based LLM email writing guidance#1322
seonghobae wants to merge 20 commits into
developfrom
feat/inkspan-email-writing-guide

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

ADR decision summary

Naruon will implement Grammarly-like email guidance as an LLM-native contextual review workflow, not as a keyword, regex, phrase-list, sender-domain, recipient-count, language-name, nearest-text, or positional classifier.

  • Naruon owns authorized source email/thread/recipient context, review prompts, privacy policy, admission-policy consumption, feedback, and evaluation.
  • contextual-orchestrator owns provider-neutral routing and single-model versus multi-agent compute allocation.
  • fast-mlsirm supplies strict criterion-level LLM-as-a-Judge contracts, polytomous responses, response-matrix/IRT bridges, calibration, DIF, reliability, and drift evidence.
  • Inkspan owns the revision-safe editor, W3C selector binding, accessible diagnostics UI, explicit apply/ignore/dismiss behavior, stale-result rejection, and ordinary undo.

Provider failure, malformed output, uncertainty, Judge disagreement, expired or unsupported calibration policy, stale revision, or unsupported language/context produces abstention or review unavailability. There is no semantic keyword fallback. Editing and sending remain available.

Included

  • ADR-0005 with alternatives, ownership, model workflow, rubric, privacy/PII controls, failure recovery, compatibility, verification, and rollback;
  • cross-repository design specification covering API contracts, model/Judge schemas, calibration policy, contrast-set benchmark, metrics, data model, threats, accessibility, observability, migration, and release sequence;
  • APA 7th doctoring for LLM-as-a-Judge bias, multilingual reliability, psychometric calibration, W3C selector semantics, and AI risk governance;
  • a reconciled Naruon ADR index that preserves the existing topic-measurement ADRs (0001–0003), keeps accepted calendar ADR-0004 unique, and assigns ADR-0005 to email-writing guidance;
  • an atomic 18-task TDD plan at docs/superpowers/plans/2026-08-12-llm-email-writing-guidance-implementation.md.

Runtime and measurement boundary

The candidate reviewer and independent Judge are separate roles and calls. A candidate is not admitted merely because its generator returned valid JSON or a high confidence value.

The Judge consumes explicit criterion descriptions and ordered categories through a released, immutable fast-mlsirm adapter. Runtime admission applies a versioned calibration policy. Mandatory preservation criteria—including fact, intent, actor, deadline, technical precision, actionability, and request strength—cannot be compensated for by a high average score.

The synchronous path consumes a pre-published policy. IRT fitting, multilevel/rater analysis, DIF, category-count ablation, reliability, and drift analysis run offline or nearline. An evaluation_only artifact can exercise the pipeline but cannot emit production user-facing diagnostics.

Cross-repository dependency boundary

Companion Inkspan design and implementation-plan PR: ContextualWisdomLab/inkspan#248.

Naruon will consume only immutable released artifacts with lockfile and package-verification evidence. Mutable branches, copied editor forks, source archives, git dependencies, and local paths are not production dependencies.

The first migration preserves the existing plain-text send contract. Inkspan provides authoring and deterministic plain-text projection. Rich HTML sending is a separate reviewed slice.

Evaluation and policy publication

Production policy publication requires human reference evidence and contrast sets that distinguish contextual semantics from lexical triggers, including paraphrases, quotations, code and identifiers, context-sensitive recipient scenarios, firm legitimate requests, technically unsuitable requests, Korean, English, mixed-language, CJK, hostile-Unicode, and negative controls.

Evaluation records issue/category precision and recall, span quality, replacement correctness, unsupported claims, preservation, calibration, human disagreement, DIF, temporal drift, latency, tokens, workflow steps, and cost. Scheduled live evaluation uses NVIDIA_NIM_API_KEY; model calls never use COPILOT_GITHUB_TOKEN.

Scope and claim boundary

This is a design-and-implementation-plan PR. It changes no runtime code, database, package dependency, UI, model configuration, or release version. It does not claim that the feature, any language profile, or any model is validated or shipped. Runtime implementation must follow the committed TDD plan.

Customer next action

This PR records the design and TDD plan only. Customers should continue to write and send email with the current editor and send path. No writing-guidance feature, language profile, or model is available in product until a later implementation PR lands on protected develop with independent review and exact-head product CI.

Exact-head verification

Previous head (stale body advertised 2f7b5780; live PR head before this merge):

b4953c1510478157ae226304c4919e1344ae3b1d

Current head:

bfc2df112136bb9fe358778d701e78bf9e78b685

Live protected develop merged as the second parent:

dd8d15191338b841f9e6f3a06507c6a5643b95d0

Normal merge commit (not squash, not rebase, not force-push):

  • first parent: b4953c1510478157ae226304c4919e1344ae3b1d
  • second parent: dd8d15191338b841f9e6f3a06507c6a5643b95d0

ADR-index conflict resolution:

  • preserved topic-intelligence ADR-0001, ADR-0002, and ADR-0003;
  • kept accepted calendar ADR-0004 unique (0004-status-weighted-calendar-conflicts.md from #1367);
  • renumbered the email-writing decision from colliding ADR-0004 to ADR-0005 (not ADR-0001);
  • proved all numbered ADR identifiers are unique and all indexed links resolve.

Local validation counts on bfc2df112136bb9fe358778d701e78bf9e78b685:

  • unique numbered ADR identifiers: 5
  • indexed links resolve: 5
  • required email-writing ADR sections: 11
  • balanced Markdown fence documents: 9
  • conflict markers: 0
  • git diff --check on merge-resolution files: ok
  • focused malformed-comment / ADR-index test: absent (not weakened; none exists in tree)
  • files vs live develop: 5 documentation files, 0 runtime/database/dependency/UI/model/version files

Predecessor evidence does not transfer. Checks, reviews, and security evidence recorded for 2f7b5780, b4953c15, or any earlier head are non-passing for this head.

Merge gate

Merge requires an independent non-author APPROVE on exact head bfc2df112136bb9fe358778d701e78bf9e78b685 plus exact-head product CI. This update does not approve, merge, squash, empty-requeue, or force-cancel.

Review focus

  1. no-keyword semantic-authority boundary;
  2. synchronous runtime versus offline/nearline fast-mlsirm calibration;
  3. candidate reviewer / independent Judge / adjudicator separation;
  4. intent, fact, request-strength, technical, actor, deadline, and actionability preservation;
  5. PII context retention with compensating controls instead of destructive masking;
  6. stale revision and selector handling;
  7. no implicit send gate;
  8. cross-repository release and rollback order;
  9. whether the atomic TDD plan covers the full product, measurement, security, and operability boundary;
  10. ADR identifier uniqueness after the develop ADR-0004 calendar collision.

Open in Devin Review

Summary by CodeRabbit

  • Documentation
    • Added architecture guidance for protected development workflows, decision records, status definitions, and documentation requirements.
    • Added a proposed design and implementation plan for Inkspan-based, context-aware LLM email-writing guidance.
    • Documented revision-safe editing, model review, feedback, accessibility, privacy, security, fallback, and rollback requirements.
    • Added evidence-validation and preregistered benchmarking guidance for model evaluation and policy publication.
    • Added ADR-0005 covering the proposed workflow, safeguards, review roles, and verification standards.

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

Next included review available in 58 minutes.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 5c7e3a28-8530-4941-ac88-88b4cd1c6ff9

📥 Commits

Reviewing files that changed from the base of the PR and between c5b242e and f2dd935.

📒 Files selected for processing (4)
  • docs/adr/0005-inkspan-backed-llm-email-writing-guidance.md
  • docs/doctoring/llm-email-writing-guidance-and-fast-mlsirm-judge.md
  • docs/superpowers/plans/2026-08-12-llm-email-writing-guidance-implementation.md
  • docs/superpowers/specs/2026-08-12-inkspan-llm-email-writing-guidance-design.md
📝 Walkthrough

Walkthrough

The PR adds ADR governance updates, a proposed Inkspan-based LLM email guidance design, an 18-task implementation plan, fast-mlsirm calibration evidence, and release and verification requirements. It does not add product implementation.

Changes

Email writing guidance

Layer / File(s) Summary
Governance and architecture
docs/adr/*, docs/superpowers/plans/..., docs/superpowers/specs/...
Defines ADR status rules, component boundaries, immutable dependencies, LLM semantic judgments, and deterministic validation responsibilities.
Review contracts and orchestration
docs/adr/0005-..., docs/superpowers/plans/..., docs/superpowers/specs/...
Specifies context authorization, strict model contracts, candidate generation, independent judging, policy admission, and authenticated review APIs.
Editor integration and safety controls
docs/adr/0005-..., docs/superpowers/plans/..., docs/superpowers/specs/...
Defines Inkspan editing, revision-safe controls, privacy-minimized evidence, feedback, accessibility, security, and degraded operation.
Calibration and verification
docs/doctoring/..., docs/superpowers/plans/..., docs/superpowers/specs/...
Adds preregistered split and threshold controls, locked-holdout evaluation, benchmark requirements, and verification coverage.
Release and documentation controls
docs/adr/0005-..., docs/superpowers/plans/..., docs/superpowers/specs/...
Defines documentation reconciliation, acceptance gates, staged release, rollback, monitoring, and claim boundaries.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Merge Risk: 🟡 Moderate · up to c5b24

This documentation-only PR defines the future email-guidance contract but still leaves unresolved policy-admission, rollback, evaluation-reproducibility, source-verification, and criterion-naming issues. No current production behavior changes, but these gaps could lead to unsafe or irreproducible implementation later, so merge should wait for correction or explicit owner acceptance.

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the documentation change and its main subject: Inkspan-based LLM email-writing guidance.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/inkspan-email-writing-guide

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

PR governance metadata gate update for f2dd935c5180bdc1ed2f61f3cf8786b97aef2a50: no current blocking failures remain.

PR governance metadata gate is waiting on current-head requirements; see the latest check for pending reasons.

@seonghobae
seonghobae marked this pull request as ready for review August 15, 2026 11:45

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

Please review exact head 0dd28a3d4df5faa3c9007ec33785f73a16ded835, focusing on the semantic-authority boundary, cross-repository dependency and release contracts, privacy controls, measurement validity, and rollback/acceptance criteria.

@coderabbitai

coderabbitai Bot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '== HEAD =='
git rev-parse HEAD
git status --short
printf '%s\n' '== DIFF SUMMARY VS DEVELOP =='
git diff --stat develop...HEAD
git diff --name-status develop...HEAD
printf '%s\n' '== DOCUMENT FILES =='
fd -t f . docs | sort
printf '%s\n' '== CHANGED DOCUMENT HEADINGS =='
git diff --name-only develop...HEAD | while IFS= read -r f; do
  case "$f" in
    *.md)
      printf '\n--- %s ---\n' "$f"
      rg -n '^(#|##|###) ' "$f" || true
      ;;
  esac
done
printf '%s\n' '== FOCUSED TERMS IN CHANGED DOCS =='
git diff --name-only develop...HEAD | while IFS= read -r f; do
  case "$f" in
    *.md)
      printf '\n--- %s ---\n' "$f"
      rg -n -i -C 2 'keyword|regex|fallback|candidate|judge|adjudicat|calibrat|evaluation_only|PII|privacy|retention|Inkspan|release|lockfile|verif|rollback|acceptance|stale|selector|send gate|undo|DIF|drift|reliability' "$f" || true
      ;;
  esac
done
printf '%s\n' '== PR METADATA =='
gh pr view 1322 --repo ContextualWisdomLab/naruon --json number,title,headRefOid,baseRefName,files,url --jq '{number,title,headRefOid,baseRefName,url,files:[.files[].path]}'

Length of output: 232437


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '== ADR: WORKFLOW, PRIVACY, ACCEPTANCE, ROLLBACK =='
sed -n '21,197p' docs/adr/0001-inkspan-backed-llm-email-writing-guidance.md

printf '%s\n' '== DESIGN: API, ADMISSION, MEASUREMENT, PRIVACY, RELEASE =='
sed -n '112,180p' docs/superpowers/specs/2026-08-12-inkspan-llm-email-writing-guidance-design.md
sed -n '223,371p' docs/superpowers/specs/2026-08-12-inkspan-llm-email-writing-guidance-design.md
sed -n '373,558p' docs/superpowers/specs/2026-08-12-inkspan-llm-email-writing-guidance-design.md

printf '%s\n' '== PLAN: DEPENDENCY, PRIVACY, POLICY, ACCEPTANCE, RELEASE =='
sed -n '39,160p' docs/superpowers/plans/2026-08-12-llm-email-writing-guidance-implementation.md
sed -n '275,395p' docs/superpowers/plans/2026-08-12-llm-email-writing-guidance-implementation.md
sed -n '546,705p' docs/superpowers/plans/2026-08-12-llm-email-writing-guidance-implementation.md

printf '%s\n' '== CROSS-DOCUMENT TERM CONSISTENCY =='
for term in \
  'evaluation_only' \
  'approved policy' \
  'immutable released' \
  'rollback' \
  'no raw' \
  'send gate' \
  'candidate reviewer' \
  'independent judge' \
  'adjudicat'; do
  printf '\n-- %s --\n' "$term"
  rg -n -i --glob '*.md' "$term" \
    docs/adr/0001-inkspan-backed-llm-email-writing-guidance.md \
    docs/doctoring/llm-email-writing-guidance-and-fast-mlsirm-judge.md \
    docs/superpowers/specs/2026-08-12-inkspan-llm-email-writing-guidance-design.md \
    docs/superpowers/plans/2026-08-12-llm-email-writing-guidance-implementation.md \
    || true
done

printf '%s\n' '== COMPANION PR METADATA =='
gh pr view 248 --repo ContextualWisdomLab/inkspan \
  --json number,state,title,headRefOid,baseRefName,mergedAt,url \
  --jq '{number,state,title,headRefOid,baseRefName,mergedAt,url}' || true

printf '%s\n' '== FAST-MLSIRM PR METADATA =='
gh pr view 733 --repo ContextualWisdomLab/fast-mlsirm \
  --json number,state,title,headRefOid,baseRefName,mergedAt,url \
  --jq '{number,state,title,headRefOid,baseRefName,mergedAt,url}' || true

Length of output: 76893


@seonghobae I reviewed exact head 0dd28a3d4df5faa3c9007ec33785f73a16ded835.

I found one measurement-validity issue.

  • docs/superpowers/plans/2026-08-12-llm-email-writing-guidance-implementation.md, Lines 569-575: Task 14 requires measured outputs to generate the first approved policy. It does not require pre-specified publication thresholds or a locked final holdout set. The same benchmark can therefore drive policy selection and serve as the acceptance evidence. This permits post-hoc threshold selection and benchmark overfitting. Define the publication thresholds, evaluation protocol, and data split before final evaluation. Use a locked human-labeled holdout set only for the final publish/no-publish decision. Record the protocol and holdout hash in the policy artifact.

The reviewed documents otherwise define the requested boundaries clearly:

  • Semantic judgments have no keyword, regex, phrase-list, positional, or nearest-text fallback.
  • Candidate reviewer, independent Judge, optional adjudicator, policy admission, and deterministic integrity validation have separate roles.
  • Runtime consumes a published policy. Calibration, IRT fitting, DIF, and drift analysis remain offline or nearline.
  • Naruon requires immutable released Inkspan and fast-mlsirm artifacts. ContextualWisdomLab/inkspan#248 remains open, so the release gate is necessary.
  • Privacy controls preserve context required for valid interpretation while prohibiting raw-content telemetry and ordinary logging.
  • Review failure, stale revisions, invalid selectors, and policy failure preserve editing and sending.
  • Rollback preserves Inkspan authoring and the existing send path.
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@cursor

cursor Bot commented Aug 17, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

coderabbitai[bot]

This comment was marked as resolved.

Reconcile the Ready email-writing design onto current protected develop.
Keep topic-intelligence ADRs 0001-0003 and accepted calendar ADR-0004.
Renumber the email-writing decision to ADR-0005 so numbered identifiers stay unique.

Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>
@seonghobae

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

Please review the unchanged exact current head bfc2df112136bb9fe358778d701e78bf9e78b685 (normal merge of live develop@dd8d1519). Predecessor b4953c15 evidence does not transfer. Email-writing decision is now ADR-0005 so accepted calendar ADR-0004 from #1367 stays unique. Local ADR validation: 5 unique identifiers, 5 indexed links, 11 required sections, 0 conflict markers. Independent non-author APPROVE is still required; this comment is not an approval.

@coderabbitai

coderabbitai Bot commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

expected_head='bfc2df112136bb9fe358778d701e78bf9e78b685'
base='dd8d1519'

printf '%s\n' '== EXACT HEAD AND MERGE =='
git rev-parse HEAD
git show -s --format='commit=%H%nparents=%P%nsubject=%s' HEAD
git status --short
git merge-base --is-ancestor "$base" HEAD && echo "base_is_ancestor=yes" || echo "base_is_ancestor=no"
if [ "$(git rev-parse HEAD)" != "$expected_head" ]; then
  echo "ERROR: checked-out HEAD does not match requested exact head" >&2
  exit 1
fi

printf '%s\n' '== DIFF AGAINST LIVE DEVELOP COMMIT =='
git diff --stat "$base...HEAD"
git diff --name-status "$base...HEAD"

printf '%s\n' '== CHANGED MARKDOWN HEADINGS =='
git diff --name-only "$base...HEAD" | while IFS= read -r f; do
  case "$f" in
    *.md)
      printf '\n--- %s ---\n' "$f"
      rg -n '^(#{1,4}) ' "$f" || true
      ;;
  esac
done

printf '%s\n' '== ADR INDEX AND IDENTIFIER CHECK =='
if [ -f docs/adr/README.md ]; then
  sed -n '1,240p' docs/adr/README.md
fi
fd -t f -e md . docs/adr | sort | while IFS= read -r f; do
  printf '\n--- %s ---\n' "$f"
  sed -n '1,45p' "$f"
done

printf '%s\n' '== FOCUSED CONTRACTS IN REVIEW DOCUMENTS =='
for f in \
  docs/adr/0005-inkspan-backed-llm-email-writing-guidance.md \
  docs/superpowers/specs/2026-08-12-inkspan-llm-email-writing-guidance-design.md \
  docs/superpowers/plans/2026-08-12-llm-email-writing-guidance-implementation.md \
  docs/doctoring/llm-email-writing-guidance-and-fast-mlsirm-judge.md
do
  if [ -f "$f" ]; then
    printf '\n--- %s ---\n' "$f"
    rg -n -i -C 3 \
      'keyword|regex|fallback|candidate|independent judge|adjudicat|policy artifact|calibrat|threshold|holdout|data split|evaluation protocol|publish|PII|privacy|retention|raw.content|telemetry|immutable|release|lockfile|rollback|acceptance|stale|selector|send' \
      "$f" || true
  else
    echo "MISSING: $f"
  fi
done

printf '%s\n' '== POLICY AND EVALUATION CONTEXT FROM IMPLEMENTATION PLAN =='
plan='docs/superpowers/plans/2026-08-12-llm-email-writing-guidance-implementation.md'
if [ -f "$plan" ]; then
  rg -n '^(##|###) ' "$plan"
  sed -n '530,680p' "$plan"
fi

printf '%s\n' '== PR METADATA =='
gh pr view 1322 --repo ContextualWisdomLab/naruon \
  --json number,headRefOid,baseRefName,state,mergeable,reviewDecision,url \
  --jq '{number,headRefOid,baseRefName,state,mergeable,reviewDecision,url}'

Length of output: 124240


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '== ADR IDENTIFIERS AND INDEX LINKS =='
printf 'ADR headers: '
rg -n '^# ADR-[0-9]{4}:' docs/adr --glob '*.md' | wc -l
printf 'Unique ADR header identifiers: '
rg '^# ADR-[0-9]{4}:' docs/adr --glob '*.md' \
  | sed -E 's/^# (ADR-[0-9]{4}):.*/\1/' | sort -u | wc -l
printf 'Indexed ADR markdown links: '
rg -o '\[ADR-[0-9]{4}\]\([^)]*\.md\)' docs/adr/README.md | wc -l
printf 'Conflict markers in changed docs: '
git diff --name-only dd8d1519...HEAD | while IFS= read -r f; do
  case "$f" in *.md) printf '%s\0' "$f" ;; esac
done | xargs -0 -r rg -n '^(<<<<<<<|=======|>>>>>>>)' || true

printf '%s\n' '== REQUIRED ADR-0005 SECTIONS =='
for heading in \
  'Context' \
  'Alternatives considered' \
  'Decision' \
  'Consequences' \
  'Failure and recovery' \
  'Security and privacy impact' \
  'Accessibility' \
  'Compatibility and migration' \
  'Verification and acceptance evidence' \
  'Research and standards traceability' \
  'Rollback or supersession'
do
  if rg -qx "## ${heading}" docs/adr/0005-inkspan-backed-llm-email-writing-guidance.md; then
    printf 'present: %s\n' "$heading"
  else
    printf 'MISSING: %s\n' "$heading"
  fi
done

printf '%s\n' '== ALL MEASUREMENT-PUBLICATION REFERENCES =='
rg -n -i -C 2 \
  'pre.?specif|pre.?register|threshold|holdout|data split|evaluation protocol|publication job|policy artifact|dataset.*hash|hash.*dataset' \
  docs/adr/0005-inkspan-backed-llm-email-writing-guidance.md \
  docs/superpowers/specs/2026-08-12-inkspan-llm-email-writing-guidance-design.md \
  docs/superpowers/plans/2026-08-12-llm-email-writing-guidance-implementation.md \
  docs/doctoring/llm-email-writing-guidance-and-fast-mlsirm-judge.md

printf '%s\n' '== TASK 14 WITH LINE NUMBERS =='
nl -ba docs/superpowers/plans/2026-08-12-llm-email-writing-guidance-implementation.md | sed -n '546,578p'

Length of output: 16518


@seonghobae I reviewed exact head bfc2df112136bb9fe358778d701e78bf9e78b685.

I found one issue.

  • docs/superpowers/plans/2026-08-12-llm-email-writing-guidance-implementation.md, Line 574: Task 14 requires the publication job to fail when thresholds are missed. It does not require thresholds, the evaluation protocol, or data splits to be fixed before final evaluation. It also does not reserve a locked human-labeled holdout set for the publish/no-publish decision. The policy artifact requires dataset/provenance hashes, but not the final holdout hash. The same benchmark can therefore select thresholds and justify publication. This permits post-hoc threshold selection and benchmark overfitting. Define the publication thresholds, evaluation protocol, and train/calibration/final-holdout split before evaluation. Use the locked holdout only for the final policy-publication decision. Record the protocol version and holdout hash in the approved policy artifact.

The requested ADR checks are consistent at this head:

  • There are five unique ADR identifiers and five indexed ADR links.
  • ADR-0005 contains all eleven required sections.
  • ADR-0004 remains the accepted calendar ADR.
  • ADR-0005 remains the proposed email-writing ADR.
  • No conflict markers were detected in the changed Markdown files.

The documents also retain the required semantic-authority boundary, immutable dependency gates, privacy controls, fail-closed review behavior, and rollback that preserves Inkspan authoring and the existing send path.

This review does not provide the required qualifying non-author approval.

You are interacting with an AI system.

cursor Bot pushed a commit that referenced this pull request Aug 17, 2026
…ask4' into feat/llm-email-writing-orchestrator-task5

Retarget Task 5 onto live #1329 head 4570747
(merged onto live #1328 51fb5e8 / #1327 fb7c406 / #1322 bfc2df1 / develop@dd8d1519).

Preserve the hardened contextual-orchestrator boundary. Do not restore
write-capable Task 5 promotion/finalize workflows.

Co-authored-by: Seongho Bae <seonghobae@users.noreply.github.com>

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head bfc2df112136bb9fe358778d701e78bf9e78b685.

  • Head SHA: bfc2df112136bb9fe358778d701e78bf9e78b685

  • Workflow run: 32137363745

  • Workflow attempt: 1

Coverage evidence

Coverage evidence job did not run or did not publish coverage evidence.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Docs (5 files)"]
  S1 --> I1["operator or user guidance"]
  I1 --> R1["Review risk: Docs (5 files)"]
  R1 --> V1["docs review"]
Loading

@opencode-agent

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: bfc2df112136bb9fe358778d701e78bf9e78b685
  • Workflow run: 32137363745
  • Workflow attempt: 1
  • Gate result: REQUEST_CHANGES (approval step)

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head bfc2df112136bb9fe358778d701e78bf9e78b685.

  • Head SHA: bfc2df112136bb9fe358778d701e78bf9e78b685

  • Workflow run: 32137363745

  • Workflow attempt: 1

Coverage evidence

Coverage evidence job did not run or did not publish coverage evidence.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Docs (5 files)"]
  S1 --> I1["operator or user guidance"]
  I1 --> R1["Review risk: Docs (5 files)"]
  R1 --> V1["docs review"]
Loading

@seonghobae
seonghobae enabled auto-merge (squash) August 20, 2026 20:09
@seonghobae

seonghobae commented Aug 20, 2026

Copy link
Copy Markdown
Contributor Author

Current-head documentation fixes pushed at afec4189ba2113e01605bf76e8bd9b9c67af9743. The policy plan, design spec, ADR-0005, and doctoring now align on actionability, fixed minimum_slice_sample_size: 30, frozen thresholds before locked-holdout access, publish_decision == "publish" runtime admission, and separate evidence-transaction versus feature rollback. git diff --check passed. Hosted Checks and current-head review evidence remain authoritative.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no bugs or issues to report.

Open in Devin Review

coderabbitai[bot]

This comment was marked as resolved.

@opencode-agent
opencode-agent Bot disabled auto-merge August 20, 2026 21:45
@seonghobae
seonghobae enabled auto-merge (squash) August 20, 2026 23:41
@seonghobae
seonghobae dismissed stale reviews from coderabbitai[bot], opencode-agent[bot], and coderabbitai[bot] August 22, 2026 07:46

Stale review: all review-thread comments on this PR are resolved and the reviewer's cited commit predates the current head, which passes all non-metadata-gate required checks (verified via gh pr checks and the reviewThreads GraphQL query — 0 unresolved threads). Dismissing as superseded per AGENTS.md stale-review guidance.

@opencode-agent opencode-agent Bot added area: ui-ux Frontend, interaction, design, or user experience priority: medium Normal-priority or P2 work status: needs-review Open pull request requiring current-head review or checks type: docs Documentation, ADR, PRD, or technical writing labels Aug 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: ui-ux Frontend, interaction, design, or user experience priority: medium Normal-priority or P2 work status: needs-review Open pull request requiring current-head review or checks type: docs Documentation, ADR, PRD, or technical writing

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants