diff --git a/apps/tests/loop_continue_pattern4.hako b/apps/tests/loop_continue_pattern4.hako
new file mode 100644
index 00000000..fabeb5c4
--- /dev/null
+++ b/apps/tests/loop_continue_pattern4.hako
@@ -0,0 +1,17 @@
+// Pattern 4: Loop with Continue
+// Expected output: sum = 25 (1+3+5+7+9, skip even numbers)
+static box Main {
+ main() {
+ local i = 0
+ local sum = 0
+ loop(i < 10) {
+ i = i + 1
+ if (i % 2 == 0) {
+ continue
+ }
+ sum = sum + i
+ }
+ print(sum)
+ return 0
+ }
+}
diff --git a/src/mir/builder/control_flow/joinir/patterns/mod.rs b/src/mir/builder/control_flow/joinir/patterns/mod.rs
index 9229f63b..4e7c6f8e 100644
--- a/src/mir/builder/control_flow/joinir/patterns/mod.rs
+++ b/src/mir/builder/control_flow/joinir/patterns/mod.rs
@@ -4,6 +4,7 @@
//! - Pattern 1: Simple While Loop (pattern1_minimal.rs)
//! - Pattern 2: Loop with Conditional Break (pattern2_with_break.rs)
//! - Pattern 3: Loop with If-Else PHI (pattern3_with_if_phi.rs)
+//! - Pattern 4: Loop with Continue (pattern4_with_continue.rs) [Phase 194+]
//!
//! Phase 194: Table-driven router for pattern dispatch
//! - Router module provides table-driven pattern matching
@@ -13,6 +14,7 @@
pub(in crate::mir::builder) mod pattern1_minimal;
pub(in crate::mir::builder) mod pattern2_with_break;
pub(in crate::mir::builder) mod pattern3_with_if_phi;
+pub(in crate::mir::builder) mod pattern4_with_continue;
pub(in crate::mir::builder) mod router;
// Re-export router for convenience
diff --git a/src/mir/builder/control_flow/joinir/patterns/pattern4_with_continue.rs b/src/mir/builder/control_flow/joinir/patterns/pattern4_with_continue.rs
new file mode 100644
index 00000000..5246b39c
--- /dev/null
+++ b/src/mir/builder/control_flow/joinir/patterns/pattern4_with_continue.rs
@@ -0,0 +1,120 @@
+//! Pattern 4: Loop with Continue minimal lowerer
+//!
+//! Phase 194+: Structure-based detection for loops with continue statements.
+
+use crate::ast::ASTNode;
+use crate::mir::builder::MirBuilder;
+use crate::mir::ValueId;
+use super::super::trace;
+
+/// Phase 194+: Detection function for Pattern 4
+///
+/// Pattern 4 matches loops with continue statements.
+///
+/// # Structure-based Detection (Phase 194+)
+///
+/// Uses AST-based detection from LoopPatternContext:
+/// - ctx.has_continue == true
+/// - ctx.has_break == false (for simplicity)
+///
+/// This is structure-based detection that does NOT depend on function names
+/// or variable names like "sum".
+///
+/// # Detection Rules
+///
+/// 1. **Must have continue**: `ctx.has_continue == true`
+/// 2. **No break statements**: `ctx.has_break == false` (for simplicity in Pattern 4)
+///
+/// If both conditions are met, Pattern 4 is detected.
+pub fn can_lower(_builder: &MirBuilder, ctx: &super::router::LoopPatternContext) -> bool {
+ // Phase 194+: Structure-based detection using AST analysis
+ // Pattern 4 is characterized by:
+ // - Has continue statement(s)
+ // - No break statements (for simplicity)
+
+ ctx.has_continue && !ctx.has_break
+}
+
+/// Phase 194+: Lowering function for Pattern 4
+///
+/// Wrapper around cf_loop_pattern4_with_continue to match router signature.
+///
+/// # TODO
+///
+/// Implement Pattern 4 lowering logic:
+/// 1. Extract loop variables from condition
+/// 2. Generate JoinIR with continue support
+/// 3. Convert JoinModule → MirModule
+/// 4. Create JoinInlineBoundary for input/output mapping
+/// 5. Merge MIR blocks into current_function
+/// 6. Return Void (loop doesn't produce values)
+pub fn lower(
+ builder: &mut MirBuilder,
+ ctx: &super::router::LoopPatternContext,
+) -> Result