Revision history for oEdtk

2.1131      2026-10-22
    - DBAdmin: the schema detect, migration and additive reports no longer print the internal
      "schema level" line; the driver, target and feature details are unchanged.

2.1130      2026-10-21
    - DBAdmin: --with-constraints now really performs the primary-key change: PostgreSQL and
      Oracle build a separate unique index and attach it, MySQL swaps the key in place, SQLite and
      unknown drivers report the change as unsupported. Intermediate failures are reported instead
      of ignored.
    - DBAdmin: schema lookups ignore identifier case, so a PostgreSQL table folded to lower case
      is found instead of being recreated.
    - db_migrate: the additive preview lists the key-change statements; --with-constraints outside
      --additive is rejected with an explicit error.

2.1129      2026-10-19
    - Tracking: ED_SOURCE now holds the input file actually processed by the packaged tracker; it
      stays empty when a run handles no file (the old "input-file" placeholder is gone).
    - Tracking: a row logged without a message now records the name of the calling function in
      ED_MESSAGE instead of a blank.
    - tracker: --insert rows and the show_table helper follow the same rules (the source is now
      passed correctly).

2.1128      2026-10-19
    - Style: every Perl file under lib/, t/, tools/ and tracker/ is now perltidy-clean; the
      reformatting is proven not to change behaviour.
    - perlcritic: severity-5 violations drop from 41 to 1. Legacy scripts lose prototypes and
      two-argument open calls and gain strict where it was missing; the remaining one (the octal
      01 in cob2pm.pl) is deliberate.

2.1127      2026-10-19
    - Dependencies: Text::QRCode becomes optional. It needs the native libqrencode library, so a
      plain 'cpan oEdtk' failed on hosts without it. append_qr_code loads it on first use and
      stops with a clear message when it is missing.
    - Dependencies: DBD::mysql and DBD::Pg are no longer required for the tests (they were already
      optional at run time), so installing the package no longer tries to build the database
      drivers.
    - The database integration tests skip with an explicit reason when a driver is missing. README
      and cpanfile updated.

2.1126      2026-10-18
    - DBAdmin: new force_copy parameter (tracker option --forceCopy) forces the plain PostgreSQL
      COPY path and bypasses the ELT staging path before a large import.
    - DBAdmin fix: the administration action duration is stored in whole seconds; PostgreSQL used
      to reject the fractional value and leave the action open.
    - Documentation: EDTK_DB_BURST_MO now states its real default of 50 MiB.

2.1125      2026-10-17
    - DBAdmin: the stale-schema remediation hint can be copied and pasted as is (DSN and user are
      quoted), and a host application can register its own wording.
    - New read-only schema_AdditivePlan previews the in-place additive update (missing columns,
      wider columns, missing tables, key) without writing anything; db_migrate.pl gains the
      matching '--additive --dry-run'.
    - Packaged tracker: new in-place '--upgradeSchema --additive' mode with a read-only '--dryRun'
      preview.

2.1124      2026-10-16
    - Performance pass driven by profiling: four measured hotspots are optimised without changing
      behaviour (record parser, configuration loading, signed-amount table in Main, oEUser
      descriptor dispatch). Figures in docs/perf/P80-rapport.md.
    - All modules now carry the package version instead of the previous mix (0.01 ... 2.11NN);
      every later release keeps them aligned.
    - Documentation brought up to date (performance campaign, integration, DBAdmin and logger
      contracts).
    - Licence: the shipped COPYING is the Artistic License 2.0 named in the POD.

2.1110      2026-10-13
    - Integration of the 0.8032 fork, phases S10 to S23. New features are inactive until
      configured in edtk.ini.
    - Requirements: Perl 5.028 minimum; the fork's runtime dependencies added (e.g. Data::UUID,
      Text::CSV_XS, LWP::UserAgent, PDF::Tk, Text::QRCode, Try::Tiny, YAML::Tiny); dead fork
      dependencies dropped; cpanfile is now generated from Makefile.PL; oEUser is not a
      prerequisite (at most suggested).
    - tplate.edtk.ini rebuilt as the union of the mainline and fork keys, with mainline defaults:
      new [SERVICES] section (e-mailing, Keycloak, dissemination plan, ECM, SSL options), the
      ed_idjob primary-key keys (EDTK_DB_PK_IDJOB, EDTK_DB_IDJOB_DEFAULT),
      EDTK_DB_FetchHashKeyName and EDTK_LOG_LVL.
    - The three shipped HTML forms carry the fork content, fully anonymised with neutral
      placeholders (index.html gains three applications).
    - The existing Perl tree is reformatted with perltidy (88 files, behaviour proven unchanged).
    - New companion distribution oEUser 0.10 (requires oEdtk >= 2.1110): the fork's user-side
      modules (Lib, ECM, Descriptor and its generated descriptors, XML readers).
    - New generic modules: IBAN/BIC validation (fixes iban_letter_to_number, which only worked
      from inside the checksum routine), Restitution, FixIdx (even page counts in index files),
      LaTeX (latin-9 escaping, index helpers) and Utils (text, date and price helpers; the
      corporate part moved to oEUser::Utils).
    - ECM: new oEdtk::ECM uploads documents to the ECM service and stamps the mailed date through
      REST; the URL and API key come from APIECM_URL and APIECM_APIKEY_EDITIQUE.
    - XML: the DTD and XSD validators and the generic readers (Default, Generic) now live in
      oEdtk. Fixes: documents without DOCTYPE no longer crash, valid documents are no longer
      rejected, the schema is found next to the document.
    - Network clients (Keycloak token, REST e-mailing, dissemination plan) live in oEUser, with
      same-name stand-ins in oEdtk that load them on demand. TLS verification is on by default
      (EDTK_SSL_VERIFY, EDTK_SSL_CA_PATH) instead of the fork's hard-coded settings; the e-mailing
      bug that made every send die is fixed.
    - Constants (document typology) and Infinite (COBOL flow readers) move to oEUser, with
      stand-ins in oEdtk.
    - Extension points: optional companion modules are loaded by fixed name, and a named callable
      can be set in configuration (EDTK_ACQUIT_API) after validation; both are no-ops when absent.
    - No corporate brand name remains in the generic tree.

2.1109      2026-10-11
    - DBAdmin: distribution tables get indexes on job and batch date, so by-job and by-date
      queries no longer scan the whole table.
    - DBAdmin: the MySQL bulk load refreshes statistics after the import, like the PostgreSQL COPY
      path.
    - DBAdmin: admin_optimize_db uses a single connection; PostgreSQL now runs VACUUM ANALYZE
      instead of VACUUM FULL (no exclusive lock); SQLite is supported.
    - DBAdmin: db_backup_agent is no longer deprecated; a same-day re-run keeps the existing
      archive instead of failing.
    - SQLite can now be the main database, lot-identifier generation included.
    - DBAdmin: new db_invalidate_meta_cache (called after schema changes); db_check_privileges
      also probes INDEX, ALTER and SEQUENCE rights.
    - Outmngr: all warnings go through the logger (timestamp, level, PID) instead of STDERR.

2.1108      2026-10-10
    - Comments, POD and user-facing messages are written in English across lib/ and tracker/ (text
      only, behaviour unchanged).
    - DBAdmin: new db_check_privileges reports, without ever failing, whether the database user
      may CREATE and DROP; schema_Create and schema_Upgrade call it up front and log a
      non-blocking alert for any missing right.

2.1107      2026-10-10
    - DBAdmin: dead code removed (731 lines): the deprecated copies of csv_import, insert_tData,
      _get_col_meta, _db_check_driver_name and admin_optimize_db.

2.1106      2026-10-10
    - DBAdmin: fixes a performance hot spot in the PostgreSQL COPY path: a 2-million-row load
      drops from 722.7 s to 195.8 s (3.7x faster).
    - New generator for a two-million-row test file (built on demand, not stored).

2.1105      2026-10-09
    - DBAdmin: PostgreSQL COPY now streams the cleaned rows straight into COPY in 1 MiB blocks,
      with no temporary file (File::Temp dependency dropped).
    - DBAdmin: pg_copy_defer_pk => 1 also rebuilds the primary key around the load; a key
      referenced by a foreign key is left alone, and any failure falls back to the non-deferred
      load.

2.1104      2026-10-08
    - DBAdmin: the bulk loaders (MySQL INFILE, MySQL LOCAL INFILE, PostgreSQL COPY) log the method
      used and the number of rows.
    - DBAdmin: the PostgreSQL COPY runs in one transaction; secondary indexes and unique /
      foreign-key constraints are dropped before the load and rebuilt after it; synchronous commit
      is relaxed for the transaction and ANALYZE runs afterwards. The load is atomic (a failure
      rolls back data and DDL, with one retry without deferral); pg_copy_optimize => 0 keeps the
      plain COPY.

2.1102      2026-10-06
    - DBAdmin: new PostgreSQL fast path for csv_import using COPY FROM STDIN, automatic for the Pg
      driver unless the mode is "merge". Rows are cleaned like the row-by-row path (truncation,
      empty -> NULL), multi-line quoted fields are accepted and values are re-encoded to the
      session client_encoding.
    - First test suite (Test::More) under t/, with shared helpers, a test ini and a PostgreSQL
      COPY check script.
    - README.md merged with the old plain README and rewritten with the real archive contents;
      copyright year 2026.

2.1071      2026-07-01
    - DBAdmin: column metadata now tells text columns from numeric and date ones. Fixes wrong
      truncation on PostgreSQL (the date 2026-07-09 became "2026") and "invalid input syntax for
      type date" errors on empty values (empty -> NULL for numeric and date columns).
    - Copyright year 2026.

2.1065      2026-06-05
    - Version bump; copyright year 2026.

2.1064      2026-06-04
    - DBAdmin: SQL rewritten in lower case for portability across MySQL, PostgreSQL, Oracle and
      SQLite (MySQL upper-casing, empty -> NULL on PostgreSQL).
    - DBAdmin: insert_tData and csv_import rewritten: driver-aware identifier case, column
      metadata lookup, value cleaning (empty -> NULL for numerics, truncation to the column size).
      The old versions are kept as deprecated copies.
    - DBAdmin: db_connect: FetchHashKeyName is configurable (EDTK_DB_FetchHashKeyName, default
      NAME_uc); the tracking table is created on connect when missing; the automatic database
      check now runs only when EDTK_DB_CHECK_AUTO is explicitly YES (it used to default to YES).
    - DBAdmin: admin_check_db renamed acheck_db_admin_on_connect; _drop_table becomes the public
      db_drop_table; new on-demand maintenance job (acheck_db_admin2) with locking; driver
      detection hardened; admin_optimize_db rewritten per driver.
    - DBAdmin: portable index names (ix_<table>_<version>, create index if not exists); sequence
      creation made repeatable; column definitions in lower case; some OUTMNGR columns no longer
      NOT NULL.
    - logger: package renamed oEdtk::logger (the file is still logger2.pm, version 1.9062); new
      set_logger_level and set_warn_to_logger; levels can be given as letters; debug and context
      levels swapped (7 and 8); new log line format; logger() return value changed; usage_logger
      renamed logger_help.
    - Tracking: table name uppercased on MySQL; statistics queries in lower case.

1.9013      2024-01-03
    - DBAdmin: create_table_INDEX renamed create_table_OUTMNGR; every CREATE TABLE is now
      repeatable (if not exists); schema_Create takes a single $dbh and no longer creates the
      tracking table.
    - DBAdmin tables: Tracking gets an ED_TSTAMP index (fixes the SQLite creation bug) and MyISAM
      on MySQL; DISTRIB, AGREGE and OUTMNGR replace their primary key or separate indexes with one
      composite index; AGREGE gains ED_TSTAMP and ED_CNTD_IDLDOC becomes INTEGER.
    - DBAdmin: admin_optimize_db now takes a hash (CFG => $cfg) and runs repair then optimize per
      table; the AGREGE rotation writes a new ED_TSTAMP and groups by ED_IDJOB;
      EDTK_DB_MAX_DAYS_AGREGED falls back to EDTK_DB_MAX_DAYS_TRACKED.
    - DBAdmin: fixes an operator-precedence bug in error messages; SQL debug logging added.
    - Main: the system date is now really restored at program exit.
    - tplate.edtk.ini: Linux defaults (base directory, perl path, Dev environment), new [EDTK_DB]
      and [EDTK_STATS] sections, new [MAIL] key, [COMSET] removed.
    - db_Schema_init.pl follows the rename; licence text changed to GPL v3; README trimmed.

1.9012      2024-01-02
    - Revert of the 1.8122 and 1.8123 changes: create_table_INDEX name restored,
      EDTK_DB_CHECK_AUTO fix reverted, Windows/Compuset configuration restored in tplate.edtk.ini,
      licence text back to GPL v2; Config, Main, Outmngr, TexDoc, TexTag, db_Schema_init.pl and
      README back to their earlier state.
    - Version 1.9012; copyright 2005-2024.

1.8123      2023-12-03
    - DBAdmin fix: the EDTK_DB_CHECK_AUTO test now accounts for the value being defined (YES) by
      default.
    - Copyright year 2025.

1.8122      2023-12-02
    - New module logger2.pm.
    - DBAdmin: major rewrite with new maintenance and schema functions (admin_check_db,
      acheck_db_admin, agrege_idJob, schema_Create, schema_Upgrade, create_table_ADMIN / ID /
      AGREGE / OUTMNGR); create_SCHEMA becomes schema_Create; MySQL infile loader.
    - tplate.edtk.ini: new [EDTK_DB] and [EDTK_STATS] sections, [COMSET] removed, Linux defaults.
    - README renamed README.md; licence changed to GPL v3.
    - New dependencies: Image::Size, Log::Log4perl, PDF::Create.

1.5093      2020-09-03
    - New Changes file.
    - Perl 5.010 minimum, licence 'perl'; DBD::Oracle and DBD::Pg removed from the declared
      prerequisites.
    - oEdtk.pm: strict and warnings enabled.

1.5091      2020-09-01
    - Perl 5.10.0 minimum.
    - New dependencies: YAML, CPAN::DistnameInfo, DBD::Excel, DBD::Oracle, DBD::Pg, DBD::SQLite,
      JSON, XML::Simple.
    - Config: edtk.ini is now looked up in the program directory first, then in the module
      directory.
    - DBAdmin: new insert_tData (insert tracking data from outside); csv_import uses MySQL LOAD
      DATA LOCAL INFILE when the DSN allows it; new tracking and distribution column definitions;
      the tracking table gains ED_ACCOUNT.
    - Tracking: track() accepts entity, account, object type, child type and id, parent id.
    - logger: WARN and DIE can be reported to the tracking database ($WARN2LOGGER). trackEdtk:
      event levels extended (Job, Spool, Document, Line, Warning, Error, Halt, Reject, Track).

0.8052      2013-05-02
    - New META.json.
    - HTML templates (edtk_ged, edtk_inged, index): hard-coded application and corporation names
      replaced by placeholders.
    - Authors updated (G Ballin added); copyright 2005-2013.

0.8035      2013-03-05
    - Config: new get_ini_path() returns the path of the ini actually loaded (used by
      check_oEdtk_ini.pl).
    - EDMS: EDMS_package no longer takes a path argument; files are added by basename.

0.8034      2013-03-04
    - EDMS: new EDMS_package packages several documents with one index in a zip archive for later
      processing; the existing package function now returns 1 and prints the zip name.

0.8032 fork 2025-12-16
    - Production fork based on the 0.8032 codebase: a divergent branch, not a mainline release. It
      drops the Compuset/C7 subsystem and the tracking API, and adds ECM (Alfresco), REST
      e-mailing, Keycloak authentication, IBAN/BIC validation, QR codes and LaTeX index handling.
      The version string is not a valid CPAN version (kept for traceability).
    - New modules: Utils, FixIdx, LaTeX, Emailing (Perl 5.028), Keycloak (Perl 5.020), Infinite,
      IBAN, Constants (ECM typology), Restitution, DisseminationPlan, XML::DTD, XML::XSD and
      XML::DTD::Utils.
    - Main: oe_ID_LDOC now returns a Data::UUID string instead of the numeric YWWWDHHMMSSPPPP.r
      format; new job-handling functions (oe_options, oe_params, oe_simple_job, ...); all
      Compuset/C7 functions removed.
    - Run: PDF backgrounds (bpdf), recto-verso documents with even page counts, LOTPDF.txt written
      in UTF-8, EDTK_KEEP_OUT_FILE honoured, PDF existence checked.
    - EDMS rewritten for Perl 5.20+: 36-column index CSV with an optional Alfresco header;
      EDMS_import returns 0.
    - DBAdmin: acknowledgement processing (ECM call, e-mail report, reference column, Oracle copy
      hints); four ECM columns added to the index table; some table functions removed.
    - Also changed: Config (hostname section no longer merged last, read_hash), RecordParser,
      TexDoc (QR codes), Record (bind semantics) and Doc (one TeX command per line). Removed: the
      trackEdtk tracking API, some libDev and libXls helpers, Spool::emit. New scripts db_move.pl
      and edms_runner.pl; acq_Load.pl removed.
    - cpanfile replaces the PREREQ_PM list; edtk.ini is shipped next to tplate.edtk.ini with new
      keys (forms and backgrounds directories, lualatex switch, Alfresco keys, DB and stats
      sections). New tests for IBAN, Utils and FixIdx.

0.8032      2013-03-02
    - DBD::Oracle is no longer a hard prerequisite.

0.8031      2013-03-01
    - EDMS: archives may contain .xls and .doc documents besides .pdf; non-PDF documents are not
      split into pages but renamed to a Docubase-compatible name.
    - Tracking: application names accept hyphens and underscores, long names are cut to their last
      20 characters; new Reject (R) job event.
    - Config: warning when the template ini is read. check_oEdtk_ini.pl: -h fix.
    - New module OmgrIdxDoc (builds an index CSV row from the @INDEX_COLS tags).
    - New dependency DBD::Oracle; README authors and install notes updated.

0.8022      2013-02-02
    - DBAdmin: new copy_table (-create builds the target first; stops if the source is empty);
      move_table is deprecated and delegates to it; historicize_table uses it; new db_backup_agent
      backs up and purges old rows of the tracking, output-manager and acknowledgement tables
      (EDTK_ENTIRE_YEARS_KEPT).
    - Outmngr: inserts with start date '99999999' mean "no start date"; omgr_purge_fs backs up
      before purging; doclibs referenced during the last EDTK_DCLIB_PURGE_WEEKS_KEPT weeks are
      kept.
    - New script db_copy.pl replaces db_move.pl; index_Purge_DCLIB.pl: -h fix.

0.8021      2013-02-01
    - Tracking: the source defaults to the command line when not provided, so it is detected
      automatically.

0.8014      2013-01-04
    - Config: the Compuset block that stripped environment extensions from program names is
      disabled.
    - DBAdmin: EDTK_LOTS gains ED_CONSIGNE (VARCHAR2(250)). Outmngr: omgr_export includes
      ED_CONSIGNE.
    - Outmngr: omgr_stats return format changed: the array now starts with a format string and a
      header row, and CORP comes first. Callers must shift them off; index_Run_lot.pl and
      index_Statistics.pl are adapted.
    - Run fix: intermediate files after zipping are kept only for Dev/Debug environments (any name
      containing a "D", such as PROD, used to be affected).
    - Tracking: the Job event records the full command line and ED_SOURCE.
    - index_Block_refs.pl: no longer depends on Outmngr; blocks and unblocks by partial idldoc
      with a % wildcard; STOP filter fixed (ED_STATUS).
    - New dependency Roman; README install instructions (XML-LibXML, dmake on Windows).

0.7125      2012-12-05
    - Version bump only; whitespace in the POD examples.

0.7121      2012-12-01
    - Main: new --noinputfiles option (treatments without an input file); argument parsing
      reworked.
    - Outmngr: omgr_check_acquit shortens long postal codes; the job ticket gains ED_PRIORITE,
      ED_REFIDDOC and ED_REFENC.
    - Run: lotissement is no longer suspended for non-Mass/Debug/Test types; deletion of
      intermediate files is driven by EDTK_TYPE_ENV.
    - DBAdmin: columns widened (ED_REFENC 20 -> 32, ED_REFIMP 8 -> 16, ED_IDLOT 6 -> 8).
    - README: XML-LibXML installation instructions; copyright 2013.

0.7029      2012-02-09
    - TexDoc: LATEX dictionary substitution enabled in escape().
    - RecordParser: new set_motif_to_denormalized_split().
    - Dict: chr(N) keys are no longer decoded (feature removed).
    - Packaging: META.yml updated, META.json removed, line endings changed (LF -> CRLF).

0.7028      2012-02-08
    - Outmngr and DBAdmin: lot matching uses ED_REFIDDOC instead of ED_IDAPPDOC; in EDTK_LOTS,
      ED_IDAPPDOC is no longer NOT NULL and ED_REFIDDOC VARCHAR2(20) NOT NULL is added.
    - Main: cleanup of commented-out code.
    - Packaging: META.json added; line endings changed (CRLF -> LF).

0.7027      2012-02-07
    - Record: new seek_key attribute (set_seek_key()); the whole line is now unpacked.
    - RecordParser: new dumper(); records are recognised by their seek_key; unknown records are
      warned about and ignored instead of aborting.
    - New prerequisite Data::Dumper; README TODO items.

0.7025      2012-02-05
    - Outmngr: statistics read their table names from the EDTK_STATS configuration instead of
      hard-coded names.
    - Scripts: the historicize scripts wait 30*EDTK_WAITRUN (or 600) and abort on N/S;
      params_Import.pl accepts an optional INI_SECTION; most lib scripts have -h/usage help;
      edms_runner.pl removed.

0.7023      2012-02-03
    - RecordParser: the denormalized-record split now splits on every separator instead of
      collapsing consecutive ones.

0.7021      2012-02-01
    - Run: oe_after_compo always removes $app.aux.
    - Tracking: no undef warning on undefined data values.

0.7017      2012-01-07
    - Doc, TexDoc, TexTag: LaTeX escaping moves from TexTag to TexDoc (Doc declares an abstract
      escape); the digit-in-tag-name warning is emitted once.
    - Outmngr: new omgr_track_no_omgr (stub); omgr_check_acquit: the condition between the date
      and status checks changes from AND to OR.
    - Run: oe_cmd_run dies instead of warning when a command fails.
    - Tracking: the source defaults to an empty string; one extra data value is accepted for the
      new message column.
    - Dict substitution refactored; index_Check_tracked_docs.pl shows the YWWD value.

0.7014      2012-01-04
    - oEdtk_version() renamed oEdtk_release(); the banner text changes.
    - Main: new oe_CAP_sans_accents (replaces oe_oe_uc_sans_accents), oe_char_xlate
      (dictionary-driven character translation from EDTK_DICO_XLAT) and oe_list_encodings; address
      cleaning is now dictionary-driven; oe_new_job gains --input_code, opens files with encoding
      layers and takes the output encoding from EDTK_OUT_ENCODING (default utf8).
    - Dict: substitue_char renamed substitue; dictionary keys written chr(N) target special
      characters.
    - Doc and TexTag: new char_xlate; TexTag warns when a tag name contains digits.
    - Record and RecordParser: configurable offsets and parser (skipped line, mute record, line
      record, key offset and size, denormalized record) with setters; RecordParser dies on an
      undefined filehandle.
    - Tracking: warn and die handlers record Warn and Halt events when EDTK_TRACK_SIG is set; new
      ED_MESSAGE column (also added to the DBAdmin tracking table as VARCHAR2(256)).
    - Outmngr: statistics read EDTK_STATS_OUTMNGR; acknowledgement report ordering adjusted;
      several WARN messages downgraded to INFO.
    - Scripts: cob2pm.pl (longer identifiers, comments stripped, better errors); index_Run_lot.pl
      mail subject no longer prefixed; message prefixes standardised.

0.6122      2011-12-02
    - execution control on cgi
    - ISO dictionary of country codes
    - control of acknowledgement return to the finisher for verification
    - technical folio numbering in the lotissement

0.6115      2011-11-05
    - SGBD connexion retry (3 times)
    - correcting bug in FIFO configuration

0.6000      2011-06-01
    - added ed_host in check ini
    - ED_SEQLOT widened to VARCHAR2(7) to carry the year ('391123' => '1391123')
    - integrate the lotissement constraints (ed_cpdest => ed_constraint, e.g. "ED_CODRUPT =
      'NOUVEL_ER'" or "ED_HOST ='SRVPROD'")
    - clean up Main.pm => oEUser.pm
    - move CodRupt to 8 characters
    - group the .tar files in the same deployment directory
    - preview resume at the end of runEdtk.pl
    - rounding management oEdtk::Main::oe_round

0.5000      2010-01-01
    - LaTeX integration
    - Output management integration
    - Electronic Documents Management and Sharing integration

0.400       2009-01-01
    - File configuration for developpements
    - Developpement application launcher
    - Integration of DSC Compuset launcher
    - Beta text user interface for developpements
    - Records methods for production
    - Excel file spliting
    - tracking module
    - Documentation

0.30        2008-01-01
    - Optimized for production version.

0.21        2007-01-01
    - Production test version.

0.10        2006-01-01
    - Functionnal version.

0.01        2005-01-01
    - Original beta version.
