Conversation
Removes the experimental WFL MVC framework, the associated project website, and all development diary entries. This change streamlines the repository to focus on the core language compiler and toolchain. The framework, website, and diary are removed to simplify the main codebase. These larger projects may be moved to separate repositories in the future.
Adds attributions for core framework dependencies, including warp, uuid, and various cryptographic libraries. Also includes credits for development tools such as criterion. Removes temporary backup and linter output files.
Adds a note to thank the open source community and ask for help in keeping the credits up to date.
Moves several markdown documents to a new 'Docs/Archive' directory to preserve historical context while removing them from the main project view. Deletes numerous example applications, test scripts, and temporary files that are no longer relevant, streamlining the repository and reducing clutter.
Replaces the outdated and incomplete keyword list with a comprehensive, two-tiered system for improved clarity and accuracy. Introduces a "Quick Reference" for fast lookups and a "Complete Technical Reference" that provides in-depth explanations of keyword classifications, such as structural vs. contextual. Corrects the total documented keyword count from 60+ to the accurate 178. All related documentation now links to these new, authoritative pages.
Introduces a two-tiered system for keyword documentation, featuring a quick-lookup guide and a complete technical reference. Updates the total keyword count to 178 and provides a detailed classification of keyword types (structural, contextual, etc.). Adds references to the new documentation files and corresponding validated code examples to improve developer clarity.
Introduces the core Weave framework, including modules for application structure, routing, and response helpers. Includes a complete "Hello World" example that demonstrates routing, request logging, and styled 404 error handling. Provides extensive project documentation covering quick start instructions, implementation details, and overall status.
Introduces a library module to determine the Content-Type of files based on their extension, which is a key requirement for static file serving. To overcome the current language limitation of a missing `ends with` operator, this implementation includes a custom helper function that replicates the functionality using substring logic. The module supports over 20 common file types and is designed for easy extension. This change also adds comprehensive test suites to ensure correctness and detailed documentation explaining the workaround and usage.
Implements a core module for serving static files, a critical feature for web applications. The module includes built-in security to prevent directory traversal and block access to hidden files. It also provides automatic MIME type detection for over 20 common file types. A complete web application example is added to demonstrate the integration of API routing with the new static file serving capability. This commit also includes extensive documentation, test assets, and project summaries, marking a major milestone for the framework.
Deletes the entire `weave_lib` directory, including all framework source code, examples, tests, and documentation.
Introduces a new `--init` command that launches an interactive wizard to guide users through creating a `.wflcfg` file. The wizard simplifies configuration by prompting for all available options, showing defaults, and validating input. Updates configuration loading to search for `.wflcfg` by walking up the directory tree from the script's location. This allows for project-wide configurations with the ability to override settings in subdirectories. Also expands the available configuration options, especially for security and subprocess management, and updates documentation to reflect these changes.
|
Claude finished @logbie's task —— View job PR Review: Refactor - Remove web framework and improve configurationReview Progress
✅ Overall AssessmentThis is an excellent refactoring that significantly improves the project's focus and maintainability. The removal of 19,502 lines while adding valuable new features demonstrates thoughtful architecture decisions. 📋 Detailed Review🎯 Configuration Management - Excellent ImplementationThe new configuration system in Strengths:
Potential Improvements:
📚 Documentation Overhaul - Outstanding WorkThe two-tiered keyword documentation system is brilliant: Strengths:
Minor Suggestions:
🔒 Security ReviewGood practices observed:
No significant security concerns identified. ⚡ Performance & ArchitectureStrengths:
Architecture Benefits:
🧪 Test Coverage AssessmentStrengths:
Recommendations:
🚧 Potential Issues
🏆 RecommendationsHigh Priority:
Medium Priority:
Low Priority:
🎉 ConclusionThis PR represents high-quality engineering work that:
Recommendation: APPROVE with the minor suggestions addressed post-merge. The configuration enhancements alone justify this refactoring, and the documentation improvements are exceptional. The codebase is now more focused, maintainable, and user-friendly. |
|
Note Other AI code review bot(s) detectedCodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review. 📝 WalkthroughWalkthroughAdds an interactive CLI init mode (wfl --init) and a configuration wizard; changes local .wflcfg discovery to walk up directories and pick the nearest file; extends configuration types/validation and exposes new checker APIs; splits keyword docs into Quick and Complete references (178 keywords) with many examples; adds Claude code hooks and credits; removes many framework examples, tests, fixtures, and dev-diary documents. Changes
Sequence Diagram(s)sequenceDiagram
participant User as User
participant Main as src/main.rs
participant Wizard as src/wfl_config::wizard
participant Checker as src/wfl_config::checker
participant FS as FileSystem
User->>Main: run `wfl --init [dir]`
activate Main
Main->>FS: stat "<dir>/.wflcfg"?
alt exists
Main->>User: prompt overwrite?
User-->>Main: confirm/deny
end
Main->>Wizard: run_wizard(output_path)
activate Wizard
Wizard->>Checker: get_settings_by_category()
loop per category
Wizard->>User: prompt for settings (desc, default, options)
User-->>Wizard: provide value
Wizard->>Checker: validate(input, ConfigType)
alt invalid
Wizard->>User: show error & retry
end
end
Wizard->>FS: write ".wflcfg" at output_path
Wizard-->>Main: success
Main->>User: print success & exit
deactivate Wizard
deactivate Main
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
📜 Recent review detailsConfiguration used: defaults Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
✏️ Tip: You can disable this entire section by setting Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Pull request overview
This PR removes the experimental WFL/Weave web framework and introduces significant improvements to configuration management and documentation. The removal streamlines the project's focus while enhancing user experience through an interactive configuration wizard and comprehensive keyword documentation.
Changes:
- Removes all WFL web framework code including core components, MVC layer, middleware, plugins, examples, and tests
- Adds interactive
--initcommand for creating.wflcfgfiles with hierarchical directory search - Replaces single reserved keywords list with two-tiered documentation: quick-reference guide and comprehensive technical reference
- Archives obsolete documentation and development diaries
Reviewed changes
Copilot reviewed 126 out of 142 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| wfl_website/app.wfl | Removed experimental WFL website application demonstrating web framework |
| wfl framework/tests/* | Removed all framework test files (sessions, routing, plugins, MVC, middleware, etc.) |
| wfl framework/examples/* | Removed example applications including blog and REST API demos |
| wfl framework/core/* | Removed core framework components (router, request, response, middleware, application, plugins) |
| wfl framework/mvc/* | Removed MVC layer components (models, views, controllers) |
| wfl framework/middleware/* | Removed middleware implementations (CORS, logging, error handling) |
| wfl framework/plugins/* | Removed plugin implementations |
| wfl framework/helpers/* | Removed helper modules including session management |
| wfl framework/config/* | Removed framework configuration files |
| wfl framework/*.md | Removed framework documentation (README, architecture guide, tutorials, status) |
| test_single_line.txt | Removed test file |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 632ee7d3b1
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| expected_settings.insert( | ||
| "warn_on_orphan".to_string(), | ||
| ExpectedSetting { | ||
| name: "warn_on_orphan".to_string(), | ||
| config_type: ConfigType::Boolean, | ||
| required: false, | ||
| default_value: Some("true".to_string()), | ||
| description: "Warn when orphan processes are detected".to_string(), | ||
| valid_values: None, | ||
| category: "Subprocess Management".to_string(), | ||
| }, |
There was a problem hiding this comment.
Parse warn_on_orphan from .wflcfg
The new config schema now advertises warn_on_orphan as a valid setting (and the --init wizard will emit it), but parse_config_text in src/config.rs never handles that key, so any value users set is silently ignored and the runtime keeps the default true. This means users cannot disable orphan warnings even if their .wflcfg (or wizard output) says warn_on_orphan = false, and --configCheck will report the file as valid while behavior doesn’t change. Consider adding parsing for this key (and the other subprocess settings you now emit) so generated configs actually take effect.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Actionable comments posted: 7
Note
Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
Docs/Archive/keywords-technical-reference.md (1)
337-337: Internal inconsistency: header claims 178 keywords but this section says 155.Line 19 states "Total Count: 178 keywords and literals" with breakdown 52+24+95+7=178, but this Quick Reference Table header states "Complete alphabetical list of all 155 keywords." The Notes section at line 533 also uses a different breakdown totaling 155.
Since this is an archived document for historical reference, consider either:
- Reconciling the counts throughout the document, or
- Adding a note about the discrepancy
Suggested fix for consistency
-Complete alphabetical list of all 155 keywords: +Complete alphabetical list of all 178 keywords:And at line 533:
-Total breakdown: 46 structural + 27 contextual + 75 other + 7 literals = **155 keywords** +Total breakdown: 52 structural + 24 contextual + 95 other + 7 literals = **178 keywords**Docs/reference/configuration-reference.md (2)
349-351: Inconsistency with hierarchical config discovery.Line 351 states the
.wflcfgmust be "in the same directory as the WFL script," but lines 20-33 describe hierarchical discovery that walks up the directory tree. This could confuse users.Suggested fix
### Configuration Not Loading -Ensure your `.wflcfg` file is in the same directory as the WFL script you're running, not in your current working directory. +Ensure your `.wflcfg` file is in the same directory as the WFL script or in a parent directory. WFL searches upward from the script's location, not from your current working directory.
339-345: Precedence list doesn't reflect hierarchical discovery.The precedence section doesn't document that a
.wflcfgin a child directory overrides one in a parent directory (per lines 20-33). Consider expanding to clarify the full precedence chain.Suggested clarification
## Configuration Precedence When the same setting appears in multiple locations, the following precedence applies (highest to lowest): -1. Local `.wflcfg` in the script's directory +1. Nearest `.wflcfg` walking up from the script's directory (closer = higher priority) 2. Global configuration file (`/etc/wfl/wfl.cfg` or `C:\wfl\config`) 3. Built-in defaults
🤖 Fix all issues with AI agents
In `@Docs/guides/troubleshooting.md`:
- Line 98: Update the broken anchor in the markdown link shown in the diff (the
quick links line with "Quick keyword lookup" / "Why can't I use this keyword?")
by changing the second link's target from
../reference/reserved-keywords.md#contextual-keywords to
../reference/reserved-keywords.md#contextual-keywords-29 so it matches the
actual heading anchor "## Contextual Keywords (29)".
In `@src/wfl_config/checker.rs`:
- Around line 286-293: The CI failure is due to formatting issues around the
ExpectedSetting entries (e.g., the "log_throttle_factor" block and the similar
block at lines referenced) — run rustfmt to fix; execute `cargo fmt --all`,
verify the formatting for the ExpectedSetting initializations (instances using
ExpectedSetting, ConfigType::Integer, default_value, description, etc.) and
re-commit the updated files so `cargo fmt --check` passes.
In `@src/wfl_config/wizard.rs`:
- Around line 130-135: The integer branch (ConfigType::Integer) currently
accepts negative values by parsing with input.parse::<i64>(), but values must be
non-negative because the loader expects unsigned types; update the validation to
parse the input as a signed integer, then reject any value < 0 with a clear
error (e.g., "Invalid non-negative integer value: '{input}'") so negatives are
not written to the config; locate the check in the ConfigType::Integer match arm
(the input.parse::<i64>() call) and add the non-negative guard before returning
Ok(input.to_string()).
In `@TestPrograms/docs_examples/keyword_reference/_meta/manifest.json`:
- Around line 1-85: The root manifest must be updated to register each
keyword_reference example currently only listed in
TestPrograms/docs_examples/keyword_reference/_meta/manifest.json; add an entry
for each file (e.g., control_flow_examples.wfl, declaration_examples.wfl,
operations_examples.wfl, etc.) into the root
TestPrograms/docs_examples/_meta/manifest.json using the required schema keys:
doc_section (keyword_reference), type (example), validate_layers (array of MCP
layers to run, e.g., [1,2,3,4,5] as applicable), last_validated (ISO timestamp),
validation_result (pass/needs_syntax_fixes/pending), and doc_purpose (brief
purpose string); run the MCP validation for layers 1–5 for each example to set
accurate last_validated timestamps and validation_result values before
committing.
In `@TestPrograms/docs_examples/keyword_reference/operations_examples.wfl`:
- Around line 57-66: The is_even action currently computes "remainder as number
minus 10" which only checks number == 10; change the logic in the is_even action
to compute remainder as "number modulo 2" (use the language's modulo operator)
and then check if remainder is equal to 0 to return yes/ no; if modulo is
unavailable, instead rename the action (is_even) and the call to reflect its
actual behavior (e.g., is_ten) or add a clarifying comment above the action
indicating it checks for equality with 10 rather than evenness, updating the
callsite (call is_even with 10) accordingly.
In `@TestPrograms/docs_examples/keyword_reference/process_examples.wfl`:
- Around line 16-17: The WFL script uses reserved keywords `arguments` and
`output` as variable names in the store statements (`store arguments as "arg1
arg2"` and `store output as "result"`), which will break the parser; rename
these variables to non-reserved identifiers (e.g., `args`, `arg_list`,
`result_var`, or similar) in the `store` commands and update any downstream
references to those names (search for `arguments` and `output` usages) so all
occurrences use the new identifiers consistently.
- Around line 9-10: The variables named "command" and "process" conflict with
WFL reserved keywords; rename them to avoid parser errors (e.g., use
command_text or command_var and process_name or background_task_var) and update
any references accordingly so the store statements no longer use the reserved
identifiers "command" or "process".
🟡 Minor comments (14)
TestPrograms/docs_examples/keyword_reference/error_handling_examples.wfl-1-3 (1)
1-3: Keywordswhenanderrorare listed but not demonstrated in examples.The header claims coverage of
whenanderrorkeywords, but the examples only show basictry/catchblocks. Consider adding examples that demonstrate:
catch when ErrorType:for catching specific error types- Accessing error information (e.g., error message or type)
This would make the documentation complete as advertised.
Would you like me to generate example code demonstrating these keywords?
TestPrograms/docs_examples/keyword_reference/pattern_examples.wfl-16-20 (1)
16-20: Avoid usingpatternas a variable name if it's a reserved keyword.Line 2 lists
patternas a covered keyword. Per coding guidelines, use an underscore-based alternative likepattern_nameto avoid conflicts.Suggested fix
// Example 2: Pattern-related variable names (showing contextual usage) -store pattern as "email_pattern" -display "Pattern name: " with pattern +store pattern_name as "email_pattern" +display "Pattern name: " with pattern_name -store text as "sample text" -display "Text to search: " with text +store search_text as "sample text" +display "Text to search: " with search_textBased on learnings, WFL files must avoid using reserved keywords as identifiers.
TestPrograms/docs_examples/keyword_reference/web_network_examples.wfl-9-10 (1)
9-10: Avoid using reserved keywords as variable names.The file lists
serverandportas covered keywords, yet uses them as variable identifiers. Per coding guidelines, reserved keywords should not be used as identifiers—use underscores to differentiate (e.g.,server_name,port_number).Suggested fix
// Demonstrating web-related variables -store port as 8080 -store server as "localhost" +store port_number as 8080 +store server_name as "localhost" -display "Port: " with port -display "Server: " with server +display "Port: " with port_number +display "Server: " with server_nameBased on learnings, WFL files must avoid using reserved keywords as identifiers.
TestPrograms/docs_examples/keyword_reference/containers_examples.wfl-1-3 (1)
1-3: Comment mentionsextendsbut no example is provided.Line 2 lists
extendsas a covered keyword, but no example demonstrates container inheritance. Consider adding an example or removingextendsfrom the comment.Docs/reference/keyword-reference.md-269-281 (1)
269-281: Section keyword count mismatch.The header states "Data & Types Keywords (7)" but the table contains 8 entries. Update the count to match.
Suggested fix
-## Data & Types Keywords (7) +## Data & Types Keywords (8)Docs/reference/keyword-reference.md-106-127 (1)
106-127: Section keyword count mismatch.The header states "Comparison Keywords (14)" but the table contains 17 entries (
abovethroughwith). Update the count to match the actual table entries.Suggested fix
-## Comparison Keywords (14) +## Comparison Keywords (17)Docs/reference/keyword-reference.md-164-186 (1)
164-186: Section keyword count mismatch.The header states "File & I/O Keywords (16)" but the table contains 18 entries. Update the count to match.
Suggested fix
-## File & I/O Keywords (16) +## File & I/O Keywords (18)Docs/reference/keyword-reference.md-189-213 (1)
189-213: Section keyword count mismatch.The header states "Web & Network Keywords (17)" but the table contains 20 entries (
acceptingthroughtimeout). Update the count to match.Suggested fix
-## Web & Network Keywords (17) +## Web & Network Keywords (20)Docs/reference/keyword-reference.md-240-249 (1)
240-249: Section keyword count mismatch and missing keyword.The header states "Error Handling Keywords (5)" but the table only contains 4 entries. Either update the count to 4, or add the missing keyword (possibly
finallywhich is used in error handling examples in other docs like syntax-reference.md line 140).Suggested fix (if `finally` should be included)
-## Error Handling Keywords (5) +## Error Handling Keywords (5) | Keyword | Description | As Var? | |---------|-------------|---------| | `catch` | Error handler | ✗ | | `error` | Error reference | ✗ | +| `finally` | Cleanup block | ✗ | | `try` | Error handling block | ✗ | | `when` | Specific error type | ✗ |Docs/reference/keyword-reference.md-1-7 (1)
1-7: Update keyword count and validate code examples with MCP tools per documentation policy.The keyword count of 178 is inaccurate—the lexer/parser implementation defines 172 keyword tokens plus 2 literal types (BooleanLiteral, NothingLiteral), totaling ~174 distinct keyword and literal tokens. The markdown categories sum to 180. Additionally, the WFL code examples in the "Quick Usage Guide" section (lines 303–332) must be validated with MCP tools before publication, as required by Docs/wfl-documentation-policy.md.
Docs/reference/reserved-keywords.md-233-260 (1)
233-260: Minor inconsistency in keyword categorization.The keyword
comesappears in both "Web & Network (17)" on line 245 and "Miscellaneous (6)" on line 256. This duplication may cause confusion when counting keywords by category.Additionally, verify the counts in "Other Reserved Keywords" section add up correctly:
- File & I/O (14) + Arithmetic (15) + Pattern (26) + Web (17) + Process (11) + Data (6) + Misc (6) = 95 ✓
The total 178 count is correctly explained in line 260.
src/main.rs-159-165 (1)
159-165: Address pipeline failure: rustfmt formatting.The pipeline indicates a formatting issue with the multi-line
eprintln!block. Runcargo fmt --allto fix this formatting issue as per coding guidelines.#!/bin/bash # Verify the formatting issue cd src && cargo fmt --check 2>&1 | head -20src/wfl_config/wizard.rs-31-35 (1)
31-35: Fix rustfmt failures reported by CI.
CI indicates formatting issues in several spots; please re-runcargo fmt --allto resolve.Also applies to: 38-44, 61-66, 102-103, 173-177, 224-236, 332-340
TestPrograms/docs_examples/keyword_reference/control_flow_examples.wfl-66-74 (1)
66-74: Addskipusage to Example 8 or update the example title to reflect actual coverage.The file header and manifest both list
skipas a covered keyword, and Example 8's title states "Continue/skip in loop", but the code only demonstratescontinue. Either add askipbranch to the example or retitle it to "Continue example" ifskipcoverage is out of scope.✏️ One way to include
skipcount from 1 to 5: check if count is equal to 3: continue end check + check if count is equal to 4: + skip + end check display count end count
🧹 Nitpick comments (8)
CREDITS.md (1)
94-94: Consider wrapping bare URLs in markdown link syntax for consistency.The static analysis tool flagged bare URLs at multiple lines. The existing entries in this file use the same format, so this is a pre-existing pattern, but for best practices and markdown linting compliance, consider using
<URL>or[Repository](URL)format.Example fix (apply similar pattern to all entries)
## warp (v0.3.7) - **Description**: A fast, composable web server framework. - **License**: MIT -- **Repository**: https://github.com/seanmonstar/warp +- **Repository**: <https://github.com/seanmonstar/warp> - **Usage in WFL**: Powers WFL's web server capabilities and HTTP request/response handling.Also applies to: 100-100, 106-106, 112-112, 118-118, 124-124, 130-130, 136-136, 142-142, 148-148, 158-158, 164-164, 170-170
TestPrograms/docs_examples/keyword_reference/web_network_examples.wfl (1)
16-17: Consider renamingstatusandheaderto avoid potential keyword conflicts.If
statusorheaderare reserved or contextual keywords, the same underscore convention should apply.Suggested fix
// Example 2: Request/response concepts -store status as 200 -store header as "Content-Type" +store status_code as 200 +store header_name as "Content-Type" -display "Status: " with status -display "Header: " with header +display "Status: " with status_code +display "Header: " with header_nameLabsTest/email.wfl (1)
1-7: Email pattern is simplified - intentional for demo?The pattern won't match common valid emails containing dots in the local part (e.g.,
user.name@example.com), hyphens, underscores, or multi-level domains (e.g.,user@mail.example.com). If this is intentional for demonstration simplicity, consider adding a comment noting the limitation.Docs/reference/language-specification.md (1)
18-26: Clarify keyword count discrepancy.The four categories listed (52 + 29 + 95 + 7 = 183) don't obviously sum to 178. The Complete Reference explains that 5 contextual keywords overlap with structural keywords, but this specification page doesn't mention this.
Consider adding a brief note, e.g.:
**Keyword Types:** - 52 Structural Keywords (core language constructs) -- 29 Contextual Keywords (context-dependent usage) +- 29 Contextual Keywords (24 unique + 5 overlapping with structural) - 95 Other Reserved Keywords (feature-specific) - 7 Boolean & Null LiteralsOr simply note that the total accounts for overlapping keywords.
src/main.rs (1)
366-409: Fix redundant imports and stderr/stdout mismatch.
Redundant import (Line 368):
std::io::Writeis already imported at the top of the file (line 3).Stderr/stdout mismatch (Lines 385-389): The prompt is written to stderr via
eprint!, butstdout().flush()is called. This may cause the prompt to not appear before waiting for input on some systems.Unnecessary path qualification (Lines 371, 373):
std::path::Pathcan be simplified toPathsince it's already imported at line 4.♻️ Proposed fix
// Handle --init mode if init_mode { - use std::io::Write; - - let target_dir = if !file_path.is_empty() { - std::path::Path::new(&file_path) + let target_dir: &Path = if !file_path.is_empty() { + Path::new(&file_path) } else { - std::path::Path::new(".") + Path::new(".") }; if !target_dir.is_dir() { eprintln!("Error: --init requires a valid directory"); process::exit(2); } let config_path = target_dir.join(".wflcfg"); // Check if file exists and prompt for overwrite if config_path.exists() { - eprint!( + print!( "File {} already exists. Overwrite? (y/n): ", config_path.display() ); - std::io::stdout().flush()?; + io::stdout().flush()?; let mut response = String::new(); - std::io::stdin().read_line(&mut response)?; + io::stdin().read_line(&mut response)?; if !response.trim().to_lowercase().starts_with('y') { println!("Aborted."); process::exit(0); } }src/config.rs (1)
676-697: Consider extracting the directory walk into a shared helper.
This logic is duplicated inload_configandload_config_with_global; a small helper would reduce drift over time.src/wfl_config/wizard.rs (1)
219-258: Consider sorting categories for deterministic output.
get_settings_by_category()likely returns aHashMap, so iteration order can vary. Sorting category names makes the generated config (and prompt order) deterministic; apply the same ordering inrun()for consistency.♻️ Example adjustment
- let categories = self.checker.get_settings_by_category(); - - for (category_name, mut settings) in categories { + let mut categories: Vec<_> = + self.checker.get_settings_by_category().into_iter().collect(); + categories.sort_by(|a, b| a.0.cmp(&b.0)); + + for (category_name, mut settings) in categories {src/wfl_config/checker.rs (1)
470-492: Make category output deterministic and avoid hidden categories.
HashMap::values()is nondeterministic, so the “ordered” output can vary between runs. If stable wizard prompts matter, sort settings (and consider handling categories not in the fixed list so they don’t get silently dropped).♻️ Suggested tweak (deterministic order)
- let settings: Vec<&ExpectedSetting> = self + let mut settings: Vec<&ExpectedSetting> = self .expected_settings .values() .filter(|s| s.category == category) .collect(); + settings.sort_by(|a, b| a.name.cmp(&b.name)); (category.to_string(), settings)
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (142)
CLAUDE.mdCREDITS.mdCargo.lock.backupDev diary/2025-05-26-nexus-file-type-fix.mdDev diary/2025-05-27-fix-log-message-unused-var.mdDev diary/2025-05-27-fix-static-analyzer-while-loop.mdDev diary/2025-05-27-vscode-extension-consolidation.mdDev diary/2025-05-30-bugreport-sdk-fix.mdDev diary/2025-06-01-add-short-version-flag.mdDev diary/2025-06-01-fix-analyzer-action-parameters.mdDev diary/2025-06-01-fix-duplicate-symbol-type-warnings.mdDev diary/2025-06-01-fix-msi-build-compilation-issues.mdDev diary/2025-06-01-fix-type-checker-action-parameters.mdDev diary/2025-06-27-command-line-arguments.mdDev diary/2025-08-05_backreference_implementation.mdDev diary/2025-08-05_lookaround_implementation.mdDev diary/2025-08-05_lookbehind_implementation.mdDev diary/2025-08-05_phase3_completion.mdDev diary/2025-08-05_unicode_phase3_complete.mdDev diary/2025-08-12-fix-bracket-array-indexing.mdDev diary/2025-09-20-secure-random-implementation.mdDev diary/implementation_progress_2025-04-17.mdDev diary/implementation_progress_2025-04-18.mdDev diary/implementation_progress_2025-04-19.mdDev diary/implementation_progress_2025-04-21.mdDev diary/implementation_progress_2025-05-17.mdDev diary/implementation_progress_2025-05-19.mdDev diary/implementation_progress_2025-05-20.mdDev diary/implementation_progress_2025-05-21.mdDev diary/implementation_progress_2025-05-24.mdDev diary/implementation_progress_2025-05-26.mdDocs/03-language-basics/variables-and-types.mdDocs/06-best-practices/naming-conventions.mdDocs/Archive/DOCUMENTATION_COMPLETE.mdDocs/Archive/DOCUMENTATION_FIXES_SUMMARY.mdDocs/Archive/FRAMEWORK_FINAL_REPORT.mdDocs/Archive/FRAMEWORK_PROPERTY_MUTATION_ISSUE.mdDocs/Archive/IOaudit.mdDocs/Archive/PARSER_REFACTOR_TODO.mdDocs/Archive/README.mdDocs/Archive/WFL_DOCUMENTATION_REBUILD_SUMMARY.mdDocs/Archive/hash3.mdDocs/Archive/keywords-technical-reference.mdDocs/Archive/math.mdDocs/Archive/parserbug.mdDocs/Archive/parserrefactor.mdDocs/README.mdDocs/guides/troubleshooting.mdDocs/reference/configuration-reference.mdDocs/reference/error-codes.mdDocs/reference/keyword-reference.mdDocs/reference/language-specification.mdDocs/reference/reserved-keywords.mdDocs/reference/syntax-reference.mdLabsTest/email.wflTestPrograms/docs_examples/keyword_reference/_meta/manifest.jsonTestPrograms/docs_examples/keyword_reference/comparison_examples.wflTestPrograms/docs_examples/keyword_reference/containers_examples.wflTestPrograms/docs_examples/keyword_reference/contextual_keywords_examples.wflTestPrograms/docs_examples/keyword_reference/control_flow_examples.wflTestPrograms/docs_examples/keyword_reference/declaration_examples.wflTestPrograms/docs_examples/keyword_reference/error_handling_examples.wflTestPrograms/docs_examples/keyword_reference/file_io_examples.wflTestPrograms/docs_examples/keyword_reference/operations_examples.wflTestPrograms/docs_examples/keyword_reference/pattern_examples.wflTestPrograms/docs_examples/keyword_reference/process_examples.wflTestPrograms/docs_examples/keyword_reference/web_network_examples.wflclippy.txtdependency_tree_before.txtempty_file.txthello_world_app.wflhello_world_simple.wflno_newline.txtrust_loc_counter.wflsrc/config.rssrc/main.rssrc/wfl_config/checker.rssrc/wfl_config/mod.rssrc/wfl_config/wizard.rstest_main_in_try.wfltest_main_in_try.wfl.ast.txttest_main_simple.wfltest_main_simple.wfl.ast.txttest_main_simple.wfl.lex.txttest_main_with_context.wfltest_single_line.txttest_single_param.wfl.ast.txtwfl framework/ARCHITECTURE.mdwfl framework/COMPLETION_SUMMARY.mdwfl framework/GETTING_STARTED.mdwfl framework/README.mdwfl framework/RESERVED_KEYWORDS.mdwfl framework/STATUS.mdwfl framework/config/plugins.wflwfl framework/core/application.wflwfl framework/core/middleware.wflwfl framework/core/plugin_interface.wflwfl framework/core/plugin_manager.wflwfl framework/core/request.wflwfl framework/core/response.wflwfl framework/core/router.wflwfl framework/examples/blog_app/app.wflwfl framework/examples/blog_app/controllers.wflwfl framework/examples/blog_app/controllers.wfl.ast.txtwfl framework/examples/blog_app/models.wflwfl framework/examples/blog_app/models.wfl.ast.txtwfl framework/examples/blog_server_test.wflwfl framework/examples/blog_server_working.wflwfl framework/examples/demo_server.wflwfl framework/examples/rest_api/app.wflwfl framework/examples/rest_api/controllers.wflwfl framework/examples/rest_api/models.wflwfl framework/examples/rest_api/models.wfl.ast.txtwfl framework/examples/simple_app.wflwfl framework/helpers/sessions.wflwfl framework/middleware/cors.wflwfl framework/middleware/error_handler.wflwfl framework/middleware/logging.wflwfl framework/mvc/controller.wflwfl framework/mvc/model.wflwfl framework/mvc/view.wflwfl framework/plugins/auth_plugin.wflwfl framework/plugins/cors_plugin.wflwfl framework/plugins/logger_plugin.wflwfl framework/routing/route_compiler.wflwfl framework/routing/route_matcher.wflwfl framework/tests/test_application.wflwfl framework/tests/test_application_inline.wflwfl framework/tests/test_example_apps.wflwfl framework/tests/test_example_apps_simple.wflwfl framework/tests/test_middleware.wflwfl framework/tests/test_middleware_simple.wflwfl framework/tests/test_mvc.wflwfl framework/tests/test_mvc_simple.wflwfl framework/tests/test_plugins.wflwfl framework/tests/test_plugins_simple.wflwfl framework/tests/test_routing.wflwfl framework/tests/test_routing_simple.wflwfl framework/tests/test_sessions.wflwfl framework/tests/test_sessions_simple.wflwfl_website/app.wflwfl_website/app.wfl.ast.txt
💤 Files with no reviewable changes (95)
- wfl framework/README.md
- test_main_simple.wfl
- Dev diary/2025-05-27-fix-log-message-unused-var.md
- test_main_in_try.wfl
- Dev diary/2025-05-27-vscode-extension-consolidation.md
- test_main_with_context.wfl
- Dev diary/implementation_progress_2025-04-18.md
- wfl framework/tests/test_middleware_simple.wfl
- test_single_line.txt
- no_newline.txt
- wfl framework/examples/simple_app.wfl
- wfl framework/examples/blog_server_working.wfl
- wfl framework/core/response.wfl
- wfl framework/plugins/logger_plugin.wfl
- wfl framework/examples/blog_app/models.wfl
- wfl framework/tests/test_routing.wfl
- wfl framework/tests/test_plugins.wfl
- wfl framework/routing/route_compiler.wfl
- wfl framework/STATUS.md
- wfl framework/examples/blog_server_test.wfl
- Dev diary/2025-05-30-bugreport-sdk-fix.md
- wfl framework/plugins/auth_plugin.wfl
- Dev diary/2025-06-01-add-short-version-flag.md
- wfl framework/tests/test_mvc.wfl
- wfl framework/examples/rest_api/models.wfl
- wfl framework/examples/blog_app/models.wfl.ast.txt
- wfl framework/tests/test_middleware.wfl
- wfl framework/examples/blog_app/controllers.wfl
- wfl framework/core/application.wfl
- test_single_param.wfl.ast.txt
- wfl framework/tests/test_example_apps_simple.wfl
- wfl framework/tests/test_mvc_simple.wfl
- Dev diary/implementation_progress_2025-04-21.md
- wfl framework/core/plugin_manager.wfl
- wfl framework/RESERVED_KEYWORDS.md
- Dev diary/2025-08-05_lookaround_implementation.md
- Dev diary/implementation_progress_2025-05-19.md
- wfl framework/middleware/logging.wfl
- hello_world_simple.wfl
- Dev diary/2025-06-01-fix-type-checker-action-parameters.md
- wfl framework/examples/blog_app/app.wfl
- wfl framework/tests/test_application_inline.wfl
- Dev diary/2025-08-05_phase3_completion.md
- Dev diary/2025-08-05_backreference_implementation.md
- wfl framework/core/plugin_interface.wfl
- wfl framework/examples/rest_api/controllers.wfl
- Dev diary/implementation_progress_2025-05-26.md
- Dev diary/2025-08-12-fix-bracket-array-indexing.md
- wfl framework/plugins/cors_plugin.wfl
- wfl framework/routing/route_matcher.wfl
- wfl framework/mvc/model.wfl
- wfl framework/core/request.wfl
- test_main_simple.wfl.lex.txt
- Dev diary/2025-08-05_lookbehind_implementation.md
- wfl framework/mvc/controller.wfl
- wfl framework/COMPLETION_SUMMARY.md
- test_main_in_try.wfl.ast.txt
- Dev diary/implementation_progress_2025-04-17.md
- wfl framework/core/router.wfl
- Dev diary/2025-09-20-secure-random-implementation.md
- Dev diary/2025-06-01-fix-analyzer-action-parameters.md
- wfl framework/tests/test_application.wfl
- test_main_simple.wfl.ast.txt
- wfl framework/examples/blog_app/controllers.wfl.ast.txt
- Dev diary/2025-05-27-fix-static-analyzer-while-loop.md
- hello_world_app.wfl
- rust_loc_counter.wfl
- Dev diary/implementation_progress_2025-05-17.md
- Dev diary/2025-06-27-command-line-arguments.md
- wfl framework/examples/rest_api/app.wfl
- Dev diary/implementation_progress_2025-05-24.md
- Dev diary/2025-05-26-nexus-file-type-fix.md
- wfl framework/mvc/view.wfl
- wfl framework/tests/test_sessions_simple.wfl
- wfl_website/app.wfl
- wfl framework/middleware/cors.wfl
- Dev diary/implementation_progress_2025-05-20.md
- wfl framework/core/middleware.wfl
- Dev diary/implementation_progress_2025-04-19.md
- Dev diary/implementation_progress_2025-05-21.md
- wfl framework/helpers/sessions.wfl
- wfl framework/middleware/error_handler.wfl
- wfl framework/tests/test_sessions.wfl
- Dev diary/2025-06-01-fix-duplicate-symbol-type-warnings.md
- wfl framework/tests/test_example_apps.wfl
- wfl framework/tests/test_routing_simple.wfl
- dependency_tree_before.txt
- wfl framework/examples/demo_server.wfl
- wfl framework/tests/test_plugins_simple.wfl
- Dev diary/2025-06-01-fix-msi-build-compilation-issues.md
- Dev diary/2025-08-05_unicode_phase3_complete.md
- wfl framework/GETTING_STARTED.md
- wfl framework/config/plugins.wfl
- wfl framework/examples/rest_api/models.wfl.ast.txt
- wfl framework/ARCHITECTURE.md
🧰 Additional context used
📓 Path-based instructions (5)
Docs/**/*.md
📄 CodeRabbit inference engine (CLAUDE.md)
All code examples in documentation must be validated with MCP tools before adding to docs
Documentation must follow Docs/wfl-documentation-policy.md and 19 principles in Docs/wfl-foundation.md
Files:
Docs/reference/language-specification.mdDocs/reference/error-codes.mdDocs/reference/syntax-reference.mdDocs/guides/troubleshooting.mdDocs/reference/reserved-keywords.mdDocs/reference/configuration-reference.mdDocs/03-language-basics/variables-and-types.mdDocs/Archive/keywords-technical-reference.mdDocs/reference/keyword-reference.mdDocs/README.mdDocs/06-best-practices/naming-conventions.md
**/*.wfl
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.wfl: WFL conditionals must use NESTED blocks:otherwise: check if, NOTotherwise check if
Use underscores in WFL variable names to avoid 60+ reserved keywords (e.g.,is_active,myfile, NOTisorfile)
Use WFL list push syntax:push with <list> and <value>, NOTpush to
Usecountas loop variable in WFL count loops, NOTthe current count
Use WFL typeof syntax:typeof of value, NOTtypeof(value)
Use WFL action syntax:define action called name with parameters x:, NOTaction name with x:
**/*.wfl: WFL conditionals must use NESTED blocks: 'otherwise: check if', NOT 'otherwise check if'
WFL files must avoid using reserved keywords (60+ keywords: is, file, add, current, etc.) as identifiers; use underscores instead (e.g., is_active, myfile)
WFL list operations must use 'push with and ' syntax, NOT 'push to'
WFL count loop variable must use 'count', NOT 'the current count'
WFL typeof syntax must use 'typeof of value', NOT 'typeof(value)'
WFL action definition syntax must use 'define action called name with parameters x:', NOT 'action name with x:'
Files:
TestPrograms/docs_examples/keyword_reference/pattern_examples.wflTestPrograms/docs_examples/keyword_reference/web_network_examples.wflTestPrograms/docs_examples/keyword_reference/contextual_keywords_examples.wflTestPrograms/docs_examples/keyword_reference/operations_examples.wflTestPrograms/docs_examples/keyword_reference/control_flow_examples.wflTestPrograms/docs_examples/keyword_reference/declaration_examples.wflTestPrograms/docs_examples/keyword_reference/process_examples.wflTestPrograms/docs_examples/keyword_reference/comparison_examples.wflLabsTest/email.wflTestPrograms/docs_examples/keyword_reference/error_handling_examples.wflTestPrograms/docs_examples/keyword_reference/file_io_examples.wflTestPrograms/docs_examples/keyword_reference/containers_examples.wfl
TestPrograms/**/*.wfl
📄 CodeRabbit inference engine (AGENTS.md)
End-to-end tests must be located in TestPrograms/ directory and must pass with release build
Files:
TestPrograms/docs_examples/keyword_reference/pattern_examples.wflTestPrograms/docs_examples/keyword_reference/web_network_examples.wflTestPrograms/docs_examples/keyword_reference/contextual_keywords_examples.wflTestPrograms/docs_examples/keyword_reference/operations_examples.wflTestPrograms/docs_examples/keyword_reference/control_flow_examples.wflTestPrograms/docs_examples/keyword_reference/declaration_examples.wflTestPrograms/docs_examples/keyword_reference/process_examples.wflTestPrograms/docs_examples/keyword_reference/comparison_examples.wflTestPrograms/docs_examples/keyword_reference/error_handling_examples.wflTestPrograms/docs_examples/keyword_reference/file_io_examples.wflTestPrograms/docs_examples/keyword_reference/containers_examples.wfl
TestPrograms/docs_examples/**/*.wfl
📄 CodeRabbit inference engine (AGENTS.md)
All code examples in documentation must be validated with MCP tools before adding to docs
Files:
TestPrograms/docs_examples/keyword_reference/pattern_examples.wflTestPrograms/docs_examples/keyword_reference/web_network_examples.wflTestPrograms/docs_examples/keyword_reference/contextual_keywords_examples.wflTestPrograms/docs_examples/keyword_reference/operations_examples.wflTestPrograms/docs_examples/keyword_reference/control_flow_examples.wflTestPrograms/docs_examples/keyword_reference/declaration_examples.wflTestPrograms/docs_examples/keyword_reference/process_examples.wflTestPrograms/docs_examples/keyword_reference/comparison_examples.wflTestPrograms/docs_examples/keyword_reference/error_handling_examples.wflTestPrograms/docs_examples/keyword_reference/file_io_examples.wflTestPrograms/docs_examples/keyword_reference/containers_examples.wfl
**/*.rs
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.rs: Usesnake_casefor function and file names
UseCamelCasefor types and traits
UseSCREAMING_SNAKE_CASEfor constants
Runcargo fmt --allfor code formatting before commits
Runcargo clippy --all-targets --all-features -- -D warningsto lint code and eliminate all warnings
**/*.rs: Use snake_case for function and file names
Use CamelCase for types and traits
Use SCREAMING_SNAKE_CASE for constants
Run 'cargo fmt --all' to format code according to .rustfmt.toml
Run 'cargo clippy --all-targets --all-features -- -D warnings' to ensure no clippy warnings
Files:
src/wfl_config/mod.rssrc/main.rssrc/config.rssrc/wfl_config/wizard.rssrc/wfl_config/checker.rs
🧠 Learnings (31)
📓 Common learnings
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Applies to **/*.wfl : WFL files must avoid using reserved keywords (60+ keywords: is, file, add, current, etc.) as identifiers; use underscores instead (e.g., is_active, myfile)
📚 Learning: 2026-01-14T18:06:04.095Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Applies to TestPrograms/docs_examples/**/*.wfl : All code examples in documentation must be validated with MCP tools before adding to docs
Applied to files:
TestPrograms/docs_examples/keyword_reference/pattern_examples.wflTestPrograms/docs_examples/keyword_reference/_meta/manifest.jsonCLAUDE.mdTestPrograms/docs_examples/keyword_reference/control_flow_examples.wflTestPrograms/docs_examples/keyword_reference/declaration_examples.wflTestPrograms/docs_examples/keyword_reference/process_examples.wflTestPrograms/docs_examples/keyword_reference/comparison_examples.wflTestPrograms/docs_examples/keyword_reference/error_handling_examples.wflTestPrograms/docs_examples/keyword_reference/file_io_examples.wfl
📚 Learning: 2025-08-11T05:10:43.202Z
Learnt from: logbie
Repo: WebFirstLanguage/wfl PR: 137
File: TestPrograms/test.wfl:1-2
Timestamp: 2025-08-11T05:10:43.202Z
Learning: Some test scripts in TestPrograms/ are deliberately designed to trigger errors as negative test cases to validate error handling and detection mechanisms. The file TestPrograms/test.wfl specifically tests variable redefinition error detection by attempting to use `store` twice on the same variable.
Applied to files:
TestPrograms/docs_examples/keyword_reference/contextual_keywords_examples.wflTestPrograms/docs_examples/keyword_reference/control_flow_examples.wflDocs/03-language-basics/variables-and-types.mdTestPrograms/docs_examples/keyword_reference/declaration_examples.wflTestPrograms/docs_examples/keyword_reference/comparison_examples.wflTestPrograms/docs_examples/keyword_reference/error_handling_examples.wflTestPrograms/docs_examples/keyword_reference/file_io_examples.wfl
📚 Learning: 2026-01-14T18:06:04.095Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Applies to **/*.wfl : WFL files must avoid using reserved keywords (60+ keywords: is, file, add, current, etc.) as identifiers; use underscores instead (e.g., is_active, myfile)
Applied to files:
TestPrograms/docs_examples/keyword_reference/contextual_keywords_examples.wflDocs/reference/reserved-keywords.mdTestPrograms/docs_examples/keyword_reference/operations_examples.wflCLAUDE.mdTestPrograms/docs_examples/keyword_reference/control_flow_examples.wflDocs/03-language-basics/variables-and-types.mdDocs/Archive/keywords-technical-reference.mdTestPrograms/docs_examples/keyword_reference/declaration_examples.wflTestPrograms/docs_examples/keyword_reference/process_examples.wflTestPrograms/docs_examples/keyword_reference/comparison_examples.wflDocs/reference/keyword-reference.mdDocs/06-best-practices/naming-conventions.mdTestPrograms/docs_examples/keyword_reference/file_io_examples.wfl
📚 Learning: 2026-01-14T18:06:04.095Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Applies to src/parser/**/*.rs : Parser must maintain contextual keyword handling for natural language syntax
Applied to files:
TestPrograms/docs_examples/keyword_reference/contextual_keywords_examples.wflDocs/guides/troubleshooting.md
📚 Learning: 2026-01-14T18:06:04.095Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Applies to TestPrograms/docs_examples/_meta/manifest.json : Documentation code examples must be tracked in manifest file at TestPrograms/docs_examples/_meta/manifest.json
Applied to files:
TestPrograms/docs_examples/keyword_reference/_meta/manifest.jsonTestPrograms/docs_examples/keyword_reference/declaration_examples.wflTestPrograms/docs_examples/keyword_reference/comparison_examples.wflTestPrograms/docs_examples/keyword_reference/file_io_examples.wfl
📚 Learning: 2026-01-14T18:05:40.917Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-14T18:05:40.917Z
Learning: Applies to **/*.wfl : Use underscores in WFL variable names to avoid 60+ reserved keywords (e.g., `is_active`, `myfile`, NOT `is` or `file`)
Applied to files:
Docs/reference/configuration-reference.mdCLAUDE.mdDocs/03-language-basics/variables-and-types.mdDocs/Archive/keywords-technical-reference.mdDocs/reference/keyword-reference.mdDocs/06-best-practices/naming-conventions.mdTestPrograms/docs_examples/keyword_reference/file_io_examples.wfl
📚 Learning: 2026-01-14T18:06:04.095Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Applies to **/*.wfl : WFL list operations must use 'push with <list> and <value>' syntax, NOT 'push to'
Applied to files:
TestPrograms/docs_examples/keyword_reference/operations_examples.wfl
📚 Learning: 2025-08-12T17:35:32.346Z
Learnt from: logbie
Repo: WebFirstLanguage/wfl PR: 150
File: tests/file_io_modes_test.rs:0-0
Timestamp: 2025-08-12T17:35:32.346Z
Learning: In the WFL project tests, file_io_execution_test.rs contains tests that actually execute WFL code through the interpreter and create real files, while file_io_modes_test.rs contains parser-only tests that don't execute code or create files during parsing.
Applied to files:
CLAUDE.mdsrc/main.rsCREDITS.mdTestPrograms/docs_examples/keyword_reference/file_io_examples.wfl
📚 Learning: 2026-01-14T18:06:04.095Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Applies to Docs/**/*.md : Documentation must follow Docs/wfl-documentation-policy.md and 19 principles in Docs/wfl-foundation.md
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-14T18:05:40.917Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-14T18:05:40.917Z
Learning: Keep `Docs/` current with major changes and validate all code examples with MCP before adding
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-14T18:05:40.917Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-14T18:05:40.917Z
Learning: Never break backward compatibility with existing WFL programs; run all `TestPrograms/` to verify
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-14T18:05:40.917Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-14T18:05:40.917Z
Learning: Refer to `.cursor/rules/wfl-rules.mdc` for additional IDE-specific rules and guidelines
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-14T18:06:04.095Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Never break existing WFL programs; backward compatibility is sacred and requires running all TestPrograms/
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-14T18:06:04.095Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Keep Docs/ current and maintain consistency with major code changes
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-14T18:05:40.917Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-14T18:05:40.917Z
Learning: Applies to Docs/**/*.md : All code examples in documentation must be validated with MCP tools before adding to docs
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-14T18:06:04.095Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Applies to **/*.wfl : WFL conditionals must use NESTED blocks: 'otherwise: check if', NOT 'otherwise check if'
Applied to files:
TestPrograms/docs_examples/keyword_reference/control_flow_examples.wfl
📚 Learning: 2026-01-14T18:05:40.917Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-14T18:05:40.917Z
Learning: Applies to **/*.wfl : WFL conditionals must use NESTED blocks: `otherwise: check if`, NOT `otherwise check if`
Applied to files:
TestPrograms/docs_examples/keyword_reference/control_flow_examples.wfl
📚 Learning: 2026-01-14T18:05:40.917Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-14T18:05:40.917Z
Learning: Applies to **/*.wfl : Use WFL typeof syntax: `typeof of value`, NOT `typeof(value)`
Applied to files:
Docs/03-language-basics/variables-and-types.md
📚 Learning: 2026-01-14T18:06:04.095Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Applies to **/*.wfl : WFL typeof syntax must use 'typeof of value', NOT 'typeof(value)'
Applied to files:
Docs/03-language-basics/variables-and-types.md
📚 Learning: 2026-01-14T18:06:04.095Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Applies to **/*.wfl : WFL count loop variable must use 'count', NOT 'the current count'
Applied to files:
Docs/03-language-basics/variables-and-types.md
📚 Learning: 2025-09-22T07:32:52.234Z
Learnt from: logbie
Repo: WebFirstLanguage/wfl PR: 161
File: Tools/test_file_list.wfl:4-12
Timestamp: 2025-09-22T07:32:52.234Z
Learning: In WFL, the correct syntax for async operations is "wait for" not "await". The pattern "wait for store variable as async_operation" is the established WFL syntax for async I/O operations.
Applied to files:
Docs/03-language-basics/variables-and-types.md
📚 Learning: 2025-09-22T07:32:52.234Z
Learnt from: logbie
Repo: WebFirstLanguage/wfl PR: 161
File: Tools/test_file_list.wfl:4-12
Timestamp: 2025-09-22T07:32:52.234Z
Learning: WFL uses "wait for" syntax for async operations, not "await". The correct pattern is "wait for store variable as async_operation" or "wait for async_operation". Examples: "wait for store files as list files in directory", "wait for write content into file".
Applied to files:
Docs/03-language-basics/variables-and-types.md
📚 Learning: 2026-01-14T18:06:04.095Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Applies to src/stdlib/**/*.rs : Standard Library must include crypto module with WFLHASH custom hash function implementation
Applied to files:
CREDITS.md
📚 Learning: 2026-01-14T18:06:04.095Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Applies to wfl-lsp/**/*.rs : LSP server implementation must use tower-lsp crate for Language Server Protocol
Applied to files:
CREDITS.md
📚 Learning: 2026-01-14T18:06:04.095Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Applies to src/stdlib/**/*.rs : Standard Library must include filesystem I/O with async support
Applied to files:
CREDITS.md
📚 Learning: 2026-01-14T18:06:04.095Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Applies to src/interpreter/**/*.rs : Interpreter must support web server functionality with HTTP request/response handling integrated via warp
Applied to files:
CREDITS.md
📚 Learning: 2026-01-14T18:06:04.095Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Use Rust edition 2024 with minimum version 1.75+ (development: 1.91.1+)
Applied to files:
CREDITS.md
📚 Learning: 2026-01-14T18:06:04.095Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Applies to src/lexer/**/*.rs : Lexer implementation must use the Logos crate for high-performance tokenization
Applied to files:
CREDITS.md
📚 Learning: 2026-01-14T18:06:04.095Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Applies to src/lexer/**/*.rs : Lexer implementation must use Logos crate for high-performance tokenization
Applied to files:
CREDITS.md
📚 Learning: 2026-01-14T18:06:04.095Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Applies to wfl-lsp/**/*.rs : LSP debug mode can be enabled with RUST_LOG=trace environment variable
Applied to files:
src/wfl_config/checker.rs
🧬 Code graph analysis (3)
src/wfl_config/mod.rs (1)
src/wfl_config/wizard.rs (1)
run_wizard(262-265)
src/main.rs (1)
src/wfl_config/wizard.rs (1)
run_wizard(262-265)
src/wfl_config/wizard.rs (1)
src/wfl_config/checker.rs (1)
default(101-103)
🪛 GitHub Actions: CI
src/main.rs
[error] 158-158: rustfmt formatting: multi-line eprintln block for --init flag handling should be on one line to satisfy cargo fmt
src/wfl_config/wizard.rs
[error] 31-31: rustfmt formatting: wrap long println! message across lines for consistency
[error] 38-38: rustfmt formatting: adjust closure to maintain consistent line breaks in map/collect chain
[error] 61-61: rustfmt formatting: wrap println! header blocks to multiple lines
[error] 102-102: rustfmt formatting: adjust function signature formatting to match style
[error] 173-173: rustfmt formatting: wrap warning/error message across lines
[error] 224-224: rustfmt formatting: adjust generated header write calls to multi-line style
[error] 231-231: rustfmt formatting: wrap multi-line writeln calls for configuration category header
[error] 332-340: rustfmt formatting: formatting of IPv4/IPv6 test assertions across multiple lines
src/wfl_config/checker.rs
[error] 289-289: cargo fmt --check failed: formatting change required for description string
[error] 665-665: cargo fmt --check formatting: adjust formatting of error message construction for IP address invalid value
🪛 LanguageTool
CREDITS.md
[style] ~3-~3: Consider using a more formal and expressive alternative to ‘amazing’.
Context: ...redits WFL would not exist without the amazing open source community. If we missed any...
(AWESOME)
[grammar] ~3-~3: Use a hyphen to join words.
Context: ...would not exist without the amazing open source community. If we missed any credi...
(QB_NEW_EN_HYPHEN)
[grammar] ~110-~110: Use a hyphen to join words.
Context: ...r matching file paths against Unix shell style patterns. - License: MIT/Apach...
(QB_NEW_EN_HYPHEN)
🪛 markdownlint-cli2 (0.18.1)
CREDITS.md
94-94: Bare URL used
(MD034, no-bare-urls)
100-100: Bare URL used
(MD034, no-bare-urls)
106-106: Bare URL used
(MD034, no-bare-urls)
112-112: Bare URL used
(MD034, no-bare-urls)
118-118: Bare URL used
(MD034, no-bare-urls)
124-124: Bare URL used
(MD034, no-bare-urls)
130-130: Bare URL used
(MD034, no-bare-urls)
136-136: Bare URL used
(MD034, no-bare-urls)
142-142: Bare URL used
(MD034, no-bare-urls)
148-148: Bare URL used
(MD034, no-bare-urls)
158-158: Bare URL used
(MD034, no-bare-urls)
164-164: Bare URL used
(MD034, no-bare-urls)
170-170: Bare URL used
(MD034, no-bare-urls)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: claude-review
✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.
| ``` | ||
|
|
||
| **[See reserved keywords →](../03-language-basics/variables-and-types.md#reserved-keywords)** | ||
| **[Quick keyword lookup →](../reference/keyword-reference.md)** | **[Why can't I use this keyword? →](../reference/reserved-keywords.md#contextual-keywords)** |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
# Check if the referenced files exist
ls -la Docs/reference/keyword-reference.md Docs/reference/reserved-keywords.md 2>&1
# Search for the contextual-keywords anchor in reserved-keywords.md
rg -n "contextual-keywords|Contextual Keywords" Docs/reference/reserved-keywords.md 2>&1
# Check the actual content of line 98 in troubleshooting.md
sed -n '95,101p' Docs/guides/troubleshooting.md 2>&1Repository: WebFirstLanguage/wfl
Length of output: 649
🏁 Script executed:
# Check the link format in error-codes.md and syntax-reference.md for consistency
echo "=== error-codes.md ===" && grep -n "\[.*→\]" Docs/reference/error-codes.md | head -3
echo "=== syntax-reference.md ===" && grep -n "\[.*→\]" Docs/reference/syntax-reference.md | head -3Repository: WebFirstLanguage/wfl
Length of output: 482
🏁 Script executed:
# Verify the documentation policy file exists
ls -la Docs/wfl-documentation-policy.md Docs/wfl-foundation.md 2>&1Repository: WebFirstLanguage/wfl
Length of output: 217
🏁 Script executed:
# Check documentation policy for link/anchor guidelines
head -100 Docs/wfl-documentation-policy.mdRepository: WebFirstLanguage/wfl
Length of output: 7055
🏁 Script executed:
# Verify what the correct heading text is in reserved-keywords.md around line 176
sed -n '174,178p' Docs/reference/reserved-keywords.mdRepository: WebFirstLanguage/wfl
Length of output: 293
Fix broken anchor link — use #contextual-keywords-29 instead of #contextual-keywords.
The link in line 98 points to an anchor that doesn't exist in reserved-keywords.md. The heading "## Contextual Keywords (29)" generates the anchor #contextual-keywords-29, not #contextual-keywords. Update the link to ../reference/reserved-keywords.md#contextual-keywords-29 to ensure it navigates correctly.
🤖 Prompt for AI Agents
In `@Docs/guides/troubleshooting.md` at line 98, Update the broken anchor in the
markdown link shown in the diff (the quick links line with "Quick keyword
lookup" / "Why can't I use this keyword?") by changing the second link's target
from ../reference/reserved-keywords.md#contextual-keywords to
../reference/reserved-keywords.md#contextual-keywords-29 so it matches the
actual heading anchor "## Contextual Keywords (29)".
| ConfigType::Integer => { | ||
| input.parse::<i64>().map_err(|_| { | ||
| format!("Invalid integer value: '{input}'") | ||
| })?; | ||
| Ok(input.to_string()) | ||
| } |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
# Get an overview of the file structure and find relevant files
find . -name "*.rs" -path "*/wfl_config/*" | head -20Repository: WebFirstLanguage/wfl
Length of output: 142
🏁 Script executed:
# Examine the wizard.rs file around the mentioned lines
cat -n src/wfl_config/wizard.rs | sed -n '120,145p'Repository: WebFirstLanguage/wfl
Length of output: 1449
🏁 Script executed:
# Search for ConfigType definition
rg "enum ConfigType|struct ConfigType" -A 10 -B 2Repository: WebFirstLanguage/wfl
Length of output: 599
🏁 Script executed:
# Search for unsigned parsing in config loading
rg "parse::<u" | head -20Repository: WebFirstLanguage/wfl
Length of output: 869
🏁 Script executed:
# Search for how Integer type is loaded/saved
rg "ConfigType::Integer" -B 2 -A 2Repository: WebFirstLanguage/wfl
Length of output: 4628
🏁 Script executed:
# Check the config.rs file to see how config values are loaded
wc -l src/config.rsRepository: WebFirstLanguage/wfl
Length of output: 82
🏁 Script executed:
# Look for Integer config loading in config.rs
rg "parse::<i64>|parse::<u64>|parse::<usize>" src/config.rs -B 3 -A 3Repository: WebFirstLanguage/wfl
Length of output: 2600
🏁 Script executed:
# Search for where ConfigType::Integer settings are actually used
rg "timeout_seconds|max_line_length|max_nesting_depth|indent_size" src/ -B 2 -A 2 | head -50Repository: WebFirstLanguage/wfl
Length of output: 2320
🏁 Script executed:
# Look at mod.rs to understand config structure
cat -n src/wfl_config/mod.rs | head -100Repository: WebFirstLanguage/wfl
Length of output: 288
Reject negative integers to match config loader expectations.
The wizard currently accepts negative values via i64 parsing, but src/config.rs loads all ConfigType::Integer settings using unsigned types (u64, usize). If a user enters a negative value, it gets written to the config file but silently ignored during loading—the parse attempt fails, and the default value is used instead, creating confusing UX. All integer settings (timeout_seconds, max_line_length, max_nesting_depth, indent_size, etc.) are semantically non-negative, so validation should reject negatives at input time.
Proposed fix
ConfigType::Integer => {
- input.parse::<i64>().map_err(|_| {
- format!("Invalid integer value: '{input}'")
- })?;
- Ok(input.to_string())
+ let parsed = input.parse::<i64>().map_err(|_| {
+ format!("Invalid integer value: '{input}'")
+ })?;
+ if parsed < 0 {
+ return Err("Value must be a non-negative integer".to_string());
+ }
+ Ok(parsed.to_string())
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ConfigType::Integer => { | |
| input.parse::<i64>().map_err(|_| { | |
| format!("Invalid integer value: '{input}'") | |
| })?; | |
| Ok(input.to_string()) | |
| } | |
| ConfigType::Integer => { | |
| let parsed = input.parse::<i64>().map_err(|_| { | |
| format!("Invalid integer value: '{input}'") | |
| })?; | |
| if parsed < 0 { | |
| return Err("Value must be a non-negative integer".to_string()); | |
| } | |
| Ok(parsed.to_string()) | |
| } |
🤖 Prompt for AI Agents
In `@src/wfl_config/wizard.rs` around lines 130 - 135, The integer branch
(ConfigType::Integer) currently accepts negative values by parsing with
input.parse::<i64>(), but values must be non-negative because the loader expects
unsigned types; update the validation to parse the input as a signed integer,
then reject any value < 0 with a clear error (e.g., "Invalid non-negative
integer value: '{input}'") so negatives are not written to the config; locate
the check in the ConfigType::Integer match arm (the input.parse::<i64>() call)
and add the non-negative guard before returning Ok(input.to_string()).
| { | ||
| "version": "1.0", | ||
| "last_updated": "2026-01-16", | ||
| "description": "Keyword reference documentation examples", | ||
| "validation_status": "in_progress", | ||
| "examples": [ | ||
| { | ||
| "file": "control_flow_examples.wfl", | ||
| "keywords_covered": ["check", "if", "otherwise", "end", "for", "each", "in", "count", "from", "to", "by", "repeat", "while", "until", "break", "continue", "skip"], | ||
| "validation_status": "needs_syntax_fixes", | ||
| "notes": "List creation syntax needs correction", | ||
| "tested_with": ["parse", "analyze", "typecheck", "lint"] | ||
| }, | ||
| { | ||
| "file": "declaration_examples.wfl", | ||
| "keywords_covered": ["store", "as", "change", "define", "action", "called", "with", "return", "property", "container"], | ||
| "validation_status": "pending", | ||
| "tested_with": [] | ||
| }, | ||
| { | ||
| "file": "operations_examples.wfl", | ||
| "keywords_covered": ["display", "call", "push", "pop", "add", "return", "give", "back"], | ||
| "validation_status": "pending", | ||
| "tested_with": [] | ||
| }, | ||
| { | ||
| "file": "comparison_examples.wfl", | ||
| "keywords_covered": ["is", "and", "or", "not", "greater", "less", "than", "equal"], | ||
| "validation_status": "pending", | ||
| "tested_with": [] | ||
| }, | ||
| { | ||
| "file": "pattern_examples.wfl", | ||
| "keywords_covered": ["pattern", "matches", "find", "digit", "letter", "text"], | ||
| "validation_status": "simplified", | ||
| "notes": "Simplified version - full pattern matching requires pattern module", | ||
| "tested_with": [] | ||
| }, | ||
| { | ||
| "file": "file_io_examples.wfl", | ||
| "keywords_covered": ["file", "open", "read", "write", "close", "extension", "files"], | ||
| "validation_status": "simplified", | ||
| "notes": "Simplified version - full file I/O requires filesystem access", | ||
| "tested_with": [] | ||
| }, | ||
| { | ||
| "file": "web_network_examples.wfl", | ||
| "keywords_covered": ["server", "port", "request", "response", "listen", "status", "header"], | ||
| "validation_status": "simplified", | ||
| "notes": "Simplified version - full web examples require web server functionality", | ||
| "tested_with": [] | ||
| }, | ||
| { | ||
| "file": "containers_examples.wfl", | ||
| "keywords_covered": ["container", "property", "extends", "new", "define", "action"], | ||
| "validation_status": "pending", | ||
| "tested_with": [] | ||
| }, | ||
| { | ||
| "file": "error_handling_examples.wfl", | ||
| "keywords_covered": ["try", "catch", "when", "error"], | ||
| "validation_status": "pending", | ||
| "tested_with": [] | ||
| }, | ||
| { | ||
| "file": "process_examples.wfl", | ||
| "keywords_covered": ["process", "execute", "command", "spawn", "shell", "arguments"], | ||
| "validation_status": "simplified", | ||
| "notes": "Simplified version - full process examples require subprocess capabilities", | ||
| "tested_with": [] | ||
| }, | ||
| { | ||
| "file": "contextual_keywords_examples.wfl", | ||
| "keywords_covered": ["count", "list", "pattern", "at", "called", "change", "create", "text", "back", "give", "needs", "reversed"], | ||
| "validation_status": "pending", | ||
| "notes": "Demonstrates contextual keyword usage as variables", | ||
| "tested_with": [] | ||
| } | ||
| ], | ||
| "next_steps": [ | ||
| "Fix syntax errors in control_flow_examples.wfl", | ||
| "Validate all pending examples with MCP tools", | ||
| "Expand simplified examples with full functionality", | ||
| "Add more edge case examples for contextual keywords" | ||
| ] |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Locate docs example manifests
fd -a "manifest.json" TestPrograms/docs_examples
# If the root manifest exists, ensure keyword_reference examples are listed
if [ -f TestPrograms/docs_examples/_meta/manifest.json ]; then
echo "=== Root manifest found, checking for keyword_reference references ==="
rg -n "keyword_reference/.*\.wfl" TestPrograms/docs_examples/_meta/manifest.json
echo "=== Full root manifest content ==="
cat TestPrograms/docs_examples/_meta/manifest.json
fiRepository: WebFirstLanguage/wfl
Length of output: 6150
Add keyword_reference examples to the root manifest and align with required schema.
The keyword_reference examples are not tracked in the root TestPrograms/docs_examples/_meta/manifest.json as required by documentation policy. Each example must be registered in the root manifest using the schema format (with doc_section, type, validate_layers, last_validated, validation_result, and doc_purpose fields). The subdirectory manifest uses an incompatible structure and cannot serve as the primary registry.
Additionally, complete MCP validation (layers 1–5 as applicable) and populate last_validated timestamps and validation_result status in the root manifest before publication.
🤖 Prompt for AI Agents
In `@TestPrograms/docs_examples/keyword_reference/_meta/manifest.json` around
lines 1 - 85, The root manifest must be updated to register each
keyword_reference example currently only listed in
TestPrograms/docs_examples/keyword_reference/_meta/manifest.json; add an entry
for each file (e.g., control_flow_examples.wfl, declaration_examples.wfl,
operations_examples.wfl, etc.) into the root
TestPrograms/docs_examples/_meta/manifest.json using the required schema keys:
doc_section (keyword_reference), type (example), validate_layers (array of MCP
layers to run, e.g., [1,2,3,4,5] as applicable), last_validated (ISO timestamp),
validation_result (pass/needs_syntax_fixes/pending), and doc_purpose (brief
purpose string); run the MCP validation for layers 1–5 for each example to set
accurate last_validated timestamps and validation_result values before
committing.
| define action called is_even with parameters number: | ||
| store remainder as number minus 10 | ||
| check if remainder is equal to 0: | ||
| return yes | ||
| end check | ||
| return no | ||
| end action | ||
|
|
||
| store check_result as call is_even with 10 | ||
| display "Is 10 even? " with check_result |
There was a problem hiding this comment.
Incorrect logic in is_even function—does not check for evenness.
The function computes number minus 10 and checks if the result equals 0, which only tests if number == 10, not whether the number is even. The test on line 65 passes coincidentally because 10 - 10 = 0.
If WFL supports modulo, use that. Otherwise, rename the function to reflect its actual behavior or add a comment clarifying this is a placeholder.
Option 1: Rename to reflect actual behavior
-// Example 7: Return value from action
-define action called is_even with parameters number:
- store remainder as number minus 10
+// Example 7: Return value from action (placeholder logic)
+define action called is_ten with parameters number:
+ store difference as number minus 10
check if remainder is equal to 0:
return yes
end check
return no
end action
-store check_result as call is_even with 10
-display "Is 10 even? " with check_result
+store check_result as call is_ten with 10
+display "Is 10 equal to 10? " with check_resultOption 2: Add clarifying comment if modulo is unavailable
// Example 7: Return value from action
+// Note: WFL does not support modulo; this is a simplified demonstration
define action called is_even with parameters number:
- store remainder as number minus 10
+ // Placeholder logic - actual even check would require modulo
+ store remainder as number minus 10
check if remainder is equal to 0:
return yes
end check
return no
end action📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| define action called is_even with parameters number: | |
| store remainder as number minus 10 | |
| check if remainder is equal to 0: | |
| return yes | |
| end check | |
| return no | |
| end action | |
| store check_result as call is_even with 10 | |
| display "Is 10 even? " with check_result | |
| // Example 7: Return value from action | |
| // Note: WFL does not support modulo; this is a simplified demonstration | |
| define action called is_even with parameters number: | |
| // Placeholder logic - actual even check would require modulo | |
| store remainder as number minus 10 | |
| check if remainder is equal to 0: | |
| return yes | |
| end check | |
| return no | |
| end action | |
| store check_result as call is_even with 10 | |
| display "Is 10 even? " with check_result |
🤖 Prompt for AI Agents
In `@TestPrograms/docs_examples/keyword_reference/operations_examples.wfl` around
lines 57 - 66, The is_even action currently computes "remainder as number minus
10" which only checks number == 10; change the logic in the is_even action to
compute remainder as "number modulo 2" (use the language's modulo operator) and
then check if remainder is equal to 0 to return yes/ no; if modulo is
unavailable, instead rename the action (is_even) and the call to reflect its
actual behavior (e.g., is_ten) or add a clarifying comment above the action
indicating it checks for equality with 10 rather than evenness, updating the
callsite (call is_even with 10) accordingly.
| store command as "echo hello" | ||
| store process as "background_task" |
There was a problem hiding this comment.
Reserved keywords used as variable names will cause parser errors.
command and process are reserved keywords in WFL (listed under "Process & Execution" keywords). They cannot be used as variable names. Per coding guidelines, use underscores to avoid conflicts.
🐛 Proposed fix
-store command as "echo hello"
-store process as "background_task"
+store command_string as "echo hello"
+store process_name as "background_task"
-display "Command: " with command
-display "Process: " with process
+display "Command: " with command_string
+display "Process: " with process_name🤖 Prompt for AI Agents
In `@TestPrograms/docs_examples/keyword_reference/process_examples.wfl` around
lines 9 - 10, The variables named "command" and "process" conflict with WFL
reserved keywords; rename them to avoid parser errors (e.g., use command_text or
command_var and process_name or background_task_var) and update any references
accordingly so the store statements no longer use the reserved identifiers
"command" or "process".
| store arguments as "arg1 arg2" | ||
| store output as "result" |
There was a problem hiding this comment.
Reserved keywords arguments and output used as variable names.
Both arguments and output are reserved keywords in WFL. This will cause parser errors.
🐛 Proposed fix
-store arguments as "arg1 arg2"
-store output as "result"
+store arg_list as "arg1 arg2"
+store output_result as "result"
-display "Arguments: " with arguments
-display "Output: " with output
+display "Arguments: " with arg_list
+display "Output: " with output_result🤖 Prompt for AI Agents
In `@TestPrograms/docs_examples/keyword_reference/process_examples.wfl` around
lines 16 - 17, The WFL script uses reserved keywords `arguments` and `output` as
variable names in the store statements (`store arguments as "arg1 arg2"` and
`store output as "result"`), which will break the parser; rename these variables
to non-reserved identifiers (e.g., `args`, `arg_list`, `result_var`, or similar)
in the `store` commands and update any downstream references to those names
(search for `arguments` and `output` usages) so all occurrences use the new
identifiers consistently.
|
Claude finished @logbie's task —— View job PR Review: Refactor - Remove web framework and improve configurationReview Progress
✅ Overall AssessmentThis is an excellent refactoring that significantly improves the project's focus and maintainability. The removal of 19,502 lines while adding valuable new features demonstrates thoughtful architecture decisions. 📋 Detailed Review🎯 Configuration Management - Excellent ImplementationThe new configuration system in Strengths:
Potential Improvements:
📚 Documentation Overhaul - Outstanding WorkThe two-tiered keyword documentation system is brilliant: Strengths:
Minor Suggestions:
🔒 Security ReviewGood practices observed:
No significant security concerns identified. ⚡ Performance & ArchitectureStrengths:
Architecture Benefits:
🧪 Test Coverage AssessmentStrengths:
Recommendations:
🚧 Potential Issues
🏆 RecommendationsHigh Priority:
Medium Priority:
Low Priority:
🎉 ConclusionThis PR represents high-quality engineering work that:
Recommendation: APPROVE with the minor suggestions addressed post-merge. The configuration enhancements alone justify this refactoring, and the documentation improvements are exceptional. The codebase is now more focused, maintainable, and user-friendly. |
Runs rustfmt to standardize code style across multiple files. This improves readability and maintainability without altering functionality.
|
Claude finished @logbie's task —— View job PR Review: Refactor - Remove web framework and improve configurationReview Progress
✅ Overall AssessmentThis is an excellent refactoring that significantly improves the project's focus and maintainability. The removal of 19,502 lines while adding valuable new features demonstrates thoughtful architecture decisions. 📋 Detailed Review🎯 Configuration Management - Excellent ImplementationThe new configuration system in Strengths:
Potential Improvements:
📚 Documentation Overhaul - Outstanding WorkThe two-tiered keyword documentation system is brilliant: Strengths:
Minor Suggestions:
🔒 Security ReviewGood practices observed:
No significant security concerns identified. ⚡ Performance & ArchitectureStrengths:
Architecture Benefits:
🧪 Test Coverage AssessmentStrengths:
Recommendations:
🚧 Potential Issues
🏆 RecommendationsHigh Priority:
Medium Priority:
Low Priority:
🎉 ConclusionThis PR represents high-quality engineering work that:
Recommendation: APPROVE with the minor suggestions addressed post-merge. The configuration enhancements alone justify this refactoring, and the documentation improvements are exceptional. The codebase is now more focused, maintainable, and user-friendly. |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 126 out of 142 changed files in this pull request and generated no new comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/wfl_config/checker.rs (1)
565-582: Integer validation accepts negative values, inconsistent with config loader.Similar to the wizard,
check_config_filevalidates integers usingi64::parsewhich accepts negative values. However, the config loader uses unsigned types (u64,usize), so a file withtimeout_seconds = -1would pass validation but fail to load properly.Proposed fix
ConfigType::Integer => { - if value.parse::<i64>().is_err() { + let parsed = value.parse::<i64>(); + if parsed.is_err() || parsed.unwrap() < 0 { issues.push(ConfigIssue { file_path: file_path.to_path_buf(), kind: ConfigIssueKind::InvalidType, issue_type: ConfigIssueType::Error, message: format!( - "Invalid type for {key}: expected integer, got '{value}'" + "Invalid type for {key}: expected non-negative integer, got '{value}'" ),
🤖 Fix all issues with AI agents
In `@src/wfl_config/wizard.rs`:
- Around line 324-326: The test in wizard.rs incorrectly expects a negative
integer to be accepted by validate_input for an unsigned setting: locate the
test assertions referencing validate_input (the two lines asserting "123" and
"-456") and remove or change the negative-case assertion so it asserts an error
instead of success; specifically update the test that calls
wizard.validate_input(&setting, "-456") to expect a validation failure (e.g.,
assert that validation returns an Err) or simply delete that line to reflect
that unsigned types must reject negative values.
♻️ Duplicate comments (2)
src/wfl_config/checker.rs (1)
436-447: Verify that new subprocess settings are parsed by config loader.Multiple new settings (
warn_on_orphan,enable_reaper,reaper_interval_secs,kill_on_shutdown, etc.) are defined here but may not be handled insrc/config.rs. Users setting these values would see them accepted by--configCheckbut silently ignored at runtime.#!/bin/bash # Check which subprocess management settings are actually parsed in config.rs echo "=== Settings defined in checker.rs ===" rg -o '"(warn_on_orphan|enable_reaper|reaper_interval_secs|kill_on_shutdown|enable_auto_cleanup|max_concurrent_processes|max_buffer_size_bytes)"' src/wfl_config/checker.rs | sort -u echo "" echo "=== Settings parsed in config.rs ===" rg -n 'warn_on_orphan|enable_reaper|reaper_interval_secs|kill_on_shutdown|enable_auto_cleanup|max_concurrent_processes|max_buffer_size_bytes' src/config.rssrc/wfl_config/wizard.rs (1)
130-135: Reject negative integers to match config loader expectations.The wizard accepts negative values via
i64parsing, but the config loader uses unsigned types (u64,usize). Negative values will be written but silently ignored during loading, causing confusing UX. All integer settings are semantically non-negative.Proposed fix
ConfigType::Integer => { - input - .parse::<i64>() - .map_err(|_| format!("Invalid integer value: '{input}'"))?; - Ok(input.to_string()) + let parsed = input.parse::<i64>().map_err(|_| { + format!("Invalid integer value: '{input}'") + })?; + if parsed < 0 { + return Err("Value must be a non-negative integer".to_string()); + } + Ok(parsed.to_string()) }
🧹 Nitpick comments (1)
src/wfl_config/checker.rs (1)
472-494: Consider deriving categories from settings to avoid hardcoded list drift.The hardcoded category list at lines 473-480 must be manually kept in sync with categories assigned to settings. If a new category is added to a setting but not to this list, those settings will be silently omitted from the wizard.
Alternative approach using derived categories
pub fn get_settings_by_category(&self) -> Vec<(String, Vec<&ExpectedSetting>)> { - let categories = vec![ - "General Runtime", - "Execution Logging", - "Code Quality", - "Security", - "Subprocess Management", - "Web Server", - ]; + // Define category order for consistent display + let category_order = [ + "General Runtime", + "Execution Logging", + "Code Quality", + "Security", + "Subprocess Management", + "Web Server", + ]; + + // Collect all unique categories from settings + let mut seen_categories: std::collections::HashSet<&str> = std::collections::HashSet::new(); + for setting in self.expected_settings.values() { + seen_categories.insert(&setting.category); + } + + // Warn if any settings have categories not in the ordering list + for cat in &seen_categories { + if !category_order.contains(cat) { + eprintln!("Warning: Unknown category '{}' found in settings", cat); + } + } - categories + category_order .into_iter() .map(|category| {
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
src/main.rssrc/wfl_config/checker.rssrc/wfl_config/wizard.rs
🚧 Files skipped from review as they are similar to previous changes (1)
- src/main.rs
🧰 Additional context used
📓 Path-based instructions (1)
**/*.rs
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.rs: Usesnake_casefor function and file names
UseCamelCasefor types and traits
UseSCREAMING_SNAKE_CASEfor constants
Runcargo fmt --allfor code formatting before commits
Runcargo clippy --all-targets --all-features -- -D warningsto lint code and eliminate all warnings
**/*.rs: Use snake_case for function and file names
Use CamelCase for types and traits
Use SCREAMING_SNAKE_CASE for constants
Run 'cargo fmt --all' to format code according to .rustfmt.toml
Run 'cargo clippy --all-targets --all-features -- -D warnings' to ensure no clippy warnings
Files:
src/wfl_config/checker.rssrc/wfl_config/wizard.rs
🧠 Learnings (5)
📚 Learning: 2026-01-14T18:06:04.095Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Pre-PR checks must include: 'cargo fmt --all -- --check', 'cargo clippy --all-targets --all-features -- -D warnings', and 'cargo test --all --verbose'
Applied to files:
src/wfl_config/checker.rs
📚 Learning: 2026-01-14T18:05:40.917Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-14T18:05:40.917Z
Learning: Applies to **/*.rs : Run `cargo fmt --all` for code formatting before commits
Applied to files:
src/wfl_config/checker.rs
📚 Learning: 2026-01-14T18:06:04.095Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Applies to **/*.rs : Run 'cargo fmt --all' to format code according to .rustfmt.toml
Applied to files:
src/wfl_config/checker.rs
📚 Learning: 2026-01-14T18:06:04.095Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Applies to **/*.rs : Run 'cargo clippy --all-targets --all-features -- -D warnings' to ensure no clippy warnings
Applied to files:
src/wfl_config/checker.rs
📚 Learning: 2026-01-14T18:06:04.095Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Applies to wfl-lsp/**/*.rs : LSP debug mode can be enabled with RUST_LOG=trace environment variable
Applied to files:
src/wfl_config/checker.rs
🧬 Code graph analysis (1)
src/wfl_config/wizard.rs (1)
src/wfl_config/checker.rs (3)
new(107-464)value(566-566)default(101-103)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Integration Tests (windows-latest)
🔇 Additional comments (13)
src/wfl_config/wizard.rs (9)
1-12: LGTM!The imports and struct definition are clean. The
ConfigWizardcorrectly encapsulates the editor, checker, and accumulated values.
14-28: LGTM!The constructor properly initializes the editor with appropriate error conversion.
30-54: LGTM!The run flow is well-structured: clear user instructions, category-based prompting, and final file generation.
56-79: LGTM!Alphabetical sorting within categories provides predictable UX.
81-107: LGTM!The retry loop with clear error messaging provides good user experience for input validation.
171-185: Good security awareness!The warning about
0.0.0.0binding being accessible from any network interface is a helpful security consideration for users.
203-219: LGTM!The prompt formatting is clear and user-friendly, showing all relevant information.
221-270: LGTM!The generated config file is well-structured with clear category headers and setting descriptions as comments.
273-277: LGTM!Clean public entry point.
src/wfl_config/checker.rs (4)
19-36: LGTM!The new
ConfigTypevariants (ShellMode,StringList,IpAddress) with their display implementations are well-defined and consistent with existing variants.
93-94: LGTM!The
categoryfield enables logical grouping of settings for better organization in the wizard.
639-678: LGTM!The validation branches for new
ConfigTypevariants are consistent with existing patterns. TheStringListaccepting any value is reasonable for comma-separated lists where valid commands depend on the system.
899-903: LGTM!Using
std::net::IpAddrfor validation is the idiomatic approach that correctly handles both IPv4 and IPv6.
✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.
| // Test valid integers | ||
| assert_eq!(wizard.validate_input(&setting, "123").unwrap(), "123"); | ||
| assert_eq!(wizard.validate_input(&setting, "-456").unwrap(), "-456"); |
There was a problem hiding this comment.
Test expects negative integers to be valid, but they should be rejected.
This test asserts that -456 is valid, which contradicts the config loader's use of unsigned types. If the negative integer validation fix is applied, this test case should be removed or changed to assert an error.
Proposed fix (after applying the validation fix)
// Test valid integers
assert_eq!(wizard.validate_input(&setting, "123").unwrap(), "123");
- assert_eq!(wizard.validate_input(&setting, "-456").unwrap(), "-456");
+
+ // Test that negative integers are rejected
+ assert!(wizard.validate_input(&setting, "-456").is_err());📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| // Test valid integers | |
| assert_eq!(wizard.validate_input(&setting, "123").unwrap(), "123"); | |
| assert_eq!(wizard.validate_input(&setting, "-456").unwrap(), "-456"); | |
| // Test valid integers | |
| assert_eq!(wizard.validate_input(&setting, "123").unwrap(), "123"); | |
| // Test that negative integers are rejected | |
| assert!(wizard.validate_input(&setting, "-456").is_err()); |
🤖 Prompt for AI Agents
In `@src/wfl_config/wizard.rs` around lines 324 - 326, The test in wizard.rs
incorrectly expects a negative integer to be accepted by validate_input for an
unsigned setting: locate the test assertions referencing validate_input (the two
lines asserting "123" and "-456") and remove or change the negative-case
assertion so it asserts an error instead of success; specifically update the
test that calls wizard.validate_input(&setting, "-456") to expect a validation
failure (e.g., assert that validation returns an Err) or simply delete that line
to reflect that unsigned types must reject negative values.
Adopts `let-chaining` syntax to flatten nested `if let` statements, improving code readability and conciseness. Also includes minor cleanups such as: - Replacing `io::Error::new` with the `io::Error::other` shorthand. - Removing an unnecessary `format!` macro call. - Deleting an unused import.
|
Claude finished @logbie's task —— View job PR Review: Refactor - Remove web framework and improve configurationReview Progress
✅ Overall AssessmentThis is an excellent refactoring that significantly improves the project's focus and maintainability. The removal of 19,502 lines while adding valuable new features demonstrates thoughtful architecture decisions. 📋 Detailed Review🎯 Configuration Management - Excellent ImplementationThe new configuration system in Strengths:
Potential Improvements:
📚 Documentation Overhaul - Outstanding WorkThe two-tiered keyword documentation system is brilliant: Strengths:
Minor Suggestions:
🔒 Security ReviewGood practices observed:
No significant security concerns identified. ⚡ Performance & ArchitectureStrengths:
Architecture Benefits:
🧪 Test Coverage AssessmentStrengths:
Recommendations:
🚧 Potential Issues
🏆 RecommendationsHigh Priority:
Medium Priority:
Low Priority:
🎉 ConclusionThis PR represents high-quality engineering work that:
Recommendation: APPROVE with the minor suggestions addressed post-merge. The configuration enhancements alone justify this refactoring, and the documentation improvements are exceptional. The codebase is now more focused, maintainable, and user-friendly. |
|
@ claude fix formatting |
|
Claude finished @logbie's task —— View job PR Review: Refactor - Remove web framework and improve configurationReview Progress
✅ Overall AssessmentThis is an excellent refactoring that significantly improves the project's focus and maintainability. The removal of 19,502 lines while adding valuable new features demonstrates thoughtful architecture decisions. 📋 Detailed Review🎯 Configuration Management - Excellent ImplementationThe new configuration system in Strengths:
Potential Improvements:
📚 Documentation Overhaul - Outstanding WorkThe two-tiered keyword documentation system is brilliant: Strengths:
Minor Suggestions:
🔒 Security ReviewGood practices observed:
No significant security concerns identified. ⚡ Performance & ArchitectureStrengths:
Architecture Benefits:
🧪 Test Coverage AssessmentStrengths:
Recommendations:
🚧 Potential Issues
🏆 RecommendationsHigh Priority:
Medium Priority:
Low Priority:
🎉 ConclusionThis PR represents high-quality engineering work that:
Recommendation: APPROVE with the minor suggestions addressed post-merge. The configuration enhancements alone justify this refactoring, and the documentation improvements are exceptional. The codebase is now more focused, maintainable, and user-friendly. |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 126 out of 142 changed files in this pull request and generated no new comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Fix all issues with AI agents
In `@src/config.rs`:
- Around line 675-696: The CI failure is due to formatting in src/config.rs
around the loop and subsequent conditional using current_dir, found_local_config
and parse_config_text; run rustfmt by executing cargo fmt --all (or cargo fmt on
the workspace) to reformat the file so the if-let and associated block match
project style and satisfy cargo fmt --check.
- Around line 618-639: Canonicalize the starting directory before the upward
walk so relative paths are resolved to an absolute path: call
std::fs::canonicalize(dir).unwrap_or_else(|_| dir.to_path_buf()) and assign that
to current_dir (replace let mut current_dir = Some(dir.to_path_buf())). Then
continue the existing loop using current_dir and keep the found_local_config
handling (reading with std::fs::read_to_string and calling
parse_config_text(&mut config, &text, &local_config)); this ensures all ancestor
directories are checked even when given a relative path.
In `@src/wfl_config/wizard.rs`:
- Around line 1-5: This file failed CI formatting; run rustfmt by executing
`cargo fmt --all` (or `cargo fmt`) to reformat src/wfl_config/wizard.rs so
imports and spacing follow project style; after formatting, re-run `cargo fmt --
--check` to verify the file (symbols to check: the top-level use lines like
DefaultEditor, HashMap, io, Path in wizard.rs).
♻️ Duplicate comments (2)
src/wfl_config/wizard.rs (2)
126-131: Reject negative integers to match loader expectations.The config loader parses these fields as unsigned types, so negative values will be silently ignored later. Validation should reject negatives at input time.
🔧 Suggested fix
ConfigType::Integer => { - input - .parse::<i64>() - .map_err(|_| format!("Invalid integer value: '{input}'"))?; - Ok(input.to_string()) + let parsed = input + .parse::<i64>() + .map_err(|_| format!("Invalid integer value: '{input}'"))?; + if parsed < 0 { + return Err("Value must be a non-negative integer".to_string()); + } + Ok(parsed.to_string()) }
319-321: Update integer validation test to reject negatives.Test should align with the non-negative requirement.
🧪 Suggested update
// Test valid integers assert_eq!(wizard.validate_input(&setting, "123").unwrap(), "123"); - assert_eq!(wizard.validate_input(&setting, "-456").unwrap(), "-456"); + assert!(wizard.validate_input(&setting, "-456").is_err());
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
src/config.rssrc/wfl_config/wizard.rs
🧰 Additional context used
📓 Path-based instructions (1)
**/*.rs
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.rs: Usesnake_casefor function and file names
UseCamelCasefor types and traits
UseSCREAMING_SNAKE_CASEfor constants
Runcargo fmt --allfor code formatting before commits
Runcargo clippy --all-targets --all-features -- -D warningsto lint code and eliminate all warnings
**/*.rs: Use snake_case for function and file names
Use CamelCase for types and traits
Use SCREAMING_SNAKE_CASE for constants
Run 'cargo fmt --all' to format code according to .rustfmt.toml
Run 'cargo clippy --all-targets --all-features -- -D warnings' to ensure no clippy warnings
Files:
src/wfl_config/wizard.rssrc/config.rs
🧬 Code graph analysis (1)
src/wfl_config/wizard.rs (1)
src/wfl_config/checker.rs (2)
new(107-464)default(101-103)
🪛 GitHub Actions: CI
src/wfl_config/wizard.rs
[error] 1-1: cargo fmt --check failed due to formatting differences in wizard.rs. Run 'cargo fmt' to fix formatting.
src/config.rs
[error] 1-1: cargo fmt --check failed: code formatting differences detected. Run 'cargo fmt' to format the code.
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: claude-review
✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.
Applies stylistic adjustments across the configuration and wizard modules. These changes primarily involve reformatting `if let` chains and error handling blocks to align with standard style conventions, enhancing readability without altering program logic.
|
Claude finished @logbie's task —— View job PR Review: Refactor - Remove web framework and improve configurationReview Progress
✅ Overall AssessmentThis is an excellent refactoring that significantly improves the project's focus and maintainability. The removal of 19,502 lines while adding valuable new features demonstrates thoughtful architecture decisions. 📋 Detailed Review🎯 Configuration Management - Excellent ImplementationThe new configuration system in Strengths:
Potential Improvements:
📚 Documentation Overhaul - Outstanding WorkThe two-tiered keyword documentation system is brilliant: Strengths:
Minor Suggestions:
🔒 Security ReviewGood practices observed:
No significant security concerns identified. ⚡ Performance & ArchitectureStrengths:
Architecture Benefits:
🧪 Test Coverage AssessmentStrengths:
Recommendations:
🚧 Potential Issues
🏆 RecommendationsHigh Priority:
Medium Priority:
Low Priority:
🎉 ConclusionThis PR represents high-quality engineering work that:
Recommendation: APPROVE with the minor suggestions addressed post-merge. The configuration enhancements alone justify this refactoring, and the documentation improvements are exceptional. The codebase is now more focused, maintainable, and user-friendly. |
|
Claude finished @logbie's task —— View job PR Review: Refactor - Remove web framework and improve configurationReview Progress
✅ Overall AssessmentThis is an excellent refactoring that significantly improves the project's focus and maintainability. The removal of 19,502 lines while adding valuable new features demonstrates thoughtful architecture decisions. 📋 Detailed Review🎯 Configuration Management - Excellent ImplementationThe new configuration system in Strengths:
Potential Improvements:
📚 Documentation Overhaul - Outstanding WorkThe two-tiered keyword documentation system is brilliant: Strengths:
Minor Suggestions:
🔒 Security ReviewGood practices observed:
No significant security concerns identified. ⚡ Performance & ArchitectureStrengths:
Architecture Benefits:
🧪 Test Coverage AssessmentStrengths:
Recommendations:
🚧 Potential Issues
🏆 RecommendationsHigh Priority:
Medium Priority:
Low Priority:
🎉 ConclusionThis PR represents high-quality engineering work that:
Recommendation: APPROVE with the minor suggestions addressed post-merge. The configuration enhancements alone justify this refactoring, and the documentation improvements are exceptional. The codebase is now more focused, maintainable, and user-friendly. |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 126 out of 142 changed files in this pull request and generated no new comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Adds a post-tool-use hook that automatically runs `cargo fmt` on any Rust files after they are edited or written. This ensures consistent code styling across the project without requiring manual formatting.
|
Claude finished @logbie's task —— View job PR Review: Refactor - Remove web framework and improve configurationReview Progress
✅ Overall AssessmentThis is an excellent refactoring that significantly improves the project's focus and maintainability. The removal of 19,502 lines while adding valuable new features demonstrates thoughtful architecture decisions. 📋 Detailed Review🎯 Configuration Management - Excellent ImplementationThe new configuration system in Strengths:
Potential Improvements:
📚 Documentation Overhaul - Outstanding WorkThe two-tiered keyword documentation system is brilliant: Strengths:
Minor Suggestions:
🔒 Security ReviewGood practices observed:
No significant security concerns identified. ⚡ Performance & ArchitectureStrengths:
Architecture Benefits:
🧪 Test Coverage AssessmentStrengths:
Recommendations:
🚧 Potential Issues
🏆 RecommendationsHigh Priority:
Medium Priority:
Low Priority:
🎉 ConclusionThis PR represents high-quality engineering work that:
Recommendation: APPROVE with the minor suggestions addressed post-merge. The configuration enhancements alone justify this refactoring, and the documentation improvements are exceptional. The codebase is now more focused, maintainable, and user-friendly. |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Fix all issues with AI agents
In @.claude/settings.json:
- Around line 8-10: The hook command using "powershell -Command" in the
settings.json is Windows-only and will fail on macOS/Linux; either document that
this Claude hook is Windows-only in repository docs (README) and mark the
"command" entry as Windows-only, or replace the "command" value with
cross-platform logic: detect runtime (prefer pwsh if installed, else fall back
to sh/bash) and run the appropriate formatter command (e.g., cargo fmt or
rustfmt) and/or use "pwsh" if targeting PowerShell Core; update the
settings.json "command" entry and add a short note in the README clarifying
platform requirements and prerequisites such as PowerShell Core if you keep
pwsh.
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
.claude/settings.json
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Applies to **/*.wfl : WFL files must avoid using reserved keywords (60+ keywords: is, file, add, current, etc.) as identifiers; use underscores instead (e.g., is_active, myfile)
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.095Z
Learning: Applies to TestPrograms/docs_examples/**/*.wfl : All code examples in documentation must be validated with MCP tools before adding to docs
📚 Learning: 2025-08-12T09:39:16.504Z
Learnt from: logbie
Repo: WebFirstLanguage/wfl PR: 148
File: .claude/settings.local.json:41-44
Timestamp: 2025-08-12T09:39:16.504Z
Learning: The .claude/settings.local.json file is specifically formatted for Claude AI assistant usage and should not be reformatted to standard bash command syntax. The existing formatting is intentional and optimized for Claude's permission system.
Applied to files:
.claude/settings.json
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: Integration Tests (windows-latest)
- GitHub Check: Build, Test, Clippy
- GitHub Check: Integration Tests (ubuntu-latest)
- GitHub Check: claude-review
✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.
Resolves the starting directory to its absolute, canonical path before searching for the configuration file. This ensures that the directory walk-up correctly handles symbolic links, making the configuration discovery process more robust.
Moves the inline `cargo fmt` logic from settings into dedicated PowerShell and Bash scripts. This improves maintainability and provides a cross-platform solution for automatically formatting Rust code after an edit. Adds comprehensive documentation for the new hook system, including setup, configuration options, and troubleshooting. Additionally, improves configuration loading by canonicalizing paths to prevent issues with relative directories.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 130 out of 146 changed files in this pull request and generated no new comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
Claude finished @logbie's task —— View job PR Review: Refactor - Remove web framework and improve configurationReview Progress
✅ Overall AssessmentThis is an excellent refactoring that significantly improves the project's focus and maintainability. The removal of 19,502 lines while adding valuable new features demonstrates thoughtful architecture decisions. 📋 Detailed Review🎯 Configuration Management - Excellent ImplementationThe new configuration system in Strengths:
Potential Improvements:
📚 Documentation Overhaul - Outstanding WorkThe two-tiered keyword documentation system is brilliant: Strengths:
Minor Suggestions:
🔒 Security ReviewGood practices observed:
No significant security concerns identified. ⚡ Performance & ArchitectureStrengths:
Architecture Benefits:
🧪 Test Coverage AssessmentStrengths:
Recommendations:
🚧 Potential Issues
🏆 RecommendationsHigh Priority:
Medium Priority:
Low Priority:
🎉 ConclusionThis PR represents high-quality engineering work that:
Recommendation: APPROVE with the minor suggestions addressed post-merge. The configuration enhancements alone justify this refactoring, and the documentation improvements are exceptional. The codebase is now more focused, maintainable, and user-friendly. |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Fix all issues with AI agents
In @.claude/hooks/README.md:
- Around line 18-22: Replace the bare URL on the "PowerShell Core (pwsh)"
install line in README.md with a Markdown link or autolink to satisfy MD034;
update the "Install: https://github.com/PowerShell/PowerShell#get-powershell"
line under the "PowerShell Core (pwsh)" heading to use link syntax (e.g.,
[Get-PowerShell](https://github.com/PowerShell/PowerShell#get-powershell)) so
the URL is not bare.
In `@src/config.rs`:
- Around line 677-688: The upward directory walk uses a potentially relative
script_dir so parent() can stop early; replicate load_config()'s behavior by
canonicalizing script_dir before starting the loop in load_config_with_global():
call std::fs::canonicalize on script_dir (or script_dir.to_path_buf()) and use
that canonical path as the initial current_dir (falling back to the original
path if canonicalize fails), then run the existing loop that checks
config_path.exists() and calls parent(); keep the same variables (script_dir,
current_dir, found_local_config) and break semantics.
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (6)
.claude/hooks/README.md.claude/hooks/format-rust.ps1.claude/hooks/format-rust.sh.claude/settings.jsonCLAUDE.mdsrc/config.rs
🚧 Files skipped from review as they are similar to previous changes (1)
- .claude/settings.json
🧰 Additional context used
📓 Path-based instructions (1)
**/*.rs
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.rs: Usesnake_casefor function and file names
UseCamelCasefor types and traits
UseSCREAMING_SNAKE_CASEfor constants
Runcargo fmt --allfor code formatting before commits
Runcargo clippy --all-targets --all-features -- -D warningsto lint code and eliminate all warnings
**/*.rs: Use snake_case for function and file names
Use CamelCase for types and traits
Use SCREAMING_SNAKE_CASE for constants
Run 'cargo fmt --all' to format code according to .rustfmt.toml
Run 'cargo clippy --all-targets --all-features -- -D warnings' to ensure no clippy warnings
Files:
src/config.rs
🧠 Learnings (19)
📓 Common learnings
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.110Z
Learning: Applies to **/*.wfl : WFL files must avoid using reserved keywords (60+ keywords: is, file, add, current, etc.) as identifiers; use underscores instead (e.g., is_active, myfile)
📚 Learning: 2026-01-14T18:06:04.110Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.110Z
Learning: Applies to **/*.rs : Run 'cargo fmt --all' to format code according to .rustfmt.toml
Applied to files:
.claude/hooks/README.mdsrc/config.rs.claude/hooks/format-rust.ps1CLAUDE.md.claude/hooks/format-rust.sh
📚 Learning: 2026-01-14T18:05:40.931Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-14T18:05:40.931Z
Learning: Applies to **/*.rs : Run `cargo fmt --all` for code formatting before commits
Applied to files:
.claude/hooks/README.mdsrc/config.rs.claude/hooks/format-rust.ps1.claude/hooks/format-rust.sh
📚 Learning: 2026-01-14T18:06:04.110Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.110Z
Learning: Applies to **/*.rs : Run 'cargo clippy --all-targets --all-features -- -D warnings' to ensure no clippy warnings
Applied to files:
.claude/hooks/README.mdsrc/config.rsCLAUDE.md
📚 Learning: 2026-01-14T18:06:04.110Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.110Z
Learning: Pre-PR checks must include: 'cargo fmt --all -- --check', 'cargo clippy --all-targets --all-features -- -D warnings', and 'cargo test --all --verbose'
Applied to files:
src/config.rs
📚 Learning: 2026-01-14T18:05:40.931Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-14T18:05:40.931Z
Learning: Applies to **/*.rs : Run `cargo clippy --all-targets --all-features -- -D warnings` to lint code and eliminate all warnings
Applied to files:
src/config.rs
📚 Learning: 2025-08-12T17:35:32.346Z
Learnt from: logbie
Repo: WebFirstLanguage/wfl PR: 150
File: tests/file_io_modes_test.rs:0-0
Timestamp: 2025-08-12T17:35:32.346Z
Learning: In the WFL project tests, file_io_execution_test.rs contains tests that actually execute WFL code through the interpreter and create real files, while file_io_modes_test.rs contains parser-only tests that don't execute code or create files during parsing.
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-14T18:06:04.110Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.110Z
Learning: Applies to Docs/**/*.md : Documentation must follow Docs/wfl-documentation-policy.md and 19 principles in Docs/wfl-foundation.md
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-14T18:06:04.110Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.110Z
Learning: Applies to TestPrograms/docs_examples/**/*.wfl : All code examples in documentation must be validated with MCP tools before adding to docs
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-14T18:06:04.110Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.110Z
Learning: Applies to **/*.wfl : WFL files must avoid using reserved keywords (60+ keywords: is, file, add, current, etc.) as identifiers; use underscores instead (e.g., is_active, myfile)
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-14T18:05:40.931Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-14T18:05:40.931Z
Learning: Keep `Docs/` current with major changes and validate all code examples with MCP before adding
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-14T18:05:40.931Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-14T18:05:40.931Z
Learning: Never break backward compatibility with existing WFL programs; run all `TestPrograms/` to verify
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-14T18:05:40.931Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-14T18:05:40.931Z
Learning: Refer to `.cursor/rules/wfl-rules.mdc` for additional IDE-specific rules and guidelines
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-14T18:05:40.931Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-14T18:05:40.931Z
Learning: Applies to **/*.wfl : Use underscores in WFL variable names to avoid 60+ reserved keywords (e.g., `is_active`, `myfile`, NOT `is` or `file`)
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-14T18:06:04.110Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.110Z
Learning: Never break existing WFL programs; backward compatibility is sacred and requires running all TestPrograms/
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-14T18:06:04.110Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.110Z
Learning: Keep Docs/ current and maintain consistency with major code changes
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-14T18:05:40.931Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-14T18:05:40.931Z
Learning: Applies to Docs/**/*.md : All code examples in documentation must be validated with MCP tools before adding to docs
Applied to files:
CLAUDE.md
📚 Learning: 2025-08-12T09:39:16.504Z
Learnt from: logbie
Repo: WebFirstLanguage/wfl PR: 148
File: .claude/settings.local.json:41-44
Timestamp: 2025-08-12T09:39:16.504Z
Learning: The .claude/settings.local.json file is specifically formatted for Claude AI assistant usage and should not be reformatted to standard bash command syntax. The existing formatting is intentional and optimized for Claude's permission system.
Applied to files:
CLAUDE.md.claude/hooks/format-rust.sh
📚 Learning: 2026-01-14T18:06:04.110Z
Learnt from: CR
Repo: WebFirstLanguage/wfl PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-14T18:06:04.110Z
Learning: Applies to wfl-lsp/**/*.rs : LSP debug mode can be enabled with RUST_LOG=trace environment variable
Applied to files:
CLAUDE.md
🪛 markdownlint-cli2 (0.18.1)
.claude/hooks/README.md
21-21: Bare URL used
(MD034, no-bare-urls)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: Integration Tests (windows-latest)
- GitHub Check: Integration Tests (ubuntu-latest)
- GitHub Check: Build, Test, Clippy
- GitHub Check: claude-review
✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.
| - **Windows PowerShell**: Built into Windows (default configuration) | ||
| - Verify: `powershell --version` | ||
| - **PowerShell Core (pwsh)**: Optional cross-platform alternative (Windows/macOS/Linux) | ||
| - Install: https://github.com/PowerShell/PowerShell#get-powershell | ||
| - Verify: `pwsh --version` |
There was a problem hiding this comment.
Fix MD034: replace bare URL with a link.
markdownlint flags the bare URL. Please wrap it in a Markdown link or autolink.
🔧 Suggested fix
- - Install: https://github.com/PowerShell/PowerShell#get-powershell
+ - Install: <https://github.com/PowerShell/PowerShell#get-powershell>📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - **Windows PowerShell**: Built into Windows (default configuration) | |
| - Verify: `powershell --version` | |
| - **PowerShell Core (pwsh)**: Optional cross-platform alternative (Windows/macOS/Linux) | |
| - Install: https://github.com/PowerShell/PowerShell#get-powershell | |
| - Verify: `pwsh --version` | |
| - **Windows PowerShell**: Built into Windows (default configuration) | |
| - Verify: `powershell --version` | |
| - **PowerShell Core (pwsh)**: Optional cross-platform alternative (Windows/macOS/Linux) | |
| - Install: <https://github.com/PowerShell/PowerShell#get-powershell> | |
| - Verify: `pwsh --version` |
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
21-21: Bare URL used
(MD034, no-bare-urls)
🤖 Prompt for AI Agents
In @.claude/hooks/README.md around lines 18 - 22, Replace the bare URL on the
"PowerShell Core (pwsh)" install line in README.md with a Markdown link or
autolink to satisfy MD034; update the "Install:
https://github.com/PowerShell/PowerShell#get-powershell" line under the
"PowerShell Core (pwsh)" heading to use link syntax (e.g.,
[Get-PowerShell](https://github.com/PowerShell/PowerShell#get-powershell)) so
the URL is not bare.
Resolves the script directory to an absolute path before starting the upward search for a configuration file. This ensures that config files are found reliably, even when the starting path is relative (e.g., ".") or contains symbolic links.
|
Claude finished @logbie's task —— View job PR Review: Refactor - Remove web framework and improve configurationReview Progress
✅ Overall AssessmentThis is an excellent refactoring that significantly improves the project's focus and maintainability. The removal of 19,502 lines while adding valuable new features demonstrates thoughtful architecture decisions. 📋 Detailed Review🎯 Configuration Management - Excellent ImplementationThe new configuration system in Strengths:
Potential Improvements:
📚 Documentation Overhaul - Outstanding WorkThe two-tiered keyword documentation system is brilliant: Strengths:
Minor Suggestions:
🔒 Security ReviewGood practices observed:
No significant security concerns identified. ⚡ Performance & ArchitectureStrengths:
Architecture Benefits:
🧪 Test Coverage AssessmentStrengths:
Recommendations:
🚧 Potential Issues
🏆 RecommendationsHigh Priority:
Medium Priority:
Low Priority:
🎉 ConclusionThis PR represents high-quality engineering work that:
Recommendation: APPROVE with the minor suggestions addressed post-merge. The configuration enhancements alone justify this refactoring, and the documentation improvements are exceptional. The codebase is now more focused, maintainable, and user-friendly. |
|
Claude finished @logbie's task —— View job PR Review: Refactor - Remove web framework and improve configurationReview Progress
✅ Overall AssessmentThis is an excellent refactoring that significantly improves the project's focus and maintainability. The removal of 19,502 lines while adding valuable new features demonstrates thoughtful architecture decisions. 📋 Detailed Review🎯 Configuration Management - Excellent ImplementationThe new configuration system in Strengths:
Potential Improvements:
📚 Documentation Overhaul - Outstanding WorkThe two-tiered keyword documentation system is brilliant: Strengths:
Minor Suggestions:
🔒 Security ReviewGood practices observed:
No significant security concerns identified. ⚡ Performance & ArchitectureStrengths:
Architecture Benefits:
🧪 Test Coverage AssessmentStrengths:
Recommendations:
🚧 Potential Issues
🏆 RecommendationsHigh Priority:
Medium Priority:
Low Priority:
🎉 ConclusionThis PR represents high-quality engineering work that:
Recommendation: APPROVE with the minor suggestions addressed post-merge. The configuration enhancements alone justify this refactoring, and the documentation improvements are exceptional. The codebase is now more focused, maintainable, and user-friendly. |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 130 out of 146 changed files in this pull request and generated 2 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| } | ||
| } | ||
| "--init" => { | ||
| if lint_mode || analyze_mode || fix_mode || config_check_mode || config_fix_mode { |
There was a problem hiding this comment.
The flag conflict check is duplicated logic. Consider extracting to a helper function check_mutually_exclusive_flags that validates all operation modes together, reducing repetition.
| } | ||
| } | ||
|
|
||
| if file_path.is_empty() && !config_check_mode && !config_fix_mode && !init_mode { |
There was a problem hiding this comment.
The condition checking multiple modes is becoming complex. Consider refactoring to use an enum for operation modes (e.g., OperationMode::Init, OperationMode::Lint) to simplify these conditional checks.
Removes the experimental WFL/Weave web framework to streamline the project's focus. This change also introduces significant improvements to configuration management and documentation.
Key changes include:
Configuration Enhancements
--initcommand-line flag that launches an interactive wizard for creating.wflcfgfiles..wflcfgfile. This allows for project-wide settings with local overrides.Documentation Overhaul
Summary by CodeRabbit
New Features
Documentation
Examples & Samples
Chores
✏️ Tip: You can customize this high-level summary in your review settings.