Skip to content

Phase 4: Web: the approval page shows the same words from one shared module #1731

Open

Description

@neuromechanist

Part of epic #1726.

Scope

The website approval page shows the verdict, the identifier screen's closed-vocabulary details and the reasons in exactly the words the CLI uses, so the two cannot disagree. The words and the rules are declared once in a shared module in this repository and transcribed into nemarOrg/website with a drift test on each side, the way the account copy and the profile-gap rules already work. This phase needs its own pull request in the website repository and follows that repository's release cycle.

Done when

  • The web page and the CLI render the same sentences for every outcome, pinned by a drift test.
  • The website change reaches staging, and its production promotion is recorded for the release.

Activity

  1. neuromechanist commented on Oct 13, 2026

    @neuromechanist
    ContributorAuthor

    Carried from Phase 2 (#1729): the approval gate's refusal sentences (REVIEW_GATE_REFUSAL_TEXT in shared/publication-review.ts: needs_override, override_not_covering, review_changed, no_review_row) and the reasons table's cures name CLI commands and --force, which a web approver cannot run. The website must not print them verbatim. Split a command field out of the cure sentences and give the web its own wording for the refusals before the words are transcribed (the same step this phase already plans for the reasons table).

  2. neuromechanist commented on Oct 14, 2026

    @neuromechanist
    ContributorAuthor

    Carry-forward from Phase 3 (#1772, merged into the epic branch as cb925fa). The website's approve-dispatch and deny calls should send request_id (the id of the request the page showed), so a stale page gets 409 request_mismatch instead of acting on a newer request. The page should say something plain for the new refusals: request_mismatch, invalid_dataset_id and already_in_flight from approve-dispatch, and request_mismatch, approval_in_flight and deny_after_publishing from deny. The sentences for the two deny refusals are in the shared contract and the website's drift test will flag them when both checkouts are present. The Origin refusal on the admin routes has the body { error: "origin_not_allowed", code, message }, with the word in error and the sentence in message, so a page that shows error to a person must show message for this one. ADR 0103 (decisions 7, 10 and 11) has the details.

  3. neuromechanist commented on Oct 15, 2026

    @neuromechanist
    ContributorAuthor

    Done on the epic branch: the API half merged in #1779 (f184d78). The page half is nemarOrg/website#460 (draft until the epic is on dev), tracked in nemarOrg/website#459.

  4. neuromechanist commented on Oct 15, 2026

    @neuromechanist
    ContributorAuthor

    Reopened: the nemar-cli half is on dev (epic PR #1782, merge a28e770); the website half (nemarOrg/website#460) is still a draft and closes this issue when it is on staging and the maintainer's browser check passes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    featureNew feature or enhancement

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions