UNPKG

mcp-quickbase

Version:

Work with Quickbase via Model Context Protocol

146 lines (119 loc) 5.68 kB
# Task: [RELS.2002]: Implement UpdateRelationshipTool ## Status - [x] **Task completed** - acceptance criteria met - [x] **Tests pass** - tests executed and passing (or N/A if no tests) - [x] **Verified** - by the verify-task agent **Note on "Tests pass"**: - If tests were created/modified, you MUST run them and show output - "Tests pass" means tests were EXECUTED and all passed - "Tests pass - N/A" is only valid for documentation-only tickets - Test file existence alone does NOT satisfy this requirement ## Agents - implement-feature - unit-test-runner - verify-task - commit-task ## Summary Implement the `update_relationship` tool to add lookup and summary fields to existing relationships. This tool is ADDITIVE ONLY - it will not delete existing fields. ## Background This tool enhances existing relationships by adding new lookup or summary fields. It's critical that agents understand this is additive only - fields can only be removed by using separate field deletion tools. The tool description must clearly state "ADDITIVE ONLY" to prevent confusion. This completes Phase 2 from plan.md: Write Operations - Create and Update. ## Acceptance Criteria - [x] Tool name is `update_relationship` (snake_case) - [x] Tool extends BaseTool with proper TypeScript types - [x] Adds lookup fields to existing relationships - [x] Adds summary fields to existing relationships - [x] JSON Schema conditional validation: summary_accumulation_type required when summary_field_id provided - [x] Tool description clearly states "ADDITIVE ONLY" - [x] Tool description explains how to remove fields (use field deletion tools) - [x] Tool registered in relationships/index.ts - [x] Unit tests cover additive behavior and all error scenarios - [x] All tests pass with `npm test` ## Technical Requirements - Endpoint: POST `/tables/{tableId}/relationships/{relationshipId}` - Parameters similar to create_relationship but require relationship_id - Support adding lookup_field_ids - Support adding summary field with accumulation type - Conditional validation: summary_accumulation_type required if summary_field_id provided - Return updated relationship structure - Does NOT delete existing fields (API behavior, verify in tests) ## Implementation Notes From architecture.md: ```typescript interface UpdateRelationshipParams { table_id: string; // Required: Child table ID relationship_id: number; // Required: Relationship ID (foreign key field ID) lookup_field_ids?: number[]; // Optional: Additional parent field IDs for lookups summary_field_id?: number; // Optional: Child field ID to summarize summary_label?: string; // Optional: Label for summary field summary_accumulation_type?: string; // Required if summary_field_id summary_where?: string; // Optional: Quickbase query filter } interface UpdateRelationshipResult { id: number; parentTableId: string; childTableId: string; foreignKeyField: FieldInfo; lookupFields: FieldInfo[]; summaryFields: FieldInfo[]; } ``` JSON Schema must use same conditional validation as create_relationship: ```typescript if: { properties: { summary_field_id: { type: 'number' } }, required: ['summary_field_id'] }, then: { required: ['summary_accumulation_type'] } ``` Tool description (from architecture.md): ``` Adds lookup fields and/or summary fields to an existing relationship. This operation is ADDITIVE ONLY - it will not delete existing lookup or summary fields. Use this to enhance relationships with additional calculated fields. To remove fields from a relationship, you must delete them individually using the field deletion tools. ``` ## Dependencies - RELS.1001 - Domain setup complete - RELS.2001 - CreateRelationshipTool provides pattern for summary validation - Existing: Field deletion tools (mentioned in description) ## Risk Assessment - **Risk**: Agents expect update to replace fields instead of adding - **Mitigation**: Clear "ADDITIVE ONLY" in description; test and document behavior - **Risk**: Adding fields that already exist - **Mitigation**: Handle API response appropriately; test edge case - **Risk**: Empty update (no fields to add) - **Mitigation**: Allow but may be no-op; test and document behavior ## Files/Packages Affected - src/tools/relationships/update_relationship.ts (new file) - src/tools/relationships/index.ts (update exports and registration) - src/__tests__/tools/relationships.test.ts (extend tests) ## Deliverables Produced Documents created in `deliverables/` directory: - None ## Verification Notes Verify-task agent should confirm tests cover all critical paths from quality-strategy.md: Happy Path: - Add lookup fields to existing relationship - Add summary field to existing relationship - Add both lookup and summary fields Error Cases: - Relationship not found - Invalid lookup field IDs - Missing accumulation type when summary_field_id provided (validated by JSON Schema) Edge Cases: - Adding fields that already exist (verify additive behavior) - Empty update (no fields to add) Verify conditional validation works: - Providing summary_field_id without summary_accumulation_type MUST fail validation Verify additive behavior: - Adding new lookup fields doesn't remove existing ones - Adding summary field doesn't affect existing lookups - Result includes ALL fields (existing + newly added) ## Verification Audit <!-- Audit log maintained by verify-task agent for enterprise compliance --> | Date | Agent | Decision | Notes | |------|-------|----------|-------| | 2025-12-28 | verify-task | PASS | All 10 acceptance criteria met, 143 tests passing, 100% coverage on relationships tools |