Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
9be7d04
chore(build): standardize package manager and verification commands
support371 Jul 9, 2026
d627396
ci: add one deterministic verification gate for agents and humans
support371 Jul 9, 2026
df5c518
ci: remove duplicate Vercel production deployment workflow
support371 Jul 9, 2026
f378e0e
docs(agent): define controlled agent-first delivery rules
support371 Jul 9, 2026
7e546ce
docs(build): add agent-first free-tier delivery flow
support371 Jul 9, 2026
98969fb
docs(github): add structured agent task template
support371 Jul 9, 2026
56d81c7
docs(github): add agent-ready pull request template
support371 Jul 9, 2026
3990df4
ci: use current Node-compatible GitHub Actions
support371 Jul 9, 2026
31573c8
ci(security): update CodeQL workflow action runtimes
support371 Jul 9, 2026
df31627
chore(build): add preview verification command
support371 Jul 9, 2026
42735be
ci: make Vercel previews the automatic verification gate
support371 Jul 9, 2026
6604bd9
ci: keep GitHub verification available without blocking free-tier PRs
support371 Jul 9, 2026
5f1ef14
ci(security): make CodeQL manual while Actions access is constrained
support371 Jul 9, 2026
67e57c6
docs(agent): document preview verification fallback
support371 Jul 9, 2026
984b9c3
docs(build): align workflow with preview verification fallback
support371 Jul 9, 2026
1d32123
fix(vercel): fail closed for duplicate project deployments
support371 Jul 9, 2026
8f31d12
docs(vercel): document canonical project build guard
support371 Jul 9, 2026
36efa39
docs(vercel): record completed duplicate-project disconnect
support371 Jul 9, 2026
2b757bd
chore(vercel): trigger canonical connection verification
support371 Jul 9, 2026
41050e0
fix(vercel): retain lint and test files for preview verification
support371 Jul 9, 2026
9e1295d
docs(vercel): mark duplicate projects disconnected
support371 Jul 9, 2026
30008d4
docs(vercel): record successful canonical preview gate
support371 Jul 9, 2026
a0d19c4
docs(vercel): finalize canonical preview record
support371 Jul 9, 2026
964adf0
docs(vercel): lock verified canonical record
support371 Jul 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
117 changes: 117 additions & 0 deletions .github/ISSUE_TEMPLATE/agent-task.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
name: Agent implementation task
description: Define a bounded development task for an AI coding agent
title: "[Agent Task]: "
labels: []
body:
- type: markdown
attributes:
value: |
Read `AGENTS.md` and `docs/AGENT_BUILD_FLOW.md` before implementation. Do not include secrets or real identity documents.

- type: textarea
id: objective
attributes:
label: Objective
description: State one measurable user or business outcome.
placeholder: A public contact enquiry is stored before the visitor sees a success message.
validations:
required: true

- type: textarea
id: acceptance
attributes:
label: Acceptance criteria
description: List observable conditions that prove the task is complete.
placeholder: |
- Valid submissions are persisted.
- Invalid input returns 400.
- Storage failure returns 503.
- Tests cover success and failure paths.
validations:
required: true

- type: textarea
id: scope
attributes:
label: In-scope routes, roles, and files
description: Identify affected user roles, routes, models, or integrations.
validations:
required: true

- type: textarea
id: exclusions
attributes:
label: Explicit exclusions
description: State what the agent must not change or activate.
placeholder: |
- No paid service activation.
- No production credentials.
- No direct commits to main.
- No sensitive document upload.
validations:
required: true

- type: dropdown
id: data
attributes:
label: Sensitive-data level
options:
- None or public content
- Account or contact information
- Authentication or authorization
- Identity, financial, legal, or regulated information
validations:
required: true

- type: dropdown
id: billing
attributes:
label: Billing impact
options:
- None
- Uses an existing free or already-approved service
- May create metered usage
- Requires owner approval before implementation can finish
validations:
required: true

- type: textarea
id: dependencies
attributes:
label: Manual and provider dependencies
description: List accounts, approvals, provider decisions, or credentials the owner must supply.
placeholder: None, or describe the exact owner-only action.
validations:
required: true

- type: textarea
id: tests
attributes:
label: Required verification
description: Include unit, authorization, fail-closed, preview, and production checks as applicable.
placeholder: |
- pnpm run verify
- Vercel preview route check
- No external billable calls in tests
validations:
required: true

- type: textarea
id: rollback
attributes:
label: Rollback expectation
description: Explain how the change can be disabled or reverted safely.
validations:
required: true

- type: checkboxes
id: guardrails
attributes:
label: Guardrails
options:
- label: I have not placed secrets, passwords, API keys, or real sensitive documents in this issue.
required: true
- label: The task does not authorize billing, legal claims, certifications, or regulated-service activation.
required: true
- label: The agent must use a branch and pull request.
required: true
50 changes: 50 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
## Objective

Closes #

Describe the single measurable outcome delivered by this pull request.

## Changes

-

## Files and data models affected

-

## Trust, security, privacy, and billing review

- [ ] No secrets or real sensitive documents are included.
- [ ] Public wording does not overstate live, verified, encrypted, certified, guaranteed, or continuous capability.
- [ ] Authorization and validation boundaries were reviewed.
- [ ] Missing provider configuration fails closed.
- [ ] No paid plan, billing, or metered feature was activated.
- [ ] Database changes include compatibility and rollback notes, or no schema change was made.

## Verification

- [ ] `pnpm run verify`
- [ ] Relevant authorization and validation failures tested
- [ ] Vercel preview checked
- [ ] Build/runtime logs checked
- [ ] No billable external calls made during testing

Evidence:

```text
Paste concise command results or route/status checks here.
```

## Manual actions remaining

State exactly what requires the business owner, provider account, legal approval, or production credential. Write `None` when no manual action remains.

## Rollback

Describe how to revert, disable, or fail closed safely.

## Agent declaration

- [ ] I read `AGENTS.md` and `docs/AGENT_BUILD_FLOW.md`.
- [ ] This pull request stays within the linked issue scope.
- [ ] I am not claiming completion while a required gate is failing.
102 changes: 31 additions & 71 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,91 +1,51 @@
name: CI (Tests & Validation Only - Vercel Handles Deployment)
name: Manual Build Verification

on:
pull_request:
branches: [main]
workflow_dispatch:

jobs:
test:
name: Unit Tests
runs-on: ubuntu-22.04
permissions:
contents: read

steps:
- name: Checkout
uses: actions/checkout@v4
concurrency:
group: manual-build-verification-${{ github.ref }}
cancel-in-progress: true

- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 9

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Generate Prisma client
run: pnpm run db:generate
env:
POSTGRES_PRISMA_URL: postgresql://ci:ci@localhost:5432/gem_ci
POSTGRES_URL_NON_POOLING: postgresql://ci:ci@localhost:5432/gem_ci

- name: Run unit tests
run: pnpm test
env:
NODE_ENV: test
JWT_SECRET: ci-test-secret-min-32-characters-long-placeholder
POSTGRES_PRISMA_URL: postgresql://ci:ci@localhost:5432/gem_ci
POSTGRES_URL_NON_POOLING: postgresql://ci:ci@localhost:5432/gem_ci

lint-and-build:
name: Lint & Build
jobs:
verify:
name: Lint, Typecheck, Test, Build
runs-on: ubuntu-22.04
needs: test
timeout-minutes: 30

env:
NODE_ENV: test
JWT_SECRET: ci-test-secret-min-32-characters-long-placeholder
POSTGRES_PRISMA_URL: postgresql://ci:ci@localhost:5432/gem_ci
POSTGRES_URL_NON_POOLING: postgresql://ci:ci@localhost:5432/gem_ci
NEXT_PUBLIC_APP_URL: https://www.gemcybersecurityassist.com
NEXT_PUBLIC_APP_NAME: GEM Enterprise
NEXT_PUBLIC_AI_DISCLOSURE_TEXT: GEM Concierge is an AI assistant. Responses are informational and require human review for sensitive decisions.
AUDIT_ENABLED: "true"
SMTP_HOST: ""
SMTP_PORT: "587"
SMTP_USER: ""
SMTP_PASS: ""
CRON_SECRET: ci-cron-secret

steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 9
uses: pnpm/action-setup@v6

- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: 20
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Generate Prisma client
run: pnpm run db:generate
env:
POSTGRES_PRISMA_URL: postgresql://ci:ci@localhost:5432/gem_ci
POSTGRES_URL_NON_POOLING: postgresql://ci:ci@localhost:5432/gem_ci

- name: Lint
run: pnpm run lint

- name: Build
run: pnpm run build
env:
POSTGRES_PRISMA_URL: postgresql://ci:ci@localhost:5432/gem_ci
POSTGRES_URL_NON_POOLING: postgresql://ci:ci@localhost:5432/gem_ci
JWT_SECRET: ${{ secrets.JWT_SECRET || 'ci-build-secret-min-32-characters-long' }}
NEXT_PUBLIC_APP_URL: https://gem-enterprise.vercel.app
NEXT_PUBLIC_APP_NAME: GEM Enterprise
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
NEXT_PUBLIC_AI_DISCLOSURE_TEXT: ${{ secrets.NEXT_PUBLIC_AI_DISCLOSURE_TEXT || 'GEM Concierge is an AI assistant. Responses are for informational purposes only.' }}
AUDIT_ENABLED: 'true'
SMTP_HOST: ''
SMTP_PORT: '587'
SMTP_USER: ''
SMTP_PASS: ''
CRON_SECRET: ci-cron-secret
- name: Verify repository
run: pnpm run verify
Loading