-
Notifications
You must be signed in to change notification settings - Fork 5
[REVIEW] Review System Infrastructure & GitHub Integration #34
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Wrapper function for the access manager to improve usability
Minor deetails.
Attempting to fix up the evaluation to be internally consistent, adding the wrappers for the access manager (and calling it `array` for now). Fix up tests to account for changes to evaluation array sizes on return (mostly squeezes) Fix a couple of other evaluation bugs (like the need to add a zero vector to some nearly-constant matrices). Repairing the quickstart guide here and there.
back propagate changes from JOSS branch into the dev branch
Add JOSS doi etc (Note this will show errors until the paper is formally accepted)
Fix for the first comment by @jcgraciosa. Also needed to update the JIT code to understand the MATRIX variable type and removing the other types that are (currently) not used. These cause compilation errors if they are lit up by mistake (even if that variable is not in any expression). Solvers: Navier Stokes / Advection-Diffusion - fix the projection terms and how they pack up their data.
…orldcode/underworld3 into global_evaluation_rewrite
Adding global evaluation routines to compute values anywhere in the distributed domain (also with extrapolation using rbf)
Fixing broken test (array shape)
Not setting initial rank - this has problems when the particle is located on the correct rank because it automatically, always gets migrated to rank 0 and we start hunting for it again (but always in the wrong place).
Missed one !
Nodal Point Swarm also had the issue of uninitialised rank. This causes particles on rank > 1 to be migrated to rank 0 on the first call to migrate. They then get lost ... Potential fix @jcgraciosa but maybe not the only issue here.
Fixing lack of rank initialisation in swarm.populate. Also: some changes to the derivative expressions code: - .where relevant sym returns the inner expression derived by the diff_variable inner expression in symbolic form (which is closer to the intent of .sym) and does not return the evaluated form. - .doit function returns the evaluated form (so this is like the sympy deferred derivative).
…tions And a couple of other fixes
This code is *probably* no longer needed
And leaving NodalPointPICSwarm alone
This commit fixes a TypeError that occurred when multiplying UWexpression and EnhancedMeshVariable objects (e.g., Ra * T). The issue was in the MathematicalMixin's isinstance checks preventing proper sympification. Changes: - Extract .sym property from MathematicalMixin objects in __mul__ and __rmul__ - This ensures both operands are pure SymPy objects for multiplication - Preserves lazy evaluation (no eager sympification) - Add unit-aware wrapper functions (placeholder for future work) - Fix import path for get_units (moved to units module) The fix follows user guidance to preserve lazy evaluation by extracting .sym rather than forcing sympification. Non-dimensional workflows now work correctly with expressions like Ra * T. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
…bility, and lazy evaluation This commit fixes 5 critical bugs in the units system discovered during notebook usage: 1. **PyVista visualization TypeError**: UnitAwareArray incompatible with PyVista's np.ndim() - Added .magnitude property check to strip units before visualization - Files: visualisation.py 2. **SymPy 1.14+ protocol compatibility**: SympifyError with matrix operations - Changed _sympify_() to _sympy_() protocol method for SymPy 1.14+ strict mode - Files: coordinates.py, expressions.py, quantities.py, mathematical_mixin.py (6 instances) 3. **Derivative indexing DimensionalityError**: dTdy[0,0] raised Pint conversion error - Added special handling for SymPy expressions in UWQuantity.__init__() - Store unit object separately instead of creating value * unit quantity - Files: quantities.py 4. **Derivative units incorrect**: uw.get_units(dTdy[0,0]) returned 'kelvin' not 'K/m' - Added explicit units parameter to with_units() function - Pass derivative units explicitly from UnitAwareDerivativeMatrix.__getitem__() - Files: function/__init__.py, mathematical_mixin.py 5. **Compound expression units incorrect**: (temperature/velocity[0]).units returned wrong units - Made UnitAwareExpression.units property compute lazily from SymPy expression - Uses compute_expression_units() for dimensional analysis instead of stored values - Critical for lazy-evaluated expressions where units must be derived from AST - Files: expression/unit_aware_expression.py (new module) All fixes validated with test cases. Compound expression units now correctly compute 'kelvin * second / meter' for temperature/velocity[0]. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
**Problem**: UWexpression has __getitem__ from MathematicalMixin, making it Iterable. SymPy's array multiplication/assignment rejected it, breaking tensor construction when using parameter descriptors with units. **Solution**: Element-wise tensor construction with loop instead of array multiplication operator. Wraps bare UWexpression results (edge case when identity element is 1/2) in Mul(1, value, evaluate=False) to bypass Iterable check. JIT unwrapper correctly finds UWexpression atoms inside Mul wrappers. **Changes**: - constitutive_models.py (ViscousFlowModel._build_c_tensor): Element-wise construction with wrapping for bare UWexpression edge cases - _api_tools.py (Parameter.__set__): Enhanced reset mechanism calls _reset() for constitutive model parameters **Validation**: - All 20 constitutive tensor regression tests passing - Parameter assignment with units works - Unit metadata preserved (_pint_qty) - Lazy evaluation maintained (symbol in tensor, not numeric value) - JIT unwrapping verified (UWexpression atoms substituted correctly) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
**Problem**: Parameters with units were being substituted with dimensional values (1e21) instead of non-dimensional values (1.0) during JIT unwrapping, causing incorrect scaling in compiled C code. **Root Cause**: The unwrapper substituted atom.sym (dimensional value) without checking if scaling was active or if the parameter had units metadata. **Solution**: 1. Enhanced _substitute_all_once() to check if scaling is active and parameter has units before substitution 2. If yes, compute non-dimensional value via non_dimensionalise() and substitute that instead of raw .sym value 3. Added user-facing show_nondimensional_form() function for inspecting what will be compiled **Changes**: - expressions.py (_substitute_all_once): Check scaling + units, use nondim value - units.py (show_nondimensional_form): New user-facing inspection function - __init__.py: Export show_nondimensional_form for uw.show_nondimensional_form() **Validation**: - Viscosity 1e21 Pa*s with scale 1e21 → unwraps to 1.0 ✓ - Tensor element 2*η → unwraps to 2.0 (not 2e21) ✓ - All 20 constitutive tensor regression tests still passing ✓ - show_nondimensional_form() works correctly ✓ **User Benefit**: Users can now verify non-dimensional forms of complex expressions before JIT compilation using uw.show_nondimensional_form() 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
**Changes**: - constitutive_models.py (DiffusionModel._Parameters): Converted diffusivity to class-level Parameter descriptor with units="m**2/s" - constitutive_models.py (DiffusionModel._build_c_tensor): Migrated to element-wise loop pattern (consistent with ViscousFlowModel) - expressions.py (_substitute_all_once): Fixed UWQuantity handling to use _sympy_() method correctly **Consistency**: Uses same element-wise construction pattern as ViscousFlowModel for code maintainability and predictable behavior with UWexpression objects. **Validation**: - Tensor construction with UWexpression parameters works - Units assignment functional: uw.quantity(1e-6, "m**2/s") - UWexpression preserved in tensor for JIT unwrapping - Parameter descriptor provides lazy evaluation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
…tern
This commit completes parameter migration for 3 of 5 constitutive models:
- ViscousFlowModel (previously completed)
- DiffusionModel (newly migrated)
- DarcyFlowModel (newly migrated)
## Changes
### DiffusionModel (lines 1465-1527)
- Converted `diffusivity` to class-level Parameter descriptor
- Added units specification: "m**2/s"
- Updated tensor construction to element-wise loops for consistency
- Maintains lazy evaluation and unit metadata preservation
### DarcyFlowModel (lines 1661-1780)
- Converted `permeability` to class-level Parameter descriptor
- Added units specification: "m**2" (intrinsic permeability)
- Updated tensor construction to element-wise loops (consistent pattern)
- Removed old instance-level `_permeability` attribute
- Maintains lazy evaluation and unit metadata preservation
## Implementation Pattern
Both models now use consistent element-wise tensor construction:
```python
for i in range(d):
for j in range(d):
val = ... # tensor element
# Wrap bare UWexpression to avoid Iterable check
if hasattr(val, '__getitem__') and not isinstance(val, (sympy.MatrixBase, sympy.NDimArray)):
val = sympy.Mul(sympy.S.One, val, evaluate=False)
result[i, j] = val
```
This pattern:
- Handles UWexpression objects correctly
- Preserves symbolic expressions for JIT unwrapping
- Ensures non-dimensional scaling during compilation
- Consistent across all migrated models
## Testing
Validation includes:
- Units assignment with `uw.quantity()`
- Unit metadata preservation
- Lazy evaluation maintenance
- JIT unwrapping with non-dimensional substitution
- Tensor construction correctness
## Status
**Progress**: 3 of 5 models complete (60%)
**Remaining**:
- GenericFluxModel (needs investigation)
- MultiMaterialConstitutiveModel (complex, special handling required)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
…ally This fix resolves the AttributeError when using show_nondimensional_form() with UWQuantity objects and makes the function work universally. ## Problem User reported that show_nondimensional_form() failed with: AttributeError: 'UWQuantity' object has no attribute '_sympify_' Most expressions failed to work with the function. ## Root Cause The _substitute_all_once() function had two bugs: 1. Typo: checked for '_sympy_' instead of handling UWQuantity properly 2. Returned Python float instead of SymPy expression, causing downstream code expecting .atoms() to fail ## Solution Fixed _substitute_all_once() to properly handle UWQuantity: - When scaling active + quantity has units: non-dimensionalize it - Always return SymPy expression using sympy.sympify() - Ensures downstream code can use .atoms(), .subs(), etc. ## Testing Comprehensive test validates 10 different expression types: ✓ UWQuantity objects directly ✓ UWexpression parameters ✓ Constitutive tensor elements ✓ Expressions with mesh coordinates ✓ Expressions with mesh variables ✓ Complex nested expressions ✓ Different parameter values (viscosity contrasts) ✓ Diffusivity parameters ✓ Plain SymPy expressions (pass-through) ✓ Mixed expressions (parameters + symbols) All tests pass - function is now truly universal. ## Impact Users can now use show_nondimensional_form() on ANY expression type to debug non-dimensionalization, verify scaling, and inspect what numeric values the JIT compiler will see. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Solvers mostly fixed. Some bugs evident in evaluate.
This commit addresses two related bugs in the units/scaling system:
1. CRITICAL: Fix double non-dimensionalization bug in JIT compilation
- Location: src/underworld3/function/expressions.py
- Function: _apply_scaling_to_unwrapped()
- Problem: Variables were being scaled during unwrapping, but PETSc
already stores all variable data in non-dimensional [0-1] form
- Result: Pressure terms had coefficients like 0.000315576 instead of 1.0
- Fix: Disable variable scaling in _apply_scaling_to_unwrapped()
- Only constants (UWQuantity) need ND conversion, not variables
- Validates user's principle: auto-ND and manual-ND must produce
identical expressions for PETSc
2. Fix visualization coordinate units handling
- Location: src/underworld3/visualisation/visualisation.py
- Problem: PyVista was stripping unit information from coordinates,
causing uw.function.evaluate() to think coords were dimensionless
- Fix: Store both ND coordinates for PyVista visualization AND
original coordinate array (with units) for function evaluation
- New attributes: pv_mesh.units and pv_mesh.coord_array
- evaluate() now uses coord_array (preserves dimensional info)
Both fixes maintain the principle that PETSc operates entirely in
non-dimensional space, while the user-facing API handles unit conversions.
Testing: Auto-ND vs manual-ND Stokes stress now produces identical
expressions with correct coefficients.
Remove unreachable code from _apply_scaling_to_unwrapped() function. Update docstring to clearly explain why variable scaling is disabled. The function now simply returns the expression unchanged since: - Variables are already non-dimensional in PETSc - Constants are scaled in _unwrap_for_compilation() before this call Testing: - All Stokes ND tests pass (5/5) - All basic Stokes tests pass (6/6) - Units tests: 48/55 passing (failures appear pre-existing) The cleanup makes the code more maintainable and clearly documents the architectural decision to avoid double non-dimensionalization.
Moved UWQuantity constant handling from _unwrap_for_compilation() into _unwrap_expressions() for better code organization and visibility. Changes: - Added UWQuantity handling to _unwrap_expressions() (lines 123-136) - Removed duplicate UWQuantity code from _unwrap_for_compilation() - All unwrapping logic now in one place for easier maintenance - No behavioral changes - all tests pass Benefits: - Single responsibility: _unwrap_expressions() handles ALL expression types - Clearer code flow: no special cases scattered across functions - Prepares for eventual unification with evaluate path Validation: - All 5 Stokes ND tests pass (test_0818_stokes_nd.py) - Constants correctly non-dimensionalized when scaling active - Variables unchanged (already ND in PETSc) Related docs: - UNWRAPPING_COMPARISON_REPORT.md: Detailed pathway comparison - UNWRAPPING_UNIFICATION_PROPOSAL.md: Path forward for full unification
Added TODO.md tracking planned work including: - Unwrapping logic unification (high priority) - Regression test fixes (3/49 failing) - Complex solver validation - Legacy access pattern removal - Example notebook validation Documents completed work: - Variable scaling bug fix (2025-11-14) - UWQuantity unwrapping refactoring (2025-11-14) - Data access migration (2025-10-10) - Units system (2025-10-08) - DM state corruption fix (2025-10-14) - Coordinate units system (2025-10-15)
Updated uw.function.evaluate() to use the new unwrap_for_evaluate() pathway instead of generic unwrap(). Changes: - functions_unit_system.py: Use unwrap_for_evaluate() for proper constant non-dimensionalization and dimensionality tracking - _function.pyx: Supporting changes for evaluate pathway Benefits: - Cleaner separation: evaluate() uses evaluate-specific unwrapper - Better constant handling: UWQuantity constants properly non-dimensionalized - Dimensionality tracking: Returned from unwrapper instead of manually computed - Simplified logic: Reduced from ~150 lines to ~80 lines This is part of the unwrapping pathway clarification work, preparing for eventual full unification of JIT and evaluate unwrapping logic. Related: - unwrap_for_evaluate() introduced in expressions.py - JIT path uses _unwrap_for_compilation() - See UNWRAPPING_UNIFICATION_PROPOSAL.md for next steps
Reorganized code structure to consolidate enhanced variable implementations. Changes: - enhanced_variables.py: Now contains full EnhancedMeshVariable implementation (moved from persistence.py, +626 lines) - persistence.py: Simplified to focus on persistence features only (removed EnhancedMeshVariable class, -1043 lines) - __init__.py: Updated import path Benefits: - Better organization: Enhanced variables in one module - Clearer purpose: persistence.py focuses on persistence, not variable wrapping - Easier maintenance: All enhanced variable code in one place - No functional changes: Just code movement This consolidation makes the codebase structure clearer and prepares for potential future enhancements to the enhanced variable system.
Fixed unit cancellation bug where different input units (km/yr vs cm/yr) produced same dimensionless value. Changes: - units.py: Convert to base SI units before dividing by scale - Added .to_base_units() conversion - Added validation that units actually cancelled - Prevents subtle bugs from unit mismatches - unit_aware_array.py: Improved units handling - Better fallback for Pint Unit objects - More robust units extraction - __init__.py: Minor cleanup - Removed unused show_nondimensional_form import - Updated comments for enhanced variables Critical bug fix: Without SI conversion, uw.quantity(1, 'km/yr') and uw.quantity(1, 'cm/yr') both non-dimensionalized to the same value, causing incorrect physics. Example (with fix): - Input: 5 cm/year - Scale: 0.05 m/year (from 5 cm/year reference) - Old: 5 cm/year / 0.05 m/year → wrong (units don't cancel) - New: 0.05 m/year / 0.05 m/year → 1.0 (correct!) This ensures dimensional consistency in all solver operations.
Enhanced the .array property to properly handle units when setting/getting data.
Changes:
- pack_raw_data_to_petsc(): Added unit conversion and non-dimensionalization
- Handles UWQuantity and UnitAwareArray inputs
- Converts to variable's units before storing
- Non-dimensionalizes if scaling is active
- Critical entry point for dimensional data → PETSc storage
- ArrayProperty getter: Improved dimensionalization logic
- Properly handles ND → dimensional conversion when scaling active
- Uses uw.dimensionalise() with target dimensionality
- Returns UnitAwareArray when variable has units
- Returns plain arrays when no units
- ArrayProperty setter: Better unit handling
- Processes incoming UWQuantity/UnitAwareArray values
- Converts units to match variable's units
- Non-dimensionalizes before storing in PETSc
Benefits:
- var.array = uw.quantity(300, 'K') now works correctly
- Automatic unit conversion: var.array = uw.quantity(25, 'degC') works
- Proper ND scaling: values stored in PETSc are always ND when scaling active
- Getting var.array returns dimensional values with correct units
Example workflow:
T = uw.discretisation.MeshVariable('T', mesh, 1, units='K')
T.array[...] = uw.quantity(300, 'K') # Stored as ND in PETSc
values = T.array # Returns UnitAwareArray in K (dimensional)
This completes the units-aware array interface implementation.
Added ARCHITECTURE_ANALYSIS.md documenting the evaluation system architecture and units handling workflow. Content: - Overview of uw.function.evaluate() pathway - Coordinate transformation details (dimensional → ND) - Units handling workflow (wrapping/unwrapping) - Integration points with non-dimensional scaling - Technical notes on KDTree evaluation This document provides context for the evaluate pathway refactoring and serves as reference for future maintenance.
Systematic cleanup of root directory markdown files following CLEANUP_PLAN.md. Changes: - Removed duplicate LICENCE.md (kept LICENSE.md) - Moved 11 planning/design documents to planning/ - Consolidated TODO items from scattered files into TODO.md - Deleted 62 outdated files: - 3 session summaries (git history preserves them) - 13 progress/status reports (completed work logs) - 8 bug fix reports (fixes documented in commits) - 4 specific issue reports (issues resolved) - 15 analysis/investigation reports (insights captured) - 6 reference/guide documents (info in official docs) - 2 TODO files (consolidated into main TODO.md) - 11 other outdated documents Results: - Root .md files: 73 → 10 (essential docs only) - Planning directory: Organized with 12 design/plan documents - TODO.md: Updated with Notebook 13 simplification task Updated .gitignore to prevent future clutter: - Ignores *_ANALYSIS.md, *_REPORT.md, *_SUMMARY.md patterns - Ignores SESSION_SUMMARY*.md, PHASE_*.md patterns - Explicitly allows essential docs (README, TODO, etc.) Essential docs remaining in root: - README.md, LICENSE.md, CONTRIBUTING.md, CHANGES.md - CLAUDE.md, TODO.md, SPELLING_CONVENTION.md - ARCHITECTURE_ANALYSIS.md (recent, 2025-11-14) - UNWRAPPING_COMPARISON_REPORT.md (recent, 2025-11-14) - UNWRAPPING_UNIFICATION_PROPOSAL.md (recent, 2025-11-14) Code review documents created: - docs/reviews/2025-11/UNWRAPPING-REFACTORING-REVIEW.md - docs/reviews/2025-11/UNITS-SYSTEM-FIXES-REVIEW.md All historical information preserved in git history.
Deleted 79 temporary Python scripts from root directory: - 69 test_*.py files (untracked, debug scripts from units development) - 10 tracked demo/debug files: - debug_parameter_substitution.py - demo_jit_debugging.py - demo_nondimensional_viewer.py - demo_practical_use.py - demo_rounding_limitations.py - demo_simple_nondim.py - demo_unit_conversion.py - demo_universal_nondim.py - mesh_units_examples.py - mesh_units_simple.py Kept: - setup.py (required for building Cython extensions) Rationale: All deleted scripts were temporary investigation/demonstration code created during units system development. Functionality is covered by the official test suite in tests/. Note: The .gitignore already had /test_*.py pattern, so 69 test files were untracked. This commit removes the 9 tracked demo/debug scripts.
- Issue template: .github/ISSUE_TEMPLATE/architectural-review.yml - PR template: .github/PULL_REQUEST_TEMPLATE/architectural-review.md - Validation workflow: .github/workflows/architectural-review-validation.yml - Integration guide: docs/developer/GITHUB-REVIEW-INTEGRATION.md - Quick start guide: docs/developer/REVIEW-WORKFLOW-QUICK-START.md Enables structured submission, tracking, and approval of formal architectural reviews through GitHub Issues, PRs, and Projects. See: docs/developer/GITHUB-REVIEW-INTEGRATION.md for full details.
This is review #10 - a formal review of the review system itself! - Comprehensive documentation of review process - GitHub integration details (templates, labels, workflows) - Benefits, limitations, alternatives considered - Will serve as pilot review to test the new system This review will be the first submitted through the new GitHub review workflow, validating the process by using it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR implements a comprehensive formal architectural review system for Underworld3, integrating with GitHub for tracking, collaboration, and permanent archival of design decisions and architectural changes.
Meta Note: This is a self-referential review - the PR reviews the review system itself and serves as the pilot implementation to validate the process.
Key Changes
- GitHub Integration: Issue templates, PR templates, validation workflows, and 12 labels for review tracking
- Documentation: ~47KB of process documentation including comprehensive guides, quick-start references, and workflow templates
- Developer Resources: New style guides and architectural documentation in Quarto markdown format
Reviewed Changes
Copilot reviewed 63 out of 724 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
.github/ISSUE_TEMPLATE/architectural-review.yml |
Issue template for review submission |
.github/PULL_REQUEST_TEMPLATE/architectural-review.md |
PR template for detailed review feedback |
.github/workflows/architectural-review-validation.yml |
Automated validation workflow |
docs/developer/GITHUB-REVIEW-INTEGRATION.md |
Comprehensive GitHub integration guide (15KB) |
docs/developer/REVIEW-WORKFLOW-QUICK-START.md |
Quick reference for authors and reviewers (12KB) |
docs/developer/CODE-REVIEW-PROCESS.md |
Formal review process definition (20KB) |
docs/developer/UW3_Style_and_Patterns_Guide.qmd |
Coding standards and patterns (17KB) |
docs/developer/UW3_Developers_NDArrays.qmd |
NDArray system documentation (20KB) |
docs/developer/UW3_Developers_MathematicalObjects.qmd |
Mathematical objects design philosophy (22KB) |
docs/developer/UW3_Developers_README.md |
Updated developer guide with navigation table |
| Multiple tutorial notebooks | Updated tutorials with new patterns |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| title: "trouuleshooting" | ||
| --- | ||
|
|
||
| # trouuleshooting |
Copilot
AI
Nov 18, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Corrected spelling of 'troubleshooting' in title.
| title: "trouuleshooting" | |
| --- | |
| # trouuleshooting | |
| title: "troubleshooting" | |
| --- | |
| # troubleshooting |
| title: "trouuleshooting" | ||
| --- | ||
|
|
||
| # trouuleshooting |
Copilot
AI
Nov 18, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Corrected spelling of 'troubleshooting' in heading.
| title: "trouuleshooting" | |
| --- | |
| # trouuleshooting | |
| title: "troubleshooting" | |
| --- | |
| # troubleshooting |
| ## Testing | ||
|
|
||
| The 'test.sh' script can be used to execute the pytest framework. | ||
| The 'scripts/test.sh' script can be used to execute the pytest framework. |
Copilot
AI
Nov 18, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove extra space between 'script' and 'can'.
| The 'scripts/test.sh' script can be used to execute the pytest framework. | |
| The 'scripts/test.sh' script can be used to execute the pytest framework. |
|
Nice try, reviewer-bot-thing, but this workflow will not really work. We need to clearly identify a subset of the changed files and we need to create a PR that is specific to those files. I would suggest that you need to do something like this: touch all the files specific to this Review Item (e.g. add an "Reviewed for Feature X" comment) and then make this a PR into the branch that originates the changes from a new (temporary) branch. That could be development but it might not be. We might retain those review comments at the end of the file for our records - either way this would be a formal review of just the relevant features. |
Review Document
Path:
docs/reviews/2025-11/REVIEW-SYSTEM-INFRASTRUCTURE-REVIEW.mdRelated Issue: Closes #33
Executive Summary
Implementation of comprehensive formal architectural review system for Underworld3, integrating with GitHub for tracking, collaboration, and permanent archival.
Meta-Review: This review documents the review system itself and serves as the pilot review to validate the process.
Files in This Review
View in "Files changed" tab above ↑
Documentation:
.github/ISSUE_TEMPLATE/architectural-review.yml- Issue template.github/PULL_REQUEST_TEMPLATE/architectural-review.md- PR template.github/workflows/architectural-review-validation.yml- Validation workflowdocs/developer/GITHUB-REVIEW-INTEGRATION.md(15KB) - Integration guidedocs/developer/REVIEW-WORKFLOW-QUICK-START.md(12KB) - Quick referencedocs/reviews/2025-11/REVIEW-SYSTEM-INFRASTRUCTURE-REVIEW.md(20KB) - This reviewGitHub Setup:
Scope
Systems Affected:
Key Metrics
Testing Instructions
1. Review the process documentation:
GITHUB-REVIEW-INTEGRATION.md(comprehensive)REVIEW-WORKFLOW-QUICK-START.md(practical)CODE-REVIEW-PROCESS.md(formal process)2. Examine the templates:
3. Validate completeness:
4. Assess overhead:
Changes Requested (from Issue #33)
@lmoresi identified two critical gaps:
Status: Addressing these now by:
Review Checklist
Design & Architecture:
Implementation:
Documentation:
Sign-Off
Next Steps
Meta Note: This PR reviews itself being reviewed through the process it describes 🔄