Correctness Rules
Correctness rules catch structural errors that would cause evaluation or deployment failures.
COR003: String-Based Reference
Section titled “COR003: String-Based Reference”Use typed property access instead of string-based GetAtt() or Ref() calls. String references bypass type checking and break if a resource is renamed.
Severity: warning
// ❌ Triggers COR003export const fn = new _.Function({ role: GetAtt("functionRole", "Arn"), bucket: Ref("dataBucket"),});// ✅ Fixed — use typed AttrRef propertiesimport { functionRole } from "./role";import { dataBucket } from "./storage";
export const fn = new _.Function({ role: functionRole.arn, bucket: dataBucket.ref,});COR004: Unused Declarable
Section titled “COR004: Unused Declarable”Exported declarables that are never referenced by another resource in the same file may be dead infrastructure code.
Severity: warning
// ❌ Triggers COR004export const logsBucket = new _.Bucket({ bucketName: "logs",});
export const dataBucket = new _.Bucket({ bucketName: "data",});// logsBucket is never used — flagged// ✅ Fixed — reference it or remove itexport const logsBucket = new _.Bucket({ bucketName: "logs",});
export const dataBucket = new _.Bucket({ bucketName: "data", loggingConfiguration: { destinationBucketName: logsBucket.ref },});COR008: Export Required
Section titled “COR008: Export Required”All declarable instances must be exported so chant can discover them during synthesis. Non-exported resources are invisible to the build pipeline.
Severity: error
// ❌ Triggers COR008const bucket = new _.Bucket({ bucketName: "my-data",});// ✅ Fixedexport const bucket = new _.Bucket({ bucketName: "my-data",});