Skip to content

Commit 4eab526

Browse files
committed
merge: bring aws-samples#247 orchestration + Linear-MCP attachments onto linear-vercel
linear-vercel had diverged into a stale parallel fork (37 commits behind main, missing the workflow-driven-tasks system + Jira that aws-samples#247 depends on). Main has since absorbed lv's screenshot pipeline (SigV4-presigned WSS, private S3+CloudFront, de-Vercel-ize) and multi-workspace support, so lv's source was effectively a subset of deploy/247-dev. This advances linear-vercel to the deploy/247-dev tree + the 4 Linear-MCP attachments commits cherry-picked on top (issue-context probe, Attachments bucket wiring, uploads.linear.app skip, save_issue no-op detection). Both parents are recorded so linear-vercel remains a true descendant of its prior tip — no history rewrite, no force-push. Content is byte-identical to the fully-tested integ/247-attachments (agent 1123 + CDK 2586 + CLI 407 green). linear-vercel is NOT retired — it keeps its name and continues from here as the current Linear+Vercel demo branch, now carrying aws-samples#247.
2 parents eb2adc1 + f2a9496 commit 4eab526

415 files changed

Lines changed: 48066 additions & 7377 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.abca/commands/review_pr.md

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,28 @@ Then apply principal-architect judgment over the diff:
7171
together and parity fixtures were refreshed.
7272
- **Security & least privilege** — IAM scoping, Cedar HITL gates, secrets handling, path-
7373
traversal guards, input validation. Fail closed.
74+
- **Bootstrap policy coverage (CDK deploy IAM)** — When the PR adds or changes constructs,
75+
stacks, or handlers that introduce new CloudFormation resource types (new AWS services,
76+
`AWS::SQS::Queue`, `AWS::CloudFront::*`, `AWS::SecretsManager::Secret`, Lambda layers,
77+
application S3 buckets, etc.), verify the least-privilege bootstrap bundle was updated in
78+
the **same PR**:
79+
1. `cdk/src/bootstrap/policies/*.ts` — new actions and resource ARN patterns on the
80+
CloudFormation execution role.
81+
2. `cdk/src/bootstrap/resource-action-map.ts` — entry for each new CFN type (minimum
82+
create-time IAM actions).
83+
3. `BOOTSTRAP_VERSION` bumped in `cdk/src/bootstrap/version.ts` (minor when adding
84+
permissions) and artifacts regenerated (`mise //cdk:bootstrap:generate` → committed
85+
`cdk/bootstrap/policies/*.json`, `bootstrap-template.yaml`, `BOOTSTRAP_HASH`).
86+
4. `docs/design/DEPLOYMENT_ROLES.md` golden baseline updated (required by
87+
`cdk/test/bootstrap/golden-baseline.test.ts`).
88+
5. `cdk/test/bootstrap/synth-coverage.test.ts` passes — run
89+
`mise //cdk:test -- test/bootstrap/synth-coverage` or the full bootstrap suite.
90+
**Flag as blocking** if constructs changed but bootstrap policies, the action map, or
91+
version/artifacts were not updated. Missing ARN patterns (action present but resource
92+
too narrow) are a common gap — check secret/queue/bucket naming against the patterns
93+
in `application.ts` / `observability.ts`, not just action presence.
94+
See [ADR-002](../../docs/decisions/ADR-002-least-privilege-bootstrap-policies.md) and
95+
issue #350 for the failure mode this prevents.
7496
- **AWS / CDK quality** — Prefer L2 constructs, sane removal policies, no hardcoded ARNs/account
7597
IDs, cdk-nag clean. Watch for cost and operational footguns.
7698
- **Tests** — Are unit tests added/updated under the matching `*/test/` tree? Do they cover the
@@ -126,7 +148,8 @@ Summarize as a principal architect would in a PR review. Structure the output:
126148
3. **Blocking issues** — Numbered, each with `file:line`, the risk, and a suggested fix.
127149
4. **Non-blocking suggestions / nits** — Clearly separated.
128150
5. **Documentation** — What was updated, what is missing, mirror-sync status.
129-
6. **Tests & CI** — Coverage assessment and check status.
151+
6. **Tests & CI** — Coverage assessment and check status. For CDK construct/stack changes,
152+
explicitly note bootstrap synth-coverage status (pass / not applicable / missing updates).
130153
7. **Review agents run** — List each plugin/agent you invoked (Stage 3) and, for any in-scope
131154
agent you omitted, the one-line reason. This section is required — its absence means the
132155
mandatory plugin step was skipped.

.github/CODEOWNERS

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,29 @@
22

33
## Default owners for everything in the repo
44

5-
* @aws-samples/coding-agents-admin
5+
* @aws-samples/coding-agents-admin @aws-samples/coding-agents-maintainers
6+
7+
.abca @aws-samples/coding-agents-admin
8+
.claude/settings.json @aws-samples/coding-agents-admin
9+
.gitallowed @aws-samples/coding-agents-admin
10+
.gitattributes @aws-samples/coding-agents-admin
11+
.github @aws-samples/coding-agents-admin
12+
.gitignore @aws-samples/coding-agents-admin
13+
.gitleaks.toml @aws-samples/coding-agents-admin
14+
.gitleaksignore @aws-samples/coding-agents-admin
15+
.mergify.yml @aws-samples/coding-agents-admin
16+
.npmignore @aws-samples/coding-agents-admin
17+
.pre-commit-config.yaml @aws-samples/coding-agents-admin
18+
.semgrep @aws-samples/coding-agents-admin
19+
.threat-composer @aws-samples/coding-agents-admin
20+
AGENTS.md @aws-samples/coding-agents-admin
21+
CLAUDE.md @aws-samples/coding-agents-admin
22+
CODE_OF_CONDUCT.md @aws-samples/coding-agents-admin
23+
contracts @aws-samples/coding-agents-admin
24+
CONTRIBUTING.md @aws-samples/coding-agents-admin
25+
LEGAL_DISCLAIMER.md @aws-samples/coding-agents-admin
26+
LICENSE @aws-samples/coding-agents-admin
27+
mise.toml @aws-samples/coding-agents-admin
628

729
## File must end with CODEOWNERS file
830

.github/dependabot.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,14 @@ updates:
4444
groups:
4545
all-python:
4646
patterns: ["*"]
47+
ignore:
48+
# Cedar engine parity — bump in lockstep with @cedar-policy/cedar-wasm via a
49+
# dedicated coordinated PR. See docs/design/CEDAR_HITL_GATES.md §15.6 (decision #23).
50+
- dependency-name: "cedarpy"
51+
update-types:
52+
- "version-update:semver-major"
53+
- "version-update:semver-minor"
54+
- "version-update:semver-patch"
4755

4856
- package-ecosystem: "npm"
4957
directories:
@@ -59,3 +67,11 @@ updates:
5967
groups:
6068
all-npm:
6169
patterns: ["*"]
70+
ignore:
71+
# Cedar engine parity — bump in lockstep with cedarpy via a dedicated
72+
# coordinated PR. See docs/design/CEDAR_HITL_GATES.md §15.6 (decision #23).
73+
- dependency-name: "@cedar-policy/cedar-wasm"
74+
update-types:
75+
- "version-update:semver-major"
76+
- "version-update:semver-minor"
77+
- "version-update:semver-patch"

.github/workflows/auto-approve.yml

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
name: auto-approve
2+
# Approves PRs carrying the 'auto-approve' label (e.g. the scheduled
3+
# upgrade-main dependency PRs). pull_request_target is intentional and safe
4+
# here: the job never checks out or executes PR code — it only calls the
5+
# review API. Branch protection still requires the build workflow to pass.
6+
#
7+
# Trigger is `labeled` ONLY: each approval requires an explicit label event
8+
# from someone with triage+ permission. Approving on `synchronize` would
9+
# re-approve arbitrary future commits pushed to an already-labeled PR with no
10+
# human re-review — combined with Mergify's auto-merge that is an
11+
# unreviewed-merge path. The Mergify `dismiss stale approvals` rule is the
12+
# other half of this invariant: a push invalidates the bot's prior approval,
13+
# and re-approval requires removing and re-adding the label (deliberate
14+
# friction: new content needs a fresh, explicit trigger).
15+
on:
16+
pull_request_target:
17+
types:
18+
- labeled
19+
permissions:
20+
actions: none
21+
attestations: none
22+
checks: none
23+
contents: none
24+
deployments: none
25+
discussions: none
26+
id-token: none
27+
issues: none
28+
models: none
29+
packages: none
30+
pages: none
31+
pull-requests: none
32+
repository-projects: none
33+
security-events: none
34+
statuses: none
35+
jobs:
36+
auto-approve:
37+
runs-on: ubuntu-latest
38+
permissions:
39+
pull-requests: write
40+
# Only act on the auto-approve label itself, and never on fork PRs —
41+
# a fork head can be force-pushed by the fork owner after labeling.
42+
if: |
43+
github.event.label.name == 'auto-approve' &&
44+
github.event.pull_request.head.repo.full_name == github.repository
45+
steps:
46+
- uses: hmarr/auto-approve-action@f0939ea97e9205ef24d872e76833fa908a770363 # v4.0.0
47+
with:
48+
github-token: ${{ secrets.AUTOMATION_GITHUB_TOKEN }}
49+
review-message: Auto approved automated PR

.github/workflows/build.yml

Lines changed: 10 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.github/workflows/deploy.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ jobs:
140140
actions: read
141141
steps:
142142
- name: Checkout
143-
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
143+
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
144144
with:
145145
persist-credentials: false
146146

@@ -153,7 +153,7 @@ jobs:
153153
github-token: ${{ github.token }}
154154

155155
- name: Configure AWS credentials
156-
uses: aws-actions/configure-aws-credentials@7474bc4690e29a8392af63c5b98e7449536d5c3a # v4.3.1
156+
uses: aws-actions/configure-aws-credentials@e7f100cf4c008499ea8adda475de1042d6975c7b # v6.2.0
157157
with:
158158
role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
159159
aws-region: ${{ vars.AWS_REGION }}
@@ -215,7 +215,7 @@ jobs:
215215
actions: read
216216
steps:
217217
- name: Checkout
218-
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
218+
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
219219
with:
220220
persist-credentials: false
221221

@@ -228,13 +228,13 @@ jobs:
228228
github-token: ${{ github.token }}
229229

230230
- name: Configure AWS credentials
231-
uses: aws-actions/configure-aws-credentials@7474bc4690e29a8392af63c5b98e7449536d5c3a # v4.3.1
231+
uses: aws-actions/configure-aws-credentials@e7f100cf4c008499ea8adda475de1042d6975c7b # v6.2.0
232232
with:
233233
role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
234234
aws-region: ${{ vars.AWS_REGION }}
235235

236236
- name: Install mise
237-
uses: jdx/mise-action@1648a7812b9aeae629881980618f079932869151 # v4.0.1
237+
uses: jdx/mise-action@dba19683ed58901619b14f395a24841710cb4925 # v4.1.0
238238
with:
239239
cache: true
240240

.github/workflows/docs.yml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)