feat: fix wizard step-skip bug + extend case edit with all fields + Paperclip title sync
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 1m38s
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 1m38s
- Fix keyboard navigation bug: React was reusing the submit button DOM element when transitioning "הבא" → "צור תיק", retaining focus and causing Enter to auto-submit step 3. Added key props to force element replacement. - CaseEditDialog now covers all wizard fields: appellants, respondents, property_address, permit_number (in addition to existing title, subject, hearing_date, expected_outcome, notes). - When case title changes, Paperclip project name is updated in background via new update_project_name() in paperclip_client.py. - Extended CaseUpdateRequest, case_update MCP tool, and caseUpdateSchema to carry the new fields end-to-end. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -50,6 +50,10 @@ export type Case = {
|
||||
processing_count?: number;
|
||||
committee_type?: string | null;
|
||||
hearing_date?: string | null;
|
||||
appellants?: string[] | null;
|
||||
respondents?: string[] | null;
|
||||
property_address?: string | null;
|
||||
permit_number?: string | null;
|
||||
};
|
||||
|
||||
export type CaseDocument = {
|
||||
|
||||
@@ -432,6 +432,26 @@ export interface paths {
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/api/cases/stale": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
/**
|
||||
* Api Stale Cases
|
||||
* @description Return cases that haven't been updated in N days and are not in a terminal/waiting status.
|
||||
*/
|
||||
get: operations["api_stale_cases_api_cases_stale_get"];
|
||||
put?: never;
|
||||
post?: never;
|
||||
delete?: never;
|
||||
options?: never;
|
||||
head?: never;
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/api/cases/{case_number}/archive": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
@@ -1927,6 +1947,26 @@ export interface paths {
|
||||
patch: operations["api_resolve_feedback_api_feedback__feedback_id__resolve_patch"];
|
||||
trace?: never;
|
||||
};
|
||||
"/api/chair-feedback/weekly-summary": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
/**
|
||||
* Api Chair Feedback Weekly Summary
|
||||
* @description Return chair feedback from the last N days as a text summary for the CEO agent.
|
||||
*/
|
||||
get: operations["api_chair_feedback_weekly_summary_api_chair_feedback_weekly_summary_get"];
|
||||
put?: never;
|
||||
post?: never;
|
||||
delete?: never;
|
||||
options?: never;
|
||||
head?: never;
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/api/precedent-library/upload": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
@@ -2019,6 +2059,40 @@ export interface paths {
|
||||
patch: operations["precedent_library_update_api_precedent_library__case_law_id__patch"];
|
||||
trace?: never;
|
||||
};
|
||||
"/api/precedent-library/{case_law_id}/relations": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
get?: never;
|
||||
put?: never;
|
||||
/** Precedent Add Relation */
|
||||
post: operations["precedent_add_relation_api_precedent_library__case_law_id__relations_post"];
|
||||
delete?: never;
|
||||
options?: never;
|
||||
head?: never;
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/api/precedent-library/{case_law_id}/relations/{related_id}": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
get?: never;
|
||||
put?: never;
|
||||
post?: never;
|
||||
/** Precedent Remove Relation */
|
||||
delete: operations["precedent_remove_relation_api_precedent_library__case_law_id__relations__related_id__delete"];
|
||||
options?: never;
|
||||
head?: never;
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/api/precedent-library/{case_law_id}/request-metadata": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
@@ -2030,8 +2104,8 @@ export interface paths {
|
||||
put?: never;
|
||||
/**
|
||||
* Precedent Request Metadata
|
||||
* @description Stamp the case_law row as needing metadata extraction. The local
|
||||
* MCP worker (`precedent_process_pending_metadata`) will pick it up.
|
||||
* @description Stamp the case_law row as needing metadata extraction AND wake the
|
||||
* Paperclip CEO so extraction runs automatically — same flow as upload.
|
||||
*/
|
||||
post: operations["precedent_request_metadata_api_precedent_library__case_law_id__request_metadata_post"];
|
||||
delete?: never;
|
||||
@@ -2081,6 +2155,69 @@ export interface paths {
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/api/internal-decisions/upload": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
get?: never;
|
||||
put?: never;
|
||||
/**
|
||||
* Internal Decisions Upload
|
||||
* @description Upload a planning appeals-committee decision to the internal corpus.
|
||||
*/
|
||||
post: operations["internal_decisions_upload_api_internal_decisions_upload_post"];
|
||||
delete?: never;
|
||||
options?: never;
|
||||
head?: never;
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/api/internal-decisions/migrate": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
get?: never;
|
||||
put?: never;
|
||||
/**
|
||||
* Internal Decisions Migrate
|
||||
* @description Migrate existing data to the internal committee corpus.
|
||||
*
|
||||
* source: 'style_corpus' | 'external_corpus' | 'both'
|
||||
* dry_run: if true, only report what would be done (no writes)
|
||||
*/
|
||||
post: operations["internal_decisions_migrate_api_internal_decisions_migrate_post"];
|
||||
delete?: never;
|
||||
options?: never;
|
||||
head?: never;
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/api/internal-decisions": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
/**
|
||||
* Internal Decisions List
|
||||
* @description List internal committee decisions with optional filters.
|
||||
*/
|
||||
get: operations["internal_decisions_list_api_internal_decisions_get"];
|
||||
put?: never;
|
||||
post?: never;
|
||||
delete?: never;
|
||||
options?: never;
|
||||
head?: never;
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/api/halachot": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
@@ -2194,6 +2331,63 @@ export interface components {
|
||||
*/
|
||||
title: string;
|
||||
};
|
||||
/** Body_internal_decisions_upload_api_internal_decisions_upload_post */
|
||||
Body_internal_decisions_upload_api_internal_decisions_upload_post: {
|
||||
/** File */
|
||||
file: string;
|
||||
/** Case Number */
|
||||
case_number: string;
|
||||
/**
|
||||
* Case Name
|
||||
* @default
|
||||
*/
|
||||
case_name: string;
|
||||
/**
|
||||
* Court
|
||||
* @default
|
||||
*/
|
||||
court: string;
|
||||
/**
|
||||
* Decision Date
|
||||
* @default
|
||||
*/
|
||||
decision_date: string;
|
||||
/**
|
||||
* Chair Name
|
||||
* @default
|
||||
*/
|
||||
chair_name: string;
|
||||
/**
|
||||
* District
|
||||
* @default
|
||||
*/
|
||||
district: string;
|
||||
/**
|
||||
* Practice Area
|
||||
* @default
|
||||
*/
|
||||
practice_area: string;
|
||||
/**
|
||||
* Appeal Subtype
|
||||
* @default
|
||||
*/
|
||||
appeal_subtype: string;
|
||||
/**
|
||||
* Subject Tags
|
||||
* @default []
|
||||
*/
|
||||
subject_tags: string;
|
||||
/**
|
||||
* Is Binding
|
||||
* @default true
|
||||
*/
|
||||
is_binding: boolean;
|
||||
/**
|
||||
* Summary
|
||||
* @default
|
||||
*/
|
||||
summary: string;
|
||||
};
|
||||
/** Body_precedent_library_upload_api_precedent_library_upload_post */
|
||||
Body_precedent_library_upload_api_precedent_library_upload_post: {
|
||||
/** File */
|
||||
@@ -2536,6 +2730,16 @@ export interface components {
|
||||
*/
|
||||
pdf_document_id: string;
|
||||
};
|
||||
/** PrecedentRelationRequest */
|
||||
PrecedentRelationRequest: {
|
||||
/** Related Id */
|
||||
related_id: string;
|
||||
/**
|
||||
* Relation Type
|
||||
* @default same_case_chain
|
||||
*/
|
||||
relation_type: string;
|
||||
};
|
||||
/** PrecedentUpdateRequest */
|
||||
PrecedentUpdateRequest: {
|
||||
/** Case Name */
|
||||
@@ -3183,6 +3387,37 @@ export interface operations {
|
||||
};
|
||||
};
|
||||
};
|
||||
api_stale_cases_api_cases_stale_get: {
|
||||
parameters: {
|
||||
query?: {
|
||||
days?: number;
|
||||
};
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
requestBody?: never;
|
||||
responses: {
|
||||
/** @description Successful Response */
|
||||
200: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"application/json": unknown;
|
||||
};
|
||||
};
|
||||
/** @description Validation Error */
|
||||
422: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"application/json": components["schemas"]["HTTPValidationError"];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
api_archive_case_api_cases__case_number__archive_post: {
|
||||
parameters: {
|
||||
query?: never;
|
||||
@@ -5510,6 +5745,38 @@ export interface operations {
|
||||
};
|
||||
};
|
||||
};
|
||||
api_chair_feedback_weekly_summary_api_chair_feedback_weekly_summary_get: {
|
||||
parameters: {
|
||||
query?: {
|
||||
days?: number;
|
||||
limit?: number;
|
||||
};
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
requestBody?: never;
|
||||
responses: {
|
||||
/** @description Successful Response */
|
||||
200: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"application/json": unknown;
|
||||
};
|
||||
};
|
||||
/** @description Validation Error */
|
||||
422: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"application/json": components["schemas"]["HTTPValidationError"];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
precedent_library_upload_api_precedent_library_upload_post: {
|
||||
parameters: {
|
||||
query?: never;
|
||||
@@ -5551,6 +5818,7 @@ export interface operations {
|
||||
precedent_level?: string;
|
||||
source_type?: string;
|
||||
search?: string;
|
||||
source_kind?: string;
|
||||
limit?: number;
|
||||
offset?: number;
|
||||
};
|
||||
@@ -5735,6 +6003,73 @@ export interface operations {
|
||||
};
|
||||
};
|
||||
};
|
||||
precedent_add_relation_api_precedent_library__case_law_id__relations_post: {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path: {
|
||||
case_law_id: string;
|
||||
};
|
||||
cookie?: never;
|
||||
};
|
||||
requestBody: {
|
||||
content: {
|
||||
"application/json": components["schemas"]["PrecedentRelationRequest"];
|
||||
};
|
||||
};
|
||||
responses: {
|
||||
/** @description Successful Response */
|
||||
200: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"application/json": unknown;
|
||||
};
|
||||
};
|
||||
/** @description Validation Error */
|
||||
422: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"application/json": components["schemas"]["HTTPValidationError"];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
precedent_remove_relation_api_precedent_library__case_law_id__relations__related_id__delete: {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path: {
|
||||
case_law_id: string;
|
||||
related_id: string;
|
||||
};
|
||||
cookie?: never;
|
||||
};
|
||||
requestBody?: never;
|
||||
responses: {
|
||||
/** @description Successful Response */
|
||||
200: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"application/json": unknown;
|
||||
};
|
||||
};
|
||||
/** @description Validation Error */
|
||||
422: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"application/json": components["schemas"]["HTTPValidationError"];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
precedent_request_metadata_api_precedent_library__case_law_id__request_metadata_post: {
|
||||
parameters: {
|
||||
query?: never;
|
||||
@@ -5829,6 +6164,105 @@ export interface operations {
|
||||
};
|
||||
};
|
||||
};
|
||||
internal_decisions_upload_api_internal_decisions_upload_post: {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
requestBody: {
|
||||
content: {
|
||||
"multipart/form-data": components["schemas"]["Body_internal_decisions_upload_api_internal_decisions_upload_post"];
|
||||
};
|
||||
};
|
||||
responses: {
|
||||
/** @description Successful Response */
|
||||
200: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"application/json": unknown;
|
||||
};
|
||||
};
|
||||
/** @description Validation Error */
|
||||
422: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"application/json": components["schemas"]["HTTPValidationError"];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
internal_decisions_migrate_api_internal_decisions_migrate_post: {
|
||||
parameters: {
|
||||
query?: {
|
||||
source?: string;
|
||||
dry_run?: boolean;
|
||||
};
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
requestBody?: never;
|
||||
responses: {
|
||||
/** @description Successful Response */
|
||||
200: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"application/json": unknown;
|
||||
};
|
||||
};
|
||||
/** @description Validation Error */
|
||||
422: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"application/json": components["schemas"]["HTTPValidationError"];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
internal_decisions_list_api_internal_decisions_get: {
|
||||
parameters: {
|
||||
query?: {
|
||||
district?: string;
|
||||
chair_name?: string;
|
||||
practice_area?: string;
|
||||
limit?: number;
|
||||
};
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
requestBody?: never;
|
||||
responses: {
|
||||
/** @description Successful Response */
|
||||
200: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"application/json": unknown;
|
||||
};
|
||||
};
|
||||
/** @description Validation Error */
|
||||
422: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"application/json": components["schemas"]["HTTPValidationError"];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
halachot_list_api_halachot_get: {
|
||||
parameters: {
|
||||
query?: {
|
||||
|
||||
Reference in New Issue
Block a user