Updates from IceFog - #53
Merged
Merged
Conversation
Reviewed all README.md files across wrap, travel-authorization, and
elcc-data-management and merged net-new patterns into the TK master
documentation.
Key additions:
- Documentation sharding model: AGENTS.md vs subsystem README vs
agents/workflows vs agents/templates tiers
- API module type conventions: AsIndex/AsShow, FiltersOptions, enums,
deletedAt exclusion, ResourcePolicy export
- Plural/singular composable patterns: skipWatchIf array watch, typed
reactive state, Ref<number|null|undefined>, null guard in save()
- Page-based edit pattern: EditCard/EditDataTable/NewPage/EditPage,
createAndReturn/saveAndReturn/deleteAndReturn naming
- Unique field validation: {Model}{Field}UniqueTextField with excludingIds
- Serializer association pattern: destructure first, explicit preload
errors, serialize into named locals
- Queries directory guidance: when to extract, focus rules, test mirror
- Controller request lifecycle diagram
- Layout vs Page suffix convention with route naming
- Workflow frontmatter and reference commit conventions
- Component guidance sharding rule (granular notes go in components/README)
- Test quick mode: --skip-setup flag and single container rule for agents
- Plan file naming: Type, Title, Date.md format with valid type categories
- Frontend code style additions: useTemplateRef, date-only form state,
writable proxy avoidance, Vuetify-only classes, semantic colors,
date formatter guard ordering, browser setTimeout number type
Introduces on-the-fly DOCX generation for the confidentiality receipt (Section 68 receipt) and a separate upload endpoint for storing the signed version. Previously, a confidentiality agreement was incorrectly auto-generated and stored on every ISA update. - Generate route streams a fresh DOCX buffer on demand; nothing is persisted - Signed upload stored as signedConfidentialityReceipt attachment - Removes syncConfidentialityAgreement auto-generation from the update service - Renames model associations and serializer fields to match the two-document architecture
The sign page previously only accepted a signed acknowledgement. Agreements accepted in confidence also require a signed confidentiality receipt, which was not handled. This adds support for uploading a signed confidentiality receipt alongside the acknowledgement when signing. The receipt is stored as an attachment and returned in the show response. The download button for the unsigned receipt draft is also surfaced on the sign page so signatories can retrieve it before uploading. To verify: open a draft ISA with confidentiality type set to Accepted in Confidence and navigate to the sign page. Two file inputs and two download buttons should appear. Both files are required to submit.
Signed ISAs with confidentiality type Accepted in Confidence now have a download link for the signed confidentiality receipt in the actions menu, visible only when the receipt attachment exists. Also wires up the backend download controller and route, serializes the receipt attachment in the show response, and ensures all service reload calls include the new association.
Make program area/branch conditional on presence of branch or unit.
Move backend and frontend conventions closer to the code they describe:
api/src/{services,controllers,policies,models,db}/README.md,
api/tests/README.md, web/src/{api,use,components}/README.md.
Each subsystem README links to its agents/templates/ counterpart.
AGENTS.md reduced from ~850 lines to ~180 lines.
Ports the feature from icefoganalytics/travel-authorization: - icefoganalytics/travel-authorization@00e37b8 - icefoganalytics/travel-authorization@888a3cb When the frontend runs inside Docker, Vue Devtools cannot open files directly on the host. This adds a small TCP bridge (port 3333) that Vite proxies /__open-in-editor requests to. The bridge translates container paths (/usr/src/web/...) to host paths and launches the editor with --goto. On Linux, docker-compose.development.linux.yml maps host.docker.internal to the host gateway so the container can reach the bridge.
Ports from icefoganalytics/travel-authorization: - icefoganalytics/travel-authorization@c721e80 Original source: https://github.com/icefoganalytics/wrap/blob/dfe404f61bdd10417e57c36c76cac179027406f6/bin/api-wait.mjs The web service now waits for the API /_status endpoint to return 200 before starting, preventing race conditions on dev up.
…ringAgreementCard.
Respond to the proxy immediately then detach the editor process so the TCP socket closes before windsurf opens. Previously system() blocked the serve loop while the editor launched, causing the proxy to time out with no response.
Renames component to follow consistent naming pattern with other draft action buttons.
…yAcknowledgementController.
…ntiality-acknowledgement.
…erate-confidentiality-receipt.
…identiality-acknowledgement.
…ement-template.docx.
…wledgementPath in frontend.
Was checking policy.update (always false for signed ISAs) instead of whether the agreement is linked to a knowledge item.
The update and destroy methods unconditionally return false. Reduced from 12 test cases (6 each) to 2 test cases (1 each) to match the simplified implementation.
…king. Fixes test hanging by updating mockCurrentUser to reload user with adminGroups and adminInformationSharingAgreementAccessGrants includes when mocking ensureAndAuthorizeCurrentUser. This prevents the authorization middleware from trying to connect to external services during test execution.
- Update foreignKey from accessGrantId to informationSharingAgreementAccessGrantId to match VIEW schema - Remove policy logic from controller query to prevent 404 when access grant has no siblings - Policy now handles access control instead of query filtering
- Update npm from 10.9.0 to 11.12.1 in all Dockerfiles - Fixes hanging issue with npm clean-install on Alpine Linux - Affects api, archiver, web, and root Dockerfiles
Regenerated lockfile after updating npm to 11.12.1 in development.Dockerfile.
Prepares for renaming signedAcknowledgement to signedConfidentialityAcknowledgement in information-sharing-agreement model.
…al emojis, and body structure markers.
… acknowledgement. Updates controller class name, file name, and route path for naming consistency.
…gement API. Updates signed actions menu and download button components to use the renamed signed confidentiality acknowledgement API and route.
Updates model association, serializer, services, policies, and frontend components to use the new naming convention for consistency.
…ntiality acknowledgement. Updates component file name, import, and usage for naming consistency.
Renames buildConfidentialityAgreementFileName to buildConfidentialityReceiptFileName for consistency with buildConfidentialityAcknowledgementFileName and to accurately reflect its purpose.
… attachment. Why? The loadAttachment query was missing associationName in the where clause, so findOne returned whichever attachment row came first rather than the acknowledgement specifically.
Extracts attachment display into a reusable AttachmentAttributesRow and InformationSharingAgreementSignedDocumentsCard. Adds download support for the signed confidentiality receipt alongside the existing acknowledgement.
Also clarifies that commit subject lines should describe the outcome rather than enumerate what was added.
…plate-requirement TK-23: Add Confidentiality Receipt Requirement to ISA Sign Flow
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Includes PRs: