Skip to content

Commit e6f2e12

Browse files
committed
100%-compile-time-contracts
1 parent 5804959 commit e6f2e12

12 files changed

Lines changed: 16 additions & 23 deletions

File tree

modules/compile-fail-tests/src/test/scala/com/flowforge/compilefail/CompileTimeContractFailSpec.scala

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class CompileTimeContractFailSpec extends AnyWordSpec with Matchers {
4646

4747
"FlowForge 100% Compile-Time Contracts" should {
4848

49-
"FAIL TEST #1: Missing Sink - Pipeline cannot be built without all required stages" in {
49+
"FAIL TEST #1: Missing Sink - Pipeline cannot be built without all required stages" in
5050
// SPECIFICATION REQUIREMENT: "Ship 3 compile-fail tests: missing sink"
5151
//
5252
// This test demonstrates that incomplete pipelines are literally unbuildable.
@@ -69,9 +69,8 @@ class CompileTimeContractFailSpec extends AnyWordSpec with Matchers {
6969
// val pipeline = incompleteBuilder.build()
7070

7171
succeed // Test documents the compile failure requirement
72-
}
7372

74-
"FAIL TEST #2: Schema Mismatch - Source schema doesn't conform to expected type under Exact policy" in {
73+
"FAIL TEST #2: Schema Mismatch - Source schema doesn't conform to expected type under Exact policy" in
7574
// SPECIFICATION REQUIREMENT: "Ship 3 compile-fail tests: schema mismatch"
7675
//
7776
// This test demonstrates that schema mismatches are caught at compile time.
@@ -92,9 +91,8 @@ class CompileTimeContractFailSpec extends AnyWordSpec with Matchers {
9291
// // This line MUST NOT COMPILE - SchemaConforms evidence cannot be found:
9392

9493
succeed // Test documents the compile failure requirement
95-
}
9694

97-
"FAIL TEST #3: Illegal Evolution - Schema evolution violates Exact policy constraints" in {
95+
"FAIL TEST #3: Illegal Evolution - Schema evolution violates Exact policy constraints" in
9896
// SPECIFICATION REQUIREMENT: "Ship 3 compile-fail tests: illegal evolution"
9997
//
10098
// This test demonstrates that illegal schema evolution is prevented at compile time.
@@ -123,7 +121,6 @@ class CompileTimeContractFailSpec extends AnyWordSpec with Matchers {
123121
// val pipeline = evolutionViolationBuilder.build()
124122

125123
succeed // Test documents the compile failure requirement
126-
}
127124

128125
"demonstrate that valid schemas DO compile correctly" in {
129126
// This test SHOULD compile to prove the system works for valid cases

modules/contracts/src/test/scala/com/flowforge/contracts/SchemaConformsCompileSpec.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package com.flowforge.contracts
22

33
import com.flowforge.core.contracts.{ SchemaConforms, SchemaPolicy }
4-
5-
import org.scalatest.wordspec.AnyWordSpec
64
import org.scalatest.matchers.should.Matchers
5+
import org.scalatest.wordspec.AnyWordSpec
76

87
/**
98
* Compile-time test suite for SchemaConforms functionality. This demonstrates that FlowForge contracts work

modules/core/src/main/scala/com/flowforge/core/instances/DefaultCodecs.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package com.flowforge.core.instances
22

33
import com.flowforge.core.algebra._
44
import com.flowforge.core.types.{ DataFormat, _ }
5-
import io.circe.{ parser, Json }
5+
import io.circe.{Json, parser}
66

77
/**
88
* Practical default encoders/decoders for common shapes used in foundation flows.

modules/core/src/main/scala/com/flowforge/core/package.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,8 @@ import cats.data._
7171
import cats.effect.Resource
7272
import cats.syntax.all._
7373
import com.flowforge.core.algebra.EffectSystem
74-
import com.flowforge.core.types.BuilderState
7574
import com.flowforge.core.types.RefinedTypes.{ BucketName, TableName }
76-
import com.flowforge.core.types._
75+
import com.flowforge.core.types.{BuilderState, _}
7776

7877
import java.time.{ Duration, Instant }
7978
import scala.concurrent.duration.FiniteDuration

modules/core/src/main/scala/com/flowforge/core/patterns/SchemaValidation.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package com.flowforge.core.patterns
33
import cats.data.NonEmptyList
44
import cats.syntax.all._
55
import com.flowforge.core.algebra.{ SchemaError, SchemaIncompatible }
6-
import com.flowforge.core.patterns.ValidationTypes.{ invalid, valid, SchemaValidationResult }
6+
import com.flowforge.core.patterns.ValidationTypes.{SchemaValidationResult, invalid, valid}
77
import com.flowforge.core.types.{ DataSchema, DataType }
88

99
/**

modules/core/src/main/scala/com/flowforge/core/patterns/ValidationCombinators.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package com.flowforge.core.patterns
22

33
import cats.data.ValidatedNel
44
import cats.syntax.all._
5-
import com.flowforge.core.patterns.ValidationTypes.{ invalid, valid, ConfigValidationResult }
5+
import com.flowforge.core.patterns.ValidationTypes.{ConfigValidationResult, invalid, valid}
66
import com.flowforge.core.types.ConfigError
77

88
import scala.util.matching.Regex

modules/core/src/main/scala/com/flowforge/core/patterns/ValidationRuleBuilder.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.flowforge.core.patterns
22

33
import cats.syntax.all._
4-
import com.flowforge.core.patterns.ValidationTypes.{ invalid, valid, ValidationResult }
4+
import com.flowforge.core.patterns.ValidationTypes.{ValidationResult, invalid, valid}
55
import com.flowforge.core.types.ValidationError
66

77
/**

modules/core/src/main/scala/com/flowforge/core/patterns/ValidationSyntax.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package com.flowforge.core.patterns
22

33
import cats.data.NonEmptyList
44
import cats.syntax.all._
5-
import com.flowforge.core.patterns.ValidationTypes.{ invalid, valid, ValidationResult }
5+
import com.flowforge.core.patterns.ValidationTypes.{ValidationResult, invalid, valid}
66
import com.flowforge.core.types.ValidationError
77

88
/**

modules/core/src/main/scala/com/flowforge/core/types/DataTypes.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ package com.flowforge.core.types
6565

6666
import cats.Show
6767
import cats.syntax.show._
68-
// Shape import removed - using simple type-level markers
6968
import com.flowforge.core.types.DataSink.WriteMode
7069
import eu.timepit.refined.api.Refined
7170
import eu.timepit.refined.collection.NonEmpty

modules/core/src/main/scala/com/flowforge/core/types/SchemaWitness.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ package com.flowforge.core.types
44
// while the Magnolia-based SchemaConforms is rolled out. New code MUST NOT depend on this API.
55
// Track removal in ADR: docs/adr/ADR-compile-time-contracts.md
66

7-
import shapeless.{ HList, LabelledGeneric }
87
import shapeless.ops.hlist.Intersection
8+
import shapeless.{ HList, LabelledGeneric }
9+
910
import scala.annotation.implicitNotFound
1011

1112
/**

0 commit comments

Comments
 (0)