Skip to content

Updates from IceFog - #53

Merged
datajohnson merged 41 commits into
ytgov:mainfrom
icefoganalytics:main
Apr 15, 2026
Merged

datajohnson merged 41 commits into
ytgov:mainfrom
icefoganalytics:main

Conversation

@klondikemarlen

Copy link
Copy Markdown
Contributor

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.
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.
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.
… 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
@datajohnson
datajohnson merged commit 6e6d402 into ytgov:main Apr 15, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants