Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
62 changes: 62 additions & 0 deletions .github/workflows/final-controlled-beta-evidence.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: Final controlled-beta evidence

on:
workflow_dispatch:
inputs:
release_id:
description: Approved non-secret release identifier
required: true

permissions:
contents: read

jobs:
verify-final-candidate:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Check out approved candidate
uses: actions/checkout@v4

- name: Use Node.js 22
uses: actions/setup-node@v4
with:
node-version: 22.13.0
cache: npm
cache-dependency-path: |
backend/package-lock.json
frontend/package-lock.json
website/package-lock.json

- name: Install locked dependencies
run: npm run install:all

- name: Verify immutable release identifier
env:
INPUT_RELEASE_ID: ${{ inputs.release_id }}
run: node scripts/verify-final-release-id.mjs

- name: Run complete engineering gate
run: npm run check

- name: Run fail-closed final completion gate
run: npm run final:check

- name: Archive non-secret final evidence
uses: actions/upload-artifact@v4
with:
name: ross-${{ inputs.release_id }}-final-evidence
retention-days: 90
if-no-files-found: error
path: |
reports/final-completion-dossier.md
reports/ontario-evaluation-v1.json
reports/legal-source-health-v1.json
reports/release-manifest-v1.json
config/final-completion.v1.json
config/professional-validation.v1.json
config/release-approvals.v1.json
config/operations-readiness.v1.json
config/launch-readiness.v1.json

# Evidence only. Deployment remains a separate, human-approved action.
3 changes: 3 additions & 0 deletions .github/workflows/release-candidate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@ jobs:
reports/ontario-evaluation-v1.json
reports/legal-source-health-v1.json
reports/release-manifest-v1.json
reports/final-completion-dossier.md
config/final-completion.v1.json
config/professional-validation.v1.json
config/release-approvals.v1.json
config/operations-readiness.v1.json
config/launch-readiness.v1.json
Expand Down
81 changes: 81 additions & 0 deletions config/final-completion.v1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
{
"version": "1.0.0-draft",
"asOfDate": "2026-07-17",
"releaseId": "unassigned",
"status": "blocked-awaiting-external-completion",
"target": {
"release": "invitation-only Ontario controlled beta",
"practiceAreas": [
"Ontario civil litigation and appeals",
"Ontario Small Claims Court"
],
"requiredDecisionCoverage": [
"Ontario Court of Appeal",
"Ontario Superior Court of Justice",
"Ontario Small Claims Court"
],
"dataBoundary": "synthetic-or-non-confidential-only",
"confidentialUseApproved": false,
"publicIndexingApproved": false
},
"providerStrategy": {
"status": "pending-authorization-for-coverage-gaps",
"implementedOpenProvider": "a2aj-canada",
"implementedReportedOntarioCourtCoverage": ["Ontario Court of Appeal"],
"knownGaps": [
"Ontario Superior Court of Justice",
"Ontario Small Claims Court"
],
"recommendedGapRoute": "Obtain an authorized commercial API or original-source channel with express permission for the required operations.",
"canliiWebsiteAutomationAllowed": false,
"sourceEvidence": [
"https://a2aj.ca/data/",
"https://www.canlii.org/info/terms.html",
"https://www.ontariocourts.ca/scj/about-the-court-2/decisions-of-the-court/"
]
},
"workstreams": [
{
"id": "authorized-ontario-case-law",
"ownerRole": "product owner and legal-source counsel",
"status": "pending",
"sourceOfTruth": "config/professional-validation.v1.json#legalSourceDecision"
},
{
"id": "lawyer-authored-benchmark",
"ownerRole": "Ontario lawyer and independent adjudicator",
"status": "pending",
"sourceOfTruth": "config/professional-validation.v1.json#benchmarkReview"
},
{
"id": "five-workflow-reviews",
"ownerRole": "Ontario lawyer with suitable subject-matter experience",
"status": "pending",
"sourceOfTruth": "config/professional-validation.v1.json#workflowReviews"
},
{
"id": "privacy-security-accessibility",
"ownerRole": "independent privacy, security, and accessibility reviewers",
"status": "pending",
"sourceOfTruth": "config/release-approvals.v1.json#approvals"
},
{
"id": "operational-exercises",
"ownerRole": "release and operations owners",
"status": "pending",
"sourceOfTruth": "config/operations-readiness.v1.json#evidence"
},
{
"id": "accountable-launch-decisions",
"ownerRole": "legal operator and product owner",
"status": "pending",
"sourceOfTruth": "config/launch-readiness.v1.json#decisions"
},
{
"id": "immutable-release-candidate",
"ownerRole": "release owner",
"status": "pending",
"sourceOfTruth": "reports/release-manifest-v1.json"
}
]
}
3 changes: 3 additions & 0 deletions config/release-manifest.v1.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,19 @@
"backend/schema.sql",
"backend/src/config/runtime.ts",
"config/legal-source-operations.v1.json",
"config/final-completion.v1.json",
"config/launch-readiness.v1.json",
"config/operations-readiness.v1.json",
"config/professional-validation.v1.json",
"config/public-source-coverage.json",
"config/release-approvals.v1.json",
"config/ross-brand.json",
"reports/legal-source-health-v1.json",
"reports/final-completion-dossier.md",
"reports/ontario-evaluation-v1.json",
"scripts/lib/release-readiness.mjs",
"scripts/lib/professional-validation.mjs",
"scripts/lib/final-completion.mjs",
"website/app/site-config.ts",
"workflows/ontario/catalogue.json"
]
Expand Down
31 changes: 31 additions & 0 deletions docs/deliverable-f-verification.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Deliverable F — final execution and controlled-beta completion

Deliverable F consolidates every step after E into one governed completion
package. It does not fabricate provider authorization or professional approval.

Included:

- one owner action sheet and external-engagement templates;
- a current Ontario provider procurement brief with explicit ONSC/Small Claims gaps;
- a seven-workstream final-completion record and deterministic dossier;
- human-readable `final:status` and fail-closed `final:check` commands;
- coherent release-ID, data-boundary, source-health, professional-validation,
operations, launch, and release-readiness checks;
- a manual evidence workflow that never deploys;
- tests showing pending development integrity, unsafe-boundary rejection,
production blocking, and a complete evidence-bearing pass case.

The recommended release remains invitation-only and synthetic/non-confidential.
ROSS preserves Mike, keeps CourtListener optional for U.S. research, retains
A2AJ and official legislation sources, and prohibits CanLII website automation.

Commands:

- `npm run final:status` — readable pending inventory; succeeds while records are structurally safe.
- `npm run final:check` — production completion gate; expected to fail until external evidence is complete.
- `npm run build:completion-dossier` — regenerate the governed completion report.
- `npm run test:final` — final-package integrity and report-staleness tests.

After F, there is no planned implementation package. Remaining work is the
external execution in `docs/final/owner-action-sheet.md`, followed by a release
only if `final:check` passes.
43 changes: 43 additions & 0 deletions docs/final/external-engagement-templates.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# External engagement templates

## Provider inquiry

Subject: Authorized Ontario legal-data access for invitation-only ROSS beta

We are evaluating an invitation-only, synthetic/non-confidential Ontario legal
research beta derived from the AGPL-licensed Mike project. Please confirm
whether you can authorize API access for ONCA, ONSC, and Ontario Small Claims
decisions and provide terms for search, citation lookup, exact-passage/full-text
retrieval, model input/RAG, generated output, bounded caching, deletion, audit,
and user export. Please also provide court/date/language coverage, update and
correction handling, publication-ban controls, rate limits, Canadian residency,
security materials, pricing, and a synthetic staging environment. We will not
scrape websites or send confidential client material during evaluation.

## Ontario lawyer benchmark and workflow engagement

Subject: Independent Ontario legal-content validation of ROSS

We seek an Ontario lawyer with civil-litigation/appeals and Small Claims
experience to author or substantively review a versioned AI benchmark and five
workflow drafts. The work includes verifying current primary sources,
jurisdiction and temporal assumptions, expected answers/refusals, citations and
passages, professional-scope boundaries, synthetic adversarial cases, and all
workflow instructions/fixtures. Deliverables must identify the reviewed commit
and version, reviewer professional status, source-as-of date, defects and
changes, residual limitations, decision, re-review triggers, and a controlled
evidence reference. A second qualified reviewer must independently adjudicate
the benchmark. No real client information may be used.

## Privacy, security, or accessibility engagement

Subject: Independent ROSS controlled-beta review

We seek an evidence-bearing review of one immutable ROSS release candidate for
an invitation-only synthetic/non-confidential Ontario beta. Please scope your
work to the applicable items in
`docs/professional-validation/privacy-security-accessibility-review-template.md`
and identify the candidate ID/commit, environment, methods, findings, required
changes, residual risk, decision, conditions, expiry, and re-review triggers.
Sensitive findings must remain in a controlled channel; the repository will
contain only a non-secret evidence reference.
39 changes: 39 additions & 0 deletions docs/final/final-release-procedure.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Final controlled-beta release procedure

## Prepare one candidate

1. Merge all reviewer-required corrections and start from clean `main`.
2. Assign a unique release ID to final completion, release approvals,
operations readiness, launch readiness, and release-manifest configuration.
3. Update the professional-validation record and workflow catalogue only from
completed evidence. Regenerate workflows and reports.
4. Run `npm run build:completion-dossier`, `npm run build:release-manifest`, and
`npm run check`.
5. Deploy this exact commit to isolated staging and complete every evidence
exercise and source observation without confidential material.
6. Download/retain the release-candidate evidence and link its immutable run.
7. Run `npm run final:status` for the readable inventory, then
`npm run final:check` for the fail-closed gate.

## Promote or stop

If `final:check` is blocked, stop. Do not weaken a threshold, backdate an
approval, replace evidence with a placeholder, enable CanLII scraping, or
substitute a different build. Correct the underlying issue and create a new
candidate when evidence no longer matches.

If it passes, run the GitHub **Final controlled-beta evidence** workflow on the
same commit. Confirm the artifact contains the governed manifest, evaluation,
source-health, professional-validation, approval, operations, launch, and final
completion records. Record the human go/no-go decision and its time window.

Promote only the reviewed immutable images. Monitor authentication, storage,
chat/model availability, legal-source health, errors, latency, and security
events. Stop or roll back on any declared condition.

## Boundary after promotion

The approved endpoint remains invitation-only and accepts synthetic or
non-confidential content. Expanding users, practice areas, source operations,
public indexing, analytics, payment, or confidential/privileged data requires
a successor decision and review; it is not an administrative toggle.
39 changes: 39 additions & 0 deletions docs/final/owner-action-sheet.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# ROSS final owner action sheet

This is the shortest path after Deliverable F is merged. Complete the actions
in order for one immutable release candidate. Do not change a JSON status to
approved until the named evidence actually exists.

1. **Authorized case-law coverage.** Obtain express authorization for API or
original-source access covering ONCA, ONSC, and Ontario Small Claims for the
operations ROSS will perform. A2AJ currently reports ONCA coverage but not
ONSC or Small Claims. CanLII website scraping/systematic downloading remains
prohibited. Complete the provider record from Deliverable E.
2. **Ontario benchmark.** Engage an Ontario lawyer to author or substantively
review every benchmark case and a second qualified reviewer to adjudicate
disagreements. Commit only non-confidential prompts and evidence references.
3. **Five workflow reviews.** Obtain a separate version-specific review for
every workflow. Apply required changes, bump versions, and record matching
reviewer/date/evidence metadata in the catalogue and validation record.
4. **Independent assurance.** Complete legal-content, privacy, security, and
accessibility reviews. Keep confidential vulnerability detail outside Git;
commit only bounded evidence references.
5. **Operational exercises.** For the same candidate, complete CI, staging
journey, migration, backup/restore, rollback, observability, source-health,
dependency, and incident exercises.
6. **Launch decisions.** Name the legal operator and accountable owners; approve
domains, vendors/residency, effective notices, support/privacy contacts,
beta cohort/terms, and the go-live decision.
7. **Immutable candidate.** Assign one release ID everywhere, rebuild generated
records, run the release-candidate workflow, and deploy that exact candidate
to isolated staging.
8. **Final gate.** Run `npm run final:check`. Any blocker ends the promotion
attempt. If it passes, run the GitHub **Final controlled-beta evidence**
workflow and retain its artifact and approval record.
9. **Limited launch.** Launch only the invitation-only synthetic or
non-confidential cohort. Public indexing and confidential/privileged files
remain outside this approval.

There is no further software package after F unless a reviewer requires code
changes, a provider contract requires a specific adapter, or the product scope
is expanded.
50 changes: 50 additions & 0 deletions docs/final/provider-procurement-brief.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Ontario case-law provider procurement brief

## Required result

Obtain an authorized, technically usable source for Ontario Court of Appeal,
Ontario Superior Court of Justice, and Ontario Small Claims decisions. The
authorization must expressly cover ROSS's actual operations: search, citation
lookup, document/passage retrieval, model input, generated output, retention,
caching, and user export as applicable.

## Recommended starting strategy

Keep the implemented A2AJ connector for the datasets it reports, including
Ontario Court of Appeal, while seeking an authorized commercial API or
original-source channel for ONSC and Small Claims gaps. Treat all aggregated
copies as unofficial and retain the original-source verification warning.

Do not automate the CanLII website. CanLII's terms dated 2026-06-03 direct
automated or large-scale retrieval to original sources or other authorized
channels and prohibit systematic programmatic downloading. A CanLII route may
be considered only if CanLII gives separate express authorization that covers
the proposed transport and operations.

## Questions for every candidate provider

- Exact courts, tribunals, date ranges, languages, document types, update delay,
deletions/corrections, publication bans, and completeness measurements.
- API search syntax, stable identifiers, full text, paragraph structure,
citation resolution, treatment/citator data, rate limits, bulk limits,
availability, support, change notice, and sandbox.
- Permission for model input/RAG, generated answers, quotations, caching,
retention, deletion, user download, audit, and incident investigation.
- Canadian processing/storage regions, subprocessors, security documentation,
breach terms, credential rotation, termination, export, and deletion.
- Price, usage tiers, overages, taxes, term, renewal, suspension, and exit.

## Acceptance evidence

- Executed agreement or express authorization identifier.
- Operation and coverage schedule.
- Non-confidential synthetic staging results for every required court.
- Exact-passage, correction/deletion, publication-ban, rate-limit, outage,
revocation, and credential-rotation tests.
- Legal, privacy, security, and product-owner approvals.

Primary references as of 2026-07-17:

- https://a2aj.ca/data/
- https://www.canlii.org/info/terms.html
- https://www.ontariocourts.ca/scj/about-the-court-2/decisions-of-the-court/
Loading
Loading