Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
553 commits
Select commit Hold shift + click to select a range
a92603d
Merge pull request #2000 from openo-beta/claude/issue-1431-20260124-2357
yingbull Jan 25, 2026
e13ef04
Merge pull request #1997 from openo-beta/claude/issue-1423-20260124-2356
yingbull Jan 25, 2026
5780154
Merge pull request #1995 from openo-beta/claude/issue-1424-20260124-2356
yingbull Jan 25, 2026
c3c104c
Merge pull request #1952 from openo-beta/claude/issue-1517-20260124-0823
yingbull Jan 25, 2026
aaf6314
Merge pull request #2054 from openo-beta/claude/issue-1483-20260125-0056
yingbull Jan 25, 2026
9be31ff
fix: correct invalid HTML in ObstetricalHistoryImpl JavaDoc
github-actions[bot] Jan 25, 2026
6b75dee
Merge pull request #2046 from openo-beta/claude/issue-1476-20260125-0049
yingbull Jan 25, 2026
b3e62c7
docs: Fix SHA-1 documentation accuracy in SiteUser class
github-actions[bot] Jan 25, 2026
bc42b3c
docs: fix JavaDoc for getPasswordAsBase64() to accurately document Nu…
github-actions[bot] Jan 25, 2026
d3f316d
Merge pull request #2055 from openo-beta/claude/issue-1485-20260125-0057
yingbull Jan 25, 2026
6d0f20f
Merge pull request #2048 from openo-beta/claude/issue-1479-20260125-0050
yingbull Jan 25, 2026
2a72b86
Merge pull request #2047 from openo-beta/claude/issue-1475-20260125-0048
yingbull Jan 25, 2026
9bc6b35
Merge pull request #2043 from openo-beta/claude/issue-1473-20260125-0047
yingbull Jan 25, 2026
e91d039
Merge pull request #2042 from openo-beta/claude/issue-1471-20260125-0045
yingbull Jan 25, 2026
8fcad1e
Merge pull request #2040 from openo-beta/claude/issue-1469-20260125-0044
yingbull Jan 25, 2026
f97f044
Merge pull request #2039 from openo-beta/claude/issue-1467-20260125-0042
yingbull Jan 25, 2026
2502318
Merge pull request #2034 from openo-beta/claude/issue-1463-20260125-0036
yingbull Jan 25, 2026
16e0b5a
Merge pull request #2037 from openo-beta/claude/issue-1466-20260125-0040
yingbull Jan 25, 2026
d6d9fef
Merge pull request #2031 from openo-beta/claude/issue-1461-20260125-0034
yingbull Jan 25, 2026
5f3a089
Merge pull request #2029 from openo-beta/claude/issue-1458-20260125-0029
yingbull Jan 25, 2026
0de0a19
Merge pull request #2024 from openo-beta/claude/issue-1454-20260125-0026
yingbull Jan 25, 2026
c2f6ed3
Merge pull request #2012 from openo-beta/claude/issue-1440-20260124-2357
yingbull Jan 25, 2026
3fbec72
Merge pull request #2011 from openo-beta/claude/issue-1442-20260125-0003
yingbull Jan 25, 2026
aef55c4
Merge pull request #2004 from openo-beta/claude/issue-1434-20260124-2357
yingbull Jan 25, 2026
982b809
Merge pull request #2041 from openo-beta/claude/issue-1470-20260125-0045
yingbull Jan 25, 2026
90dc94a
Merge pull request #2038 from openo-beta/claude/issue-1468-20260125-0042
yingbull Jan 25, 2026
00a29ff
Merge pull request #2019 from openo-beta/claude/issue-1449-20260125-0011
yingbull Jan 25, 2026
82048f6
Merge pull request #1998 from openo-beta/claude/issue-1432-20260124-2357
yingbull Jan 25, 2026
2550f76
Merge pull request #1994 from openo-beta/claude/issue-1427-20260124-2356
yingbull Jan 25, 2026
8207d62
Merge pull request #2001 from openo-beta/claude/issue-1425-20260124-2356
yingbull Jan 25, 2026
0a4016f
Merge pull request #1999 from openo-beta/claude/issue-1438-20260124-2357
yingbull Jan 25, 2026
3d59515
Merge pull request #1951 from openo-beta/claude/issue-1516-20260124-0818
yingbull Jan 25, 2026
8ed742c
Merge pull request #2050 from openo-beta/claude/issue-1481-20260125-0052
yingbull Jan 25, 2026
14c111c
Merge pull request #2045 from openo-beta/claude/issue-1474-20260125-0047
yingbull Jan 25, 2026
14ab041
Merge pull request #2049 from openo-beta/claude/issue-1477-20260125-0049
yingbull Jan 25, 2026
cb01483
Merge pull request #2026 from openo-beta/claude/issue-1453-20260125-0024
yingbull Jan 25, 2026
ce0b138
Merge pull request #2056 from openo-beta/claude/issue-1486-20260125-0058
yingbull Jan 25, 2026
32cbc3c
Merge pull request #2044 from openo-beta/claude/issue-1472-20260125-0046
yingbull Jan 25, 2026
5fa2092
Merge pull request #2008 from openo-beta/claude/issue-1439-20260124-2357
yingbull Jan 25, 2026
217bcca
Merge pull request #2003 from openo-beta/claude/issue-1428-20260124-2356
yingbull Jan 25, 2026
7aae124
Merge pull request #1975 from openo-beta/claude/issue-1547-20260124-1018
yingbull Jan 25, 2026
212d360
Merge pull request #1972 from openo-beta/claude/issue-1544-20260124-1003
yingbull Jan 25, 2026
91b4d5d
Merge pull request #2014 from openo-beta/claude/issue-1443-20260125-0006
yingbull Jan 25, 2026
7aa5940
Merge pull request #1996 from openo-beta/claude/issue-1426-20260124-2356
yingbull Jan 25, 2026
202068d
Merge pull request #2030 from openo-beta/claude/issue-1459-20260125-0032
yingbull Jan 25, 2026
3f09d72
Merge pull request #2051 from openo-beta/claude/issue-1480-20260125-0052
yingbull Jan 25, 2026
1a7202b
Merge pull request #1948 from openo-beta/claude/issue-1512-20260124-0758
yingbull Jan 25, 2026
5e1132a
Merge pull request #2023 from openo-beta/claude/issue-1452-20260125-0021
yingbull Jan 25, 2026
d7c9f69
Merge pull request #2020 from openo-beta/claude/issue-1444-20260125-0007
yingbull Jan 25, 2026
18aeda8
Merge pull request #2015 from openo-beta/claude/issue-1446-20260125-0009
yingbull Jan 25, 2026
1a99816
Merge pull request #2032 from openo-beta/claude/issue-1460-20260125-0034
yingbull Jan 25, 2026
5bc04a6
Merge pull request #2025 from openo-beta/claude/issue-1455-20260125-0026
yingbull Jan 25, 2026
15f8f10
Merge pull request #1962 from openo-beta/claude/issue-1527-20260124-0913
yingbull Jan 25, 2026
1e0ce9c
Merge pull request #2036 from openo-beta/claude/issue-1465-20260125-0038
yingbull Jan 25, 2026
ea454c6
Merge pull request #2033 from openo-beta/claude/issue-1462-20260125-0035
yingbull Jan 25, 2026
d3735c6
Merge pull request #2028 from openo-beta/claude/issue-1457-20260125-0028
yingbull Jan 25, 2026
cb4df11
Merge pull request #2027 from openo-beta/claude/issue-1456-20260125-0026
yingbull Jan 25, 2026
6ee1e5c
Merge pull request #2022 from openo-beta/claude/issue-1451-20260125-0017
yingbull Jan 25, 2026
7b3cf69
Merge pull request #2017 from openo-beta/claude/issue-1448-20260125-0010
yingbull Jan 25, 2026
e0a7871
Merge pull request #2021 from openo-beta/claude/issue-1450-20260125-0016
yingbull Jan 25, 2026
27bb8fa
Merge pull request #2016 from openo-beta/claude/issue-1447-20260125-0009
yingbull Jan 25, 2026
9cd898f
Merge pull request #2035 from openo-beta/claude/issue-1464-20260125-0036
yingbull Jan 25, 2026
e6c6bac
Merge pull request #2018 from openo-beta/claude/issue-1445-20260125-0008
yingbull Jan 25, 2026
9c5a354
Merge pull request #2052 from openo-beta/claude/issue-1484-20260125-0056
yingbull Jan 25, 2026
7ae1f05
Merge pull request #2013 from openo-beta/claude/issue-1441-20260125-0002
yingbull Jan 25, 2026
5ab5b7b
Merge pull request #1992 from openo-beta/claude/issue-1421-20260124-2356
yingbull Jan 25, 2026
2389b5a
Merge pull request #2005 from openo-beta/claude/issue-1436-20260124-2357
yingbull Jan 25, 2026
0959ed3
fix: correct HTML formatting in HCValidationService JavaDoc
github-actions[bot] Jan 25, 2026
5d2d849
Merge pull request #1957 from openo-beta/claude/issue-1522-20260124-0848
yingbull Jan 25, 2026
5070baf
Merge pull request #2092 from openo-beta/claude/issue-1536-20260124-0354
yingbull Jan 26, 2026
a2934e5
Update src/main/java/ca/openosp/openo/caisi_integrator/dao/AbstractMo…
yingbull Jan 26, 2026
b24cde6
Merge pull request #2078 from openo-beta/claude/issue-1565-20260124-0349
yingbull Jan 26, 2026
3fe5269
Merge pull request #2072 from openo-beta/claude/issue-1573-20260124-0335
yingbull Jan 26, 2026
3f4125a
Merge pull request #2087 from openo-beta/claude/issue-1548-20260124-0353
yingbull Jan 26, 2026
7caad10
Merge pull request #2079 from openo-beta/claude/issue-1564-20260124-0350
yingbull Jan 26, 2026
b1d4294
Merge pull request #2006 from openo-beta/claude/issue-1435-20260124-2357
yingbull Jan 26, 2026
e30d790
Merge pull request #1906 from openo-beta/claude/issue-1589-20260124-0250
yingbull Jan 26, 2026
30ac993
Merge pull request #2088 from openo-beta/claude/issue-1543-20260124-0353
yingbull Jan 26, 2026
bd08272
Merge pull request #2080 from openo-beta/claude/issue-1562-20260124-0337
yingbull Jan 26, 2026
155c190
Merge pull request #2076 from openo-beta/claude/issue-1567-20260124-0337
yingbull Jan 26, 2026
bc15c4d
Merge pull request #2071 from openo-beta/claude/issue-1576-20260124-0338
yingbull Jan 26, 2026
a8cf61b
Merge pull request #2075 from openo-beta/claude/issue-1569-20260124-0336
yingbull Jan 26, 2026
4ff32a5
Merge pull request #2070 from openo-beta/claude/issue-1577-20260124-0446
yingbull Jan 26, 2026
0bf2926
Merge pull request #2091 from openo-beta/claude/issue-1537-20260124-0354
yingbull Jan 26, 2026
58539b9
Merge pull request #2068 from openo-beta/claude/issue-1588-20260124-0259
yingbull Jan 26, 2026
42e4b15
Merge pull request #2073 from openo-beta/claude/issue-1571-20260124-0336
yingbull Jan 26, 2026
f5412fe
Merge pull request #1956 from openo-beta/claude/issue-1521-20260124-0843
yingbull Jan 26, 2026
91d9b6e
Update src/main/java/ca/openosp/openo/ar2005/impl/NewbornCareImpl.java
yingbull Jan 26, 2026
92e5345
Merge pull request #1919 from openo-beta/claude/issue-1542-20260124-0353
yingbull Jan 26, 2026
ad79347
Merge pull request #1609 from openo-beta/copilot/document-email-log-c…
yingbull Jan 26, 2026
51517c1
Merge pull request #2086 from openo-beta/claude/issue-1551-20260124-0352
yingbull Jan 26, 2026
efec2e7
Merge pull request #2083 from openo-beta/claude/issue-1554-20260124-0352
yingbull Jan 26, 2026
6ebcee2
Merge pull request #1908 from openo-beta/claude/issue-1582-20260124-0300
yingbull Jan 26, 2026
2399128
Merge pull request #1993 from openo-beta/claude/issue-1422-20260124-2356
yingbull Jan 26, 2026
08b66c9
Merge pull request #2074 from openo-beta/claude/issue-1570-20260124-0336
yingbull Jan 26, 2026
b73fd06
Merge pull request #1915 from openo-beta/claude/issue-1534-20260124-0354
yingbull Jan 26, 2026
8c4d153
Merge pull request #2081 from openo-beta/claude/issue-1561-20260124-0350
yingbull Jan 26, 2026
0be6694
Merge pull request #2082 from openo-beta/claude/issue-1555-20260124-0352
yingbull Jan 26, 2026
766fe49
docs: Fix JavaDoc issues in EmailNoteUtil
github-actions[bot] Jan 26, 2026
5746a3b
Merge pull request #1917 from openo-beta/claude/issue-1550-20260124-0353
yingbull Jan 26, 2026
5e3f0c6
docs: correct @since date in S21.java to actual file creation date
github-actions[bot] Jan 26, 2026
dc55029
Merge pull request #2085 from openo-beta/claude/issue-1552-20260124-0352
yingbull Jan 26, 2026
e0c6674
Merge pull request #2069 from openo-beta/claude/issue-1585-20260124-0259
yingbull Jan 26, 2026
56dcf00
Merge pull request #1907 from openo-beta/claude/issue-1583-20260124-0259
yingbull Jan 26, 2026
1dbbbe7
Merge pull request #2090 from openo-beta/claude/issue-1538-20260124-0354
yingbull Jan 26, 2026
5427e68
Merge pull request #2089 from openo-beta/claude/issue-1539-20260124-0354
yingbull Jan 26, 2026
d5e4940
Merge pull request #2084 from openo-beta/claude/issue-1553-20260124-0352
yingbull Jan 26, 2026
afe7954
Merge pull request #1910 from openo-beta/claude/issue-1586-20260124-0259
yingbull Jan 26, 2026
7329af7
Merge pull request #2077 from openo-beta/claude/issue-1566-20260124-0349
yingbull Jan 26, 2026
e47b492
Merge pull request #2111 from openo-beta/claude/issue-1493-20260124-0505
yingbull Jan 26, 2026
7ce2a8e
Merge pull request #1909 from openo-beta/claude/issue-1584-20260124-0259
yingbull Jan 26, 2026
901fbe2
fix: apply review feedback for demographic manager tests
github-actions[bot] Jan 26, 2026
9ba4077
Merge pull request #2097 from openo-beta/copilot/upgrade-hapi-fhir-ve…
yingbull Jan 27, 2026
dcb2e3f
chore: upgrade Flying Saucer PDF from 9.4.1 to 9.13.3
github-actions[bot] Jan 27, 2026
cb54551
chore: upgrade Jackson modules to 2.19.2
github-actions[bot] Jan 27, 2026
42e0091
chore: Remove dead Quartz dependency
github-actions[bot] Jan 27, 2026
784b8ea
chore: upgrade JasperReports 6.20.1 → 6.21.7 (pre-Jakarta)
github-actions[bot] Jan 27, 2026
05af066
chore: Upgrade Apache POI from 5.0.0 to 5.5.1
github-actions[bot] Jan 27, 2026
0fdf2ca
chore: Upgrade Jersey Client 2.46 → 2.47 (pre-Jakarta)
github-actions[bot] Jan 27, 2026
bb97222
chore: Remove unused javax.xml:jaxm-api dependency (jakarta-prep)
github-actions[bot] Jan 27, 2026
06e8195
chore: Upgrade Apache OpenJPA from 3.0.0 to 3.2.2
github-actions[bot] Jan 27, 2026
cfc4132
Merge pull request #2117 from openo-beta/claude/issue-1154-20260127-0053
yingbull Jan 27, 2026
14b22c8
Merge pull request #2116 from openo-beta/claude/issue-1159-20260127-0052
yingbull Jan 27, 2026
a3c5a1d
Update pom.xml
yingbull Jan 27, 2026
c1bba26
Merge pull request #2114 from openo-beta/claude/issue-1156-20260127-0038
yingbull Jan 27, 2026
5a7c70a
Merge pull request #2113 from openo-beta/claude/issue-588-20260127-0017
yingbull Jan 27, 2026
d886d18
Merge pull request #2123 from openo-beta/claude/issue-1161-20260127-0125
yingbull Jan 27, 2026
ce0c78e
Merge pull request #2124 from openo-beta/claude/issue-1165-20260127-0138
yingbull Jan 27, 2026
0959d66
chore: re-apply JasperReports 6.20.1 → 6.21.7 upgrade
github-actions[bot] Jan 27, 2026
45eaa54
chore: add jackson-module-jaxb-annotations 2.19.2
github-actions[bot] Jan 27, 2026
c83dc98
Merge pull request #2115 from openo-beta/claude/issue-1151-20260127-0044
yingbull Jan 27, 2026
a991ff7
Merge pull request #2120 from openo-beta/claude/issue-589-20260127-0023
yingbull Jan 27, 2026
0fdcfea
chore: Upgrade Apache CXF from 3.5.11 to 3.6.9
github-actions[bot] Jan 27, 2026
450c13c
docs: Update Apache CXF version to 3.6.9 in CLAUDE.md
github-actions[bot] Jan 27, 2026
c6fe12c
Merge pull request #2134 from openo-beta/claude/issue-1149-20260127-0510
yingbull Jan 27, 2026
5107251
chore: cleanup after library updates, resolve javadoc errors
yingbull Jan 27, 2026
849e024
chore: final cleanup of deps
yingbull Jan 27, 2026
919d21e
chore: remove jetty related deps as not required as openo uses tomcat
yingbull Jan 27, 2026
e161f41
Merge pull request #2141 from openo-beta/feature/library-cleanup
yingbull Jan 27, 2026
43966d7
chore: auto set type project and status for new issue tickets
yingbull Jan 27, 2026
f8ceed3
chore: Upgrade commons-dbcp 1.4 → commons-dbcp2 2.14.0
github-actions[bot] Jan 27, 2026
d2e23c0
chore(deps): update 5 dependencies to latest patch versions
github-actions[bot] Jan 27, 2026
1017796
Update .github/workflows/issue-triage.yml
yingbull Jan 27, 2026
c3f0e43
Update .github/workflows/issue-triage.yml
yingbull Jan 27, 2026
f7841e1
Merge pull request #2058 from openo-beta/chore/demographic-manager-tests
yingbull Jan 27, 2026
29061dc
fix: Complete commons-dbcp2 migration - rename maxWait to maxWaitMillis
github-actions[bot] Jan 27, 2026
af28dd3
refactor: Replace deprecated removeAbandoned with removeAbandonedOnBo…
github-actions[bot] Jan 27, 2026
e26b4ef
Merge pull request #2096 from openo-beta/copilot/replace-taglibs-stan…
yingbull Jan 27, 2026
ca9986e
Initial plan
Copilot Jan 27, 2026
e7d7611
fix: add duplicate detection and conditional field updates to issue t…
github-actions[bot] Jan 27, 2026
0b90e0a
Merge pull request #2172 from openo-beta/claude/issue-1157-20260127-1720
yingbull Jan 27, 2026
604d718
Merge pull request #2179 from openo-beta/copilot/sub-pr-2143
yingbull Jan 27, 2026
6484e7d
Merge pull request #2178 from openo-beta/claude/issue-2135-20260127-1733
yingbull Jan 27, 2026
e8b6ce6
chore: migrate JSch to maintained fork (mwiede)
github-actions[bot] Jan 27, 2026
315b32b
chore: remove unused patientSiteVisit SNAPSHOT dependency
github-actions[bot] Jan 27, 2026
e51ec56
chore: update commons-exec from 1.3 to 1.4.0
github-actions[bot] Jan 27, 2026
987f292
chore: migrate commonmark from Atlassian to org.commonmark 0.23.0
github-actions[bot] Jan 27, 2026
78a0bde
chore: migrate zxing 1.5 to com.google.zxing 3.5.3
github-actions[bot] Jan 27, 2026
bc6fa91
chore: upgrade commons-digester 1.8 to commons-digester3 3.3
github-actions[bot] Jan 27, 2026
903fdfd
chore: remove unused tagsoup and jersey-client dependencies
yingbull Jan 27, 2026
fe21e2d
Merge pull request #2185 from openo-beta/claude/issue-2159-20260127-2202
yingbull Jan 27, 2026
644fc2c
Merge pull request #2190 from openo-beta/claude/issue-2157-20260127-2247
yingbull Jan 27, 2026
4d6c489
Merge pull request #2189 from openo-beta/claude/issue-2156-20260127-2242
yingbull Jan 27, 2026
c34af05
Merge pull request #2193 from openo-beta/chore/remove-unused-tagsoup-…
yingbull Jan 27, 2026
af0464e
Merge pull request #2191 from openo-beta/claude/issue-2149-20260127-2252
yingbull Jan 27, 2026
3cf4757
Merge pull request #2186 from openo-beta/claude/issue-2168-20260127-2225
yingbull Jan 27, 2026
b7cc7ab
Merge pull request #2143 from openo-beta/chore/issue-template
yingbull Jan 28, 2026
fe3bdc0
fix: use commons-digester3 3.2 with beanutils exclusion
github-actions[bot] Jan 28, 2026
aeac663
fix: migrate ManageDocument2Action from jpedal to Apache PDFBox
github-actions[bot] Jan 28, 2026
eae489f
fix: replace jasypt 1.9.3 with Spring Security Crypto
github-actions[bot] Jan 28, 2026
36e95cd
fix: migrate NioFileManagerImpl from jpedal to Apache PDFBox
github-actions[bot] Jan 28, 2026
7f65011
chore: remove dead ClinicalConnect/MedSeek integration
github-actions[bot] Jan 28, 2026
0507719
update: Coordinate JAXB dependencies to 2.3.9 for Java 21 compatibility
github-actions[bot] Jan 28, 2026
2476569
fix: add page number validation and correct default page numbers
github-actions[bot] Jan 28, 2026
41ea22a
fix: use commons-digester3 3.2 with beanutils exclusion
github-actions[bot] Jan 28, 2026
c30a793
Update src/main/java/ca/openosp/openo/documentManager/actions/ManageD…
yingbull Jan 28, 2026
0b07d56
Merge pull request #2197 from openo-beta/claude/issue-2184-20260128-0033
yingbull Jan 28, 2026
bc91665
Update src/test-modern/java/ca/openosp/openo/managers/DashboardManage…
yingbull Jan 28, 2026
c2283ca
Update pom.xml
yingbull Jan 28, 2026
fc9b181
Update docs/migration/jasypt-to-spring-crypto.md
yingbull Jan 28, 2026
cc91beb
Update docs/migration/jasypt-to-spring-crypto.md
yingbull Jan 28, 2026
dde9d26
fix: add comprehensive error handling to PDF page rendering
github-actions[bot] Jan 28, 2026
4cd38ba
fix: use commons-digester3 3.2 (3.3 does not exist on Maven Central)
github-actions[bot] Jan 28, 2026
fe0aa8e
fix: address code review feedback for jasypt migration
github-actions[bot] Jan 28, 2026
c373df1
Merge pull request #2192 from openo-beta/claude/issue-2145-20260127-2252
yingbull Jan 28, 2026
e077cb2
Merge pull request #2199 from openo-beta/claude/issue-2158-20260128-0111
yingbull Jan 28, 2026
11a9974
Merge branch 'develop' into claude/issue-2183-20260128-0117
yingbull Jan 28, 2026
9e2829f
fix: Revert JAXB dependencies to valid javax namespace versions
github-actions[bot] Jan 28, 2026
c4781e1
Merge pull request #2200 from openo-beta/claude/issue-2183-20260128-0117
yingbull Jan 28, 2026
cff6954
Update pom.xml
yingbull Jan 28, 2026
9856c9d
chore: remove jpedal dependency and local repository files
github-actions[bot] Jan 28, 2026
72e6b43
chore: remove duplicate velocity:1.7 dependency
github-actions[bot] Jan 28, 2026
0a31752
fix: Add direct jaxb-runtime dependency to ensure JAXB availability a…
github-actions[bot] Jan 28, 2026
bd701d9
Merge branch 'develop' into claude/issue-2167-20260128-0114
yingbull Jan 28, 2026
6dad7cc
fix: prevent empty EHR widget after ClinicalConnect removal
github-actions[bot] Jan 28, 2026
df7ca59
Merge pull request #2205 from openo-beta/claude/issue-2203-20260128-0230
yingbull Jan 28, 2026
a02172c
Update struts-actions-detailed.md
yingbull Jan 28, 2026
e11bf49
fix: remove dead CC_EHR_LOADED conditional and unreachable code
github-actions[bot] Jan 28, 2026
86085db
Merge pull request #2204 from openo-beta/claude/issue-2167-20260128-0114
yingbull Jan 28, 2026
c6c21e3
Merge pull request #2201 from openo-beta/claude/issue-2164-20260128-0125
yingbull Jan 28, 2026
2e8d61d
chore: migrate janino 2.3.2 to org.codehaus.janino 3.1.12
github-actions[bot] Jan 28, 2026
50e2bc6
Merge pull request #2206 from openo-beta/claude/issue-2162-20260128-0233
yingbull Jan 28, 2026
6b4f894
fix: Replace Xerces DOMParser with standard Java DocumentBuilderFactory
github-actions[bot] Jan 28, 2026
d5799f8
Update JDBCUtil.java
yingbull Jan 28, 2026
ca8afb4
Merge pull request #2207 from openo-beta/claude/issue-2151-20260128-0321
yingbull Jan 28, 2026
9245421
Merge pull request #2208 from openo-beta/claude/issue-2150-20260128-0325
yingbull Jan 28, 2026
e5e970d
Merge branch 'develop' into feature/hooks-enhancements
yingbull Jan 28, 2026
9be4620
Merge pull request #1840 from openo-beta/feature/hooks-enhancements
yingbull Jan 28, 2026
be94df4
chore: remove 20 year old dead integration, fix build issues from rem…
yingbull Jan 28, 2026
77a7a7a
fix: sanitize formName in logs, remove unused code from VT cleanup
github-actions[bot] Jan 28, 2026
7a5fb9d
fix: resolve JSch dependency conflict, upgrade xercesImpl, remove PHI…
github-actions[bot] Jan 28, 2026
3cf0cf0
chore: update lock file for dep changes
yingbull Jan 28, 2026
1f32dce
chore: re-add missing required deps incl older janino for drools 2 su…
yingbull Jan 28, 2026
cf3499c
chore: resolve minor dependency and test errors including latent type…
yingbull Jan 28, 2026
e4263b0
test: fix DashboardManagerEncryptionUnitTest to extend OpenOUnitTestBase
github-actions[bot] Jan 28, 2026
ed12fb7
Merge pull request #2214 from openo-beta/chore/vt-cleanup
yingbull Jan 28, 2026
31c674c
fix: migrate Doc2PDF from jtidy to Jsoup
github-actions[bot] Jan 29, 2026
e4cd4f3
chore: upgrade cglib from 2.2.2 to 3.3.0 to resolve ASM conflicts
github-actions[bot] Jan 29, 2026
b890a9c
chore: migrate from dom4j to JDOM2 for XML processing
github-actions[bot] Jan 30, 2026
a2f2908
security: migrate from Apache Commons BeanUtils to Spring BeanUtils (…
github-actions[bot] Jan 30, 2026
d656fbb
chore: upgrade displaytag 1.2 → hazendaz 2.9.0
github-actions[bot] Jan 30, 2026
14d0811
Update ManageDashboard2Action.java
yingbull Jan 30, 2026
f40d761
Update pom.xml
yingbull Jan 30, 2026
a5ec866
fix: add critical security validations for XML file upload
github-actions[bot] Jan 30, 2026
df4dd81
fix: resolve code review issues in Doc2PDF migration
github-actions[bot] Jan 30, 2026
cd9a539
Merge pull request #2239 from openo-beta/claude/issue-2221-20260129-2325
yingbull Jan 30, 2026
94184b3
Apply suggestions from code review
yingbull Jan 30, 2026
5f34f2e
Merge pull request #2242 from openo-beta/claude/issue-2152-20260130-0036
yingbull Jan 30, 2026
7d12602
Merge pull request #2240 from openo-beta/claude/issue-2138-20260130-0004
yingbull Jan 30, 2026
8fd22b4
Merge pull request #2238 from openo-beta/claude/issue-2154-20260129-2321
yingbull Jan 30, 2026
51267b6
fix: restore backward compatibility in BeanUtilHlp null handling
github-actions[bot] Jan 30, 2026
445f78c
chore: update lock file for recent dependency updates.
yingbull Jan 30, 2026
10235b0
refactor: migrate BeanComparator to Java Comparator.comparing()
github-actions[bot] Jan 30, 2026
f77afea
Merge pull request #2241 from openo-beta/claude/issue-2202-20260130-0031
yingbull Jan 30, 2026
f78e92d
Merge pull request #2246 from openo-beta/chore/lock-update
yingbull Jan 30, 2026
fd94f36
chore: sonarcube for CI
yingbull Jan 30, 2026
04a347f
chore: update to use existing build containers for sonarcube
yingbull Jan 30, 2026
0fe6e30
Update .github/workflows/sonarcloud.yml
yingbull Jan 30, 2026
83f84f1
fix: restore hapi parent POM required by hapi-base dependency
yingbull Jan 30, 2026
d4fbdbe
chore: align to current org key, fix cache hash issue sonarcloud
yingbull Jan 30, 2026
3141788
chore: sonarcloud setup
yingbull Jan 30, 2026
1383f67
chore: config update for sonarcloud scan
yingbull Jan 30, 2026
5937fff
chore: add PR decorators to SonarCloud workflow
yingbull Jan 30, 2026
6a5b84d
Merge pull request #2251 from openo-beta/chore/sonarcube
yingbull Jan 30, 2026
09953b8
chore: upgrade jackson dependencies to 2.21.1, update lock files
sebastian-j-ibanez Mar 6, 2026
17164b9
security: upgraded vulnerable hl7 transitive dependencies to 6.4.0
LiamStanziani Mar 24, 2026
2b89431
fix: resolve 99 JSP compilation errors from displaytag migration (the…
LiamStanziani Mar 24, 2026
d0ea449
chore: consolidated displaytag taglibs to remove display-el due to re…
LiamStanziani Mar 24, 2026
ad40d8e
Merge remote-tracking branch 'upstream-base/main' into develop-stagin…
LiamStanziani Mar 24, 2026
8fd3cef
Merge remote-tracking branch 'origin/issue-2322-upgrade-jackson' into…
LiamStanziani Mar 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
50 changes: 50 additions & 0 deletions .claude/hooks/inject-test-context.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/usr/bin/env python3
"""
Injects modern test framework context when working on test files.

Trigger: Read, Edit, or Write operations on files in src/test-modern/ ending with Test.java
Purpose: Provides BDD naming conventions, tag hierarchy, and test structure guidance to Claude
Source: docs/test/claude-test-context.md (single source of truth)

Note: Assumes CLAUDE_PROJECT_DIR environment variable is set, falls back to /workspace
for devcontainer environments.
"""
import json
import sys
import os


def main():
try:
data = json.load(sys.stdin)
except json.JSONDecodeError:
sys.exit(0)

tool_input = data.get("tool_input", {})

# All three tools (Read, Edit, Write) use file_path for the target file
file_path = tool_input.get("file_path", "")

# Only trigger for modern test files
if "src/test-modern" not in file_path or not file_path.endswith("Test.java"):
sys.exit(0)

# Read context from the docs file (single source of truth)
project_dir = os.environ.get("CLAUDE_PROJECT_DIR", "/workspace")
context_file = os.path.join(project_dir, "docs/test/claude-test-context.md")

try:
with open(context_file, 'r') as f:
context = f.read()
print(context)
except FileNotFoundError:
print("Warning: Test context file not found: docs/test/claude-test-context.md", file=sys.stderr)
print("Please read docs/test/test-writing-best-practices.md for test conventions.", file=sys.stderr)
except Exception as e:
print(f"Warning: Error reading test context: {e}", file=sys.stderr)

sys.exit(0)


if __name__ == "__main__":
main()
274 changes: 274 additions & 0 deletions .claude/hooks/validate-owasp-encoding.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,274 @@
#!/usr/bin/env python3
"""
OWASP Encoding Validator Hook for Claude Code

This hook validates that JSP and Java files use proper OWASP encoding
to prevent XSS vulnerabilities.

Exit codes:
- 0: Safe patterns detected or non-applicable file
- 2: Unsafe patterns detected (blocks the operation with feedback)
"""

import json
import re
import sys


def get_file_content_from_input(tool_input: dict) -> tuple[str, str]:
"""Extract file path and content from tool input."""
file_path = tool_input.get("file_path", "")

# For Write tool, content is in 'content' field
# For Edit tool, new content is in 'new_string' field
content = tool_input.get("content", "") or tool_input.get("new_string", "")

return file_path, content


def check_jsp_unsafe_patterns(content: str) -> list[str]:
"""
Check JSP content for unsafe EL expressions without OWASP encoding.

Unsafe patterns:
- ${param.xxx} - raw parameter access
- ${requestScope.xxx} - raw request scope access
- ${sessionScope.xxx} - raw session scope access
- ${xxx} without Encode wrapper - any unencoded EL expression

Safe patterns:
- ${Encode.forHtml(...)}
- ${Encode.forJavaScript(...)}
- ${Encode.forHtmlAttribute(...)}
- <c:out value="${...}"/>
- ${fn:escapeXml(...)}
"""
issues = []

# Pattern for raw EL expressions that are NOT inside Encode.for* or c:out
# This regex finds ${...} expressions
el_pattern = r'\$\{([^}]+)\}'

# Safe wrappers that indicate proper encoding
safe_wrappers = [
r'Encode\.for\w+\s*\(', # Encode.forHtml(), Encode.forJavaScript(), etc.
r'fn:escapeXml\s*\(', # JSTL escapeXml function
]

for match in re.finditer(el_pattern, content):
el_expr = match.group(0)
el_content = match.group(1)

# Skip if this is inside a safe wrapper
is_safe = False

# Check if expression uses safe encoding functions
for safe_pattern in safe_wrappers:
if re.search(safe_pattern, el_content):
is_safe = True
break

if is_safe:
continue

# Check if this ${} is inside a <c:out> tag
# Look backwards from the match to find if we're in a c:out
start_pos = max(0, match.start() - 200)
context_before = content[start_pos:match.start()]
context_after = content[match.end():match.end() + 50]

# Robust check: if <c:out is found before and a proper closing (/> or </c:out>) appears after
has_cout_open_before = '<c:out' in context_before
has_self_closing_after = bool(re.match(r'^["\']?\s*/>', context_after))
has_cout_close_after = bool(re.search(r'</\s*c:out\s*>', context_after))
if has_cout_open_before and (has_self_closing_after or has_cout_close_after):
is_safe = True

if is_safe:
continue

# Check for high-risk expressions (user input)
high_risk_patterns = [
r'param\.', # Request parameters
r'requestScope\.', # Request scope
r'sessionScope\.', # Session scope
r'cookie\.', # Cookies
r'header\.', # Headers
r'initParam\.', # Init parameters
]

is_high_risk = any(re.search(p, el_content) for p in high_risk_patterns)

if is_high_risk:
issues.append(
f"CRITICAL: Unencoded user input in EL expression: {el_expr}\n"
f" This can lead to XSS vulnerabilities.\n"
f" Use: ${{Encode.forHtml({el_content})}} or <c:out value=\"{el_expr}\"/>"
)
else:
# For other expressions, warn but be less strict
# Check if it looks like it might contain user data
if re.search(r'[Nn]ame|[Vv]alue|[Ii]nput|[Dd]ata|[Tt]ext|[Mm]essage|[Cc]omment', el_content):
issues.append(
f"WARNING: Potentially unsafe EL expression: {el_expr}\n"
f" If this contains user input, use OWASP encoding.\n"
f" Suggested: ${{Encode.forHtml({el_content})}} or <c:out value=\"{el_expr}\"/>"
)

return issues


def check_java_unsafe_patterns(content: str) -> list[str]:
"""
Check Java content for unsafe output patterns without OWASP encoding.

Unsafe patterns:
- response.getWriter().write(userInput)
- out.println(userInput) without encoding
- PrintWriter writing raw strings with user data

Safe patterns:
- Encode.forHtml(userInput)
- Encode.forJavaScript(userInput)
- response.getWriter().write(Encode.forHtml(...))
"""
issues = []

# Pattern for direct output to response without encoding
# Look for response.getWriter().write/print patterns
output_patterns = [
(r'response\s*\.\s*getWriter\s*\(\s*\)\s*\.\s*(?:write|print|println)\s*\(\s*(?!Encode\.)',
"response.getWriter().write() without OWASP encoding"),
(r'out\s*\.\s*(?:write|print|println)\s*\(\s*(?!Encode\.)',
"out.print() without OWASP encoding"),
# PrintWriter/Writer pattern - matches generic usage but will be filtered
# to exclude known-safe patterns like System.out, System.err, logger, file I/O
(r'\b\w+\s*\.\s*(?:write|print|println)\s*\(\s*(?!Encode\.|")',
"PrintWriter/Writer output without OWASP encoding"),
]

for pattern, description in output_patterns:
# Use a single regex that both detects the pattern and captures the argument
combined_pattern = pattern + r'([^)]+)\)'
for match in re.finditer(combined_pattern, content):
# Extract the full matched text to check for exclusions
full_match = match.group(0)

# Skip known-safe non-HTTP patterns
# System I/O, logging, and file I/O don't pose XSS risks
safe_patterns = [
'System.out', # Console output
'System.err', # Error output
'logger.', # Logger instances
'log.', # Log instances
'LOG.', # Uppercase log constants
'fileWriter.', # File I/O
'bufferedWriter.', # Buffered file I/O
'writer.', # Generic file writers (lowercase convention)
'Writer.', # File writer classes
]
if any(safe in full_match for safe in safe_patterns):
continue

# Extract the argument being written/printed
output_content = match.group(1) if match.lastindex else ""
stripped_output = output_content.strip()

# Skip if it's a pure literal string with no concatenation
if (
stripped_output.startswith('"')
and stripped_output.endswith('"')
and '+' not in stripped_output
):
continue

issues.append(
f"WARNING: {description}\n"
f" If outputting user data, wrap with Encode.forHtml() or appropriate encoder.\n"
f" Example: response.getWriter().write(Encode.forHtml(userInput))"
)
# Only need one warning per pattern; break after first unsafe match
break
return issues


def validate_content(file_path: str, content: str) -> tuple[bool, list[str]]:
"""
Validate file content for OWASP encoding compliance.

Returns:
(is_safe, issues): Tuple of safety status and list of issues found
"""
if not file_path or not content:
return True, []

issues = []

# Check based on file type
if file_path.endswith('.jsp'):
issues.extend(check_jsp_unsafe_patterns(content))
elif file_path.endswith('.java'):
issues.extend(check_java_unsafe_patterns(content))

# Critical issues start with "CRITICAL:"
has_critical = any(issue.startswith("CRITICAL:") for issue in issues)

return not has_critical, issues


def main():
"""Main entry point for the hook."""
try:
# Read JSON input from stdin
input_data = json.load(sys.stdin)

# Extract tool input
tool_input = input_data.get("tool_input", {})
tool_name = input_data.get("tool_name", "")

# Only process Edit and Write tools
if tool_name not in ("Edit", "Write"):
sys.exit(0)

# Get file path and content
file_path, content = get_file_content_from_input(tool_input)

# Only check JSP and Java files
if not (file_path.endswith('.jsp') or file_path.endswith('.java')):
sys.exit(0)

# Validate content
is_safe, issues = validate_content(file_path, content)

if issues:
# Output feedback to stderr
print("\n=== OWASP Encoding Validator ===", file=sys.stderr)
print(f"File: {file_path}\n", file=sys.stderr)
for issue in issues:
print(f"{issue}\n", file=sys.stderr)

if not is_safe:
print("BLOCKED: Critical XSS vulnerability detected.", file=sys.stderr)
print("Please use OWASP encoding for all user input.", file=sys.stderr)
print("\nOWASP Encoder methods:", file=sys.stderr)
print(" - Encode.forHtml() - HTML body content", file=sys.stderr)
print(" - Encode.forHtmlAttribute() - HTML attributes", file=sys.stderr)
print(" - Encode.forJavaScript() - JavaScript contexts", file=sys.stderr)
print(" - <c:out value=\"${...}\"/> - JSP safe output", file=sys.stderr)
sys.exit(2)
else:
print("WARNING: Potential issues detected but not blocking.", file=sys.stderr)
print("Please review the warnings above.", file=sys.stderr)

sys.exit(0)

except json.JSONDecodeError as e:
print(f"Error parsing JSON input: {e}", file=sys.stderr)
sys.exit(0) # Don't block on parse errors
except Exception as e:
print(f"Error in OWASP validation hook: {e}", file=sys.stderr)
sys.exit(0) # Don't block on unexpected errors


if __name__ == "__main__":
main()
Loading
Loading